Chonkie是一个用于RAG(检索增强生成)任务的轻量级、快速的文本分块库。
| 安装命令 | 适用场景 | 依赖 |
|---|---|---|
pip install chonkie | 基本的token和word分块 | autotiktokenizer |
pip install chonkie[semantic] | 语义分块 | + sentence-transformers, numpy |
pip install chonkie[all] | 所有功能 | all dependencies |
| chunker种类 | default | semantic | all |
|---|---|---|---|
| TokenChunker | ✅ | ✅ | ✅ |
| WordChunker | ✅ | ✅ | ✅ |
| SentenceChunker | ✅ | ✅ | ✅ |
| SemanticChunker | ❌ | ✅ | ✅ |
| SDPMChunker | ❌ | ✅ | ✅ |
#ImporttheTokenChunker
fromchonkieimportTokenChunker
fromautotiktokenizerimportAutoTikTokenizer
#Initializethetokenizer
tokenizer=AutoTikTokenizer.from_pretrained("gpt2")
#Initializethechunker
chunker=TokenChunker(
tokenizer=tokenizer,
chunk_size=512,
chunk_overlap=128
)
#Chunkasinglepieceoftext
chunks=chunker.chunk("Woah!Chonkie,thechunkinglibraryissocool!Ilovethetinyhippohehe.")
forchunkinchunks:
print(f"Chunk:{chunk.text}")
print(f"Tokens:{chunk.token_count}")
#Chunkabatchoftexts
texts=["Firsttexttochunk.","Secondtexttochunk."]
batch_chunks=chunker.chunk_batch(texts)
fortext_chunksinbatch_chunks:
forchunkintext_chunks:
print(f"Chunk:{chunk.text}")
print(f"Tokens:{chunk.token_count}")
#Usethechunkerasacallable
chunks=chunker("Anothertexttochunkusing__call__.")
forchunkinchunks:
print(f"Chunk:{chunk.text}")
print(f"Tokens:{chunk.token_count}")
fromchonkieimportWordChunker
fromautotiktokenizerimportAutoTikTokenizer
tokenizer=AutoTikTokenizer.from_pretrained("gpt2")
chunker=WordChunker(
tokenizer=tokenizer,
chunk_size=512,
chunk_overlap=128,
mode="advanced"#'simple-基本的基于空间的分割'or'advanced-处理标点符号和特殊大小写'
)
fromchonkieimportSentenceChunker
fromautotiktokenizerimportAutoTikTokenizer
tokenizer=AutoTikTokenizer.from_pretrained("gpt2")
chunker=SentenceChunker(
tokenizer=tokenizer,#(可选)传入您选择的分词器,可以接受 tiktoken、tokenizer 和 transformers 分词器,优先授予 tiktoken。
chunk_size=512,#(可选)传递块的大小。默认为 tokenizer 支持的最大大小(如果有)或 512。
chunk_overlap=128,#(可选)接受 int 或 float。文本的连续块之间的重叠。默认为 min(0.25 * chunk_size, 128)。
min_sentences_per_chunk=1#每个区块的最小句子数
)
⚠️:大多数情况下,chunk_size、token_count取决于向量化模型上下文大小,而不是生成模型上下文长度。
fromchonkieimportSemanticChunker
chunker=SemanticChunker(
embedding_model="all-minilm-l6-v2",
max_chunk_size=512,#从SemanticChunker接收的chunk的最大大小
similarity_threshold=0.7#语义分组的阈值
)
通过语义双通道合并方法对内容进行分组,该方法通过使用跳过窗口对语义相似的段落进行分组,即使它们不是连续出现的。
fromchonkieimportSDPMChunker
chunker=SDPMChunker(
embedding_model="all-minilm-l6-v2",
max_chunk_size=512,
similarity_threshold=0.7,
skip_window=1#分块程序应注意的跳过窗口的大小。默认为 1。
)
fromchonkieimportTokenChunker
fromtokenizersimportTokenizer
tokenizer=Tokenizer.from_pretrained("gpt2")
chunker=TokenChunker(tokenizer)
chunks=chunker("Woah!Chonkie,thechunkinglibraryissocool!")
forchunkinchunks:
print(f"Chunk:{chunk.text}")
print(f"Tokens:{chunk.token_count}")
fromchonkieimportSemanticChunker
chunker=SemanticChunker(embedding_model="all-minilm-l6-v2",max_chunk_size=512,similarity_threshold=0.7)
chunks=chunker("Woah!Chonkie,thechunkinglibraryissocool!")
forchunkinchunks:
print(f"Chunk:{chunk.text}")
print(f"Tokens:{chunk.token_count}")
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |