Chonkie是为RAG任务设计的轻量级文本分块库,以快速性能和易于使用著称,旨在解决传统文本分块库的效率和体积问题。核心特点包括多种分块器、9.7MB的轻量级安装、以及优化的分块速度。通过Tiktoken、预计算缓存等技术实现高效分块,性能远超竞争对手。
本文详细介绍了Chonkie文档分割库的功能、安装方法、代码示例、设计理念、常见问题解答,助力 RAG 提升性能。
Chonkie是一个用于RAG(检索增强生成)任务的轻量级、快速的文本分块库。
功能丰富:提供多种分块器,满足不同的RAG应用需求。
易于使用:只需安装、导入即可使用。
速度快:分块速度快,性能优越。
支持广泛:支持多种分块器,包括TokenChunker、WordChunker、SentenceChunker、SemanticChunker和SDPMChunker。
轻量级:核心安装仅有9.7MB,远小于其他开源项目。
安装命令 | 适用场景 | 依赖 |
---|---|---|
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 | ❌ | ✅ | ✅ |
# Import the TokenChunker from chonkie import TokenChunker from autotiktokenizer import AutoTikTokenizer # Initialize the tokenizer tokenizer = AutoTikTokenizer.from_pretrained("gpt2") # Initialize the chunker chunker = TokenChunker( tokenizer=tokenizer, chunk_size=512, chunk_overlap=128 ) # Chunk a single piece of text chunks = chunker.chunk("Woah! Chonkie, the chunking library is so cool! I love the tiny hippo hehe.") for chunk in chunks: print(f"Chunk: {chunk.text}") print(f"Tokens: {chunk.token_count}") # Chunk a batch of texts texts = ["First text to chunk.", "Second text to chunk."] batch_chunks = chunker.chunk_batch(texts) for text_chunks in batch_chunks: for chunk in text_chunks: print(f"Chunk: {chunk.text}") print(f"Tokens: {chunk.token_count}") # Use the chunker as a callable chunks = chunker("Another text to chunk using __call__.") for chunk in chunks: print(f"Chunk: {chunk.text}") print(f"Tokens: {chunk.token_count}")
from chonkie import WordChunker from autotiktokenizer import AutoTikTokenizer tokenizer = AutoTikTokenizer.from_pretrained("gpt2") chunker = WordChunker( tokenizer=tokenizer, chunk_size=512, chunk_overlap=128, mode="advanced" # 'simple-基本的基于空间的分割' or 'advanced-处理标点符号和特殊大小写' )
from chonkie import SentenceChunker from autotiktokenizer import AutoTikTokenizer 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取决于向量化模型上下文大小,而不是生成模型上下文长度。
from chonkie import SemanticChunker chunker = SemanticChunker( embedding_model="all-minilm-l6-v2", max_chunk_size=512, # 从 SemanticChunker 接收的 chunk 的最大大小 similarity_threshold=0.7 # 语义分组的阈值 )
通过语义双通道合并方法对内容进行分组,该方法通过使用跳过窗口对语义相似的段落进行分组,即使它们不是连续出现的。
from chonkie import SDPMChunker chunker = SDPMChunker( embedding_model="all-minilm-l6-v2", max_chunk_size=512, similarity_threshold=0.7, skip_window=1 # 分块程序应注意的跳过窗口的大小。默认为 1。 )
小但精确:分块大小适中,智能默认参数。
快如闪电:优化路径,缓存机制。
小而完整:最小化安装,模块化增长。
聪明的小块:合理分块,高效处理。
有目的的成长:智能分块带来更好的嵌入和生成质量。
效率:减少模型处理时间,节省内存。
准确性:提供准确的上下文信息,避免噪声干扰。
使用Tiktoken:速度快,支持多线程。
预计算和缓存:避免重复计算,提高效率。
运行均值池化:节省嵌入模型成本。
答:TokenChunker的关键参数包括:
tokenizer:一个实现了编码/解码接口的分词器,可以是字符串、tokenizers.Tokenizer或tiktoken.Encoding类型。
chunk_size:每个分块的最大token数量。
chunk_overlap:分块之间的重叠token数量。
使用TokenChunker进行文本分块的示例代码:
from chonkie import TokenChunker from tokenizers import Tokenizer tokenizer = Tokenizer.from_pretrained("gpt2") chunker = TokenChunker(tokenizer) chunks = chunker("Woah! Chonkie, the chunking library is so cool!") for chunk in chunks: print(f"Chunk: {chunk.text}") print(f"Tokens: {chunk.token_count}")
答:SemanticChunker通过使用预训练的语义嵌入模型来计算文本片段之间的相似性,并根据相似性阈值进行分组。其关键参数包括:
embedding_model:用于语义嵌入的模型,可以是字符串(如"all-minilm-l6-v2")或SentenceTransformer模型。
max_chunk_size:从SemanticChunker接收的每个分块的最大大小。
similarity_threshold:用于语义分组的相似性阈值。
使用SemanticChunker进行文本分块的示例代码:
from chonkie import SemanticChunker chunker = SemanticChunker(embedding_model="all-minilm-l6-v2", max_chunk_size=512, similarity_threshold=0.7) chunks = chunker("Woah! Chonkie, the chunking library is so cool!") for chunk in chunks: print(f"Chunk: {chunk.text}") print(f"Tokens: {chunk.token_count}")
答:Chonkie在性能和轻量级方面具有显著优势:
Token分块:比最慢的竞争对手快33倍。
句子分块:快近2倍。
语义分块:快2.5倍。
大小:默认安装仅9.7MB,远小于竞争对手(80-171MB)。
速度:
Chonkie通过以下优化实现快速分块:
使用Tiktoken作为默认分词器,速度比竞争对手快3-6倍。
预计算和缓存机制,避免重复计算,节省时间。
运行均值池化技术,减少嵌入成本。
这些优化使得Chonkie在处理大规模数据和实时应用时表现出色。
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
保证100%免费
】