Chonky is a Python library that intelligently segments text into meaningful semantic chunks using a fine-tuned transformer model. This library can be used in the RAG systems.
pip install chonky
Usage:
from chonky import TextSplitter
# on the first run it will download the transformer model
splitter = TextSplitter(device="cpu")
# Or you can select the model
# splitter = TextSplitter(
# model_id="mirth/chonky_modernbert_base_1",
# device="cpu"
# )
text = """Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep. The first programs I tried writing were on the IBM 1401 that our school district used for what was then called "data processing." This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights."""
for chunk in splitter(text):
print(chunk)
print("--")
# Output
Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.
--
The first programs I tried writing were on the IBM 1401 that our school district used for what was then called "data processing." This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it.
--
It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.
--
Model ID | F1 | Precision | Recall | Accuracy | Seq Length |
---|---|---|---|---|---|
mirth/chonky_modernbert_base_1 | 0.79 | 0.83 | 0.75 | 0.99 | 1024 |
mirth/chonky_distilbert_base_uncased_1 | 0.7 | 0.79 | 0.63 | 0.99 | 512 |
Metrics above are token based.
The following values are character based F1 scores computed on first 1M characters of each datasets (due to performance reasons).
The bookcorpus
dataset here is basically Chonky validation set so may be it's a bit unfair to list it here.
The do_ps
fragment for SaT models here is do_paragraph_segmentation
flag.
Model | 20_newsgroups | bookcorpus | en_judgements | paul_graham |
---|---|---|---|---|
chonkY_modernbert | 0.15 | 0.72 ❗ | 0.08 ❗ | 0.63 ❗ |
chonkY_distilbert | 0.15 | 0.69 | 0.05 | 0.52 |
SaT(sat-12l-sm, do_ps=False) | 0.31 | 0.33 | 0.03 | 0.43 |
SaT(sat-12l-sm, do_ps=True) | 0.3 | 0.33 | 0.06 | 0.42 |
SaT(sat-3l, do_ps=False) | 0.34 ❗ | 0.28 | 0.03 | 0.42 |
SaT(sat-3l, do_ps=True) | 0.15 | 0.09 | 0.07 | 0.41 |
chonkIE SemanticChunker(bge-small-en-v1.5) | 0.06 | 0.21 | 0.01 | 0.12 |
chonkIE SemanticChunker(potion-base-8M) | 0.08 | 0.19 | 0.01 | 0.15 |
chonkIE RecursiveChunker | 0.02 | 0.07 | 0.01 | 0.05 |
langchain SemanticChunker(all-mpnet-base-v2) | 0 | 0 | 0 | 0 |
langchain SemanticChunker(bge-small-en-v1.5) | 0 | 0 | 0 | 0 |
langchain SemanticChunker(potion-base-8M) | 0 | 0 | 0 | 0 |
langchain RecursiveChar | 0 | 0 | 0 | 0 |
llamaindex SemanticSplitter(bge-small-en-v1.5) | 0.02 | 0.06 | 0 | 0.06 |