Chonkie是为RAG任务设计的轻量级文本分块库,以快速性能和易于使用著称,旨在解决传统文本分块库的效率和体积问题。核心特点包括多种分块器、9.7MB的轻量级安装、以及优化的分块速度。通过Tiktoken、预计算缓存等技术实现高效分块,性能远超竞争对手。
本文详细介绍了Chonkie文档分割库的功能、安装方法、代码示例、设计理念、常见问题解答,助力 RAG 提升性能。
简介
Chonkie是一个用于RAG(检索增强生成)任务的轻量级、快速的文本分块库。
Chonkie 特点
-
功能丰富:提供多种分块器,满足不同的RAG应用需求。
-
易于使用:只需安装、导入即可使用。
-
速度快:分块速度快,性能优越。
-
支持广泛:支持多种分块器,包括TokenChunker、WordChunker、SentenceChunker、SemanticChunker和SDPMChunker。
-
轻量级:核心安装仅有9.7MB,远小于其他开源项目。
安装方法
1. 基础安装
安装命令 | 适用场景 | 依赖 |
---|---|---|
pip install chonkie | 基本的token和word分块 | autotiktokenizer |
pip install chonkie[semantic] | 语义分块 | + sentence-transformers, numpy |
pip install chonkie[all] | 所有功能 | all dependencies |
2.按照依赖包进行划分chunker
chunker种类 | default | semantic | all |
---|---|---|---|
TokenChunker | ✅ | ✅ | ✅ |
WordChunker | ✅ | ✅ | ✅ |
SentenceChunker | ✅ | ✅ | ✅ |
SemanticChunker | ❌ | ✅ | ✅ |
SDPMChunker | ❌ | ✅ | ✅ |
代码示例
1. TokenChunker示例:将文本分割成固定大小token的块。
# 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}")
2. WordChunker示例:根据单词/词语分割文本。
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-处理标点符号和特殊大小写' )
3. SentenceChunker示例:根据句子分割文本。
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 # 每个区块的最小句子数 )
4. SemanticChunker示例:根据语义相似性分割文本。
⚠️:大多数情况下,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 # 语义分组的阈值 )
5. SDPMChunker示例:使用语义双重遍历合并方法分割文本。
通过语义双通道合并方法对内容进行分组,该方法通过使用跳过窗口对语义相似的段落进行分组,即使它们不是连续出现的。
from chonkie import SDPMChunker chunker = SDPMChunker( embedding_model="all-minilm-l6-v2", max_chunk_size=512, similarity_threshold=0.7, skip_window=1 # 分块程序应注意的跳过窗口的大小。默认为 1。 )
设计理念
1. 核心原则
-
小但精确:分块大小适中,智能默认参数。
-
快如闪电:优化路径,缓存机制。
-
小而完整:最小化安装,模块化增长。
-
聪明的小块:合理分块,高效处理。
-
有目的的成长:智能分块带来更好的嵌入和生成质量。
2. 为什么需要分块?
-
效率:减少模型处理时间,节省内存。
-
准确性:提供准确的上下文信息,避免噪声干扰。
3. 如何实现快速分块?
-
使用Tiktoken:速度快,支持多线程。
-
预计算和缓存:避免重复计算,提高效率。
-
运行均值池化:节省嵌入模型成本。
问答回顾全文
问题1:Chonkie的TokenChunker有哪些关键参数?如何使用它进行文本分块?
-
答: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}")
问题2:Chonkie的SemanticChunker如何实现语义相似性分组?有哪些关键参数?
-
答: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}")
问题3:Chonkie的性能如何,与其他分块库相比有何优势?
-
答:Chonkie在性能和轻量级方面具有显著优势:
-
Token分块:比最慢的竞争对手快33倍。
-
句子分块:快近2倍。
-
语义分块:快2.5倍。
-
大小:默认安装仅9.7MB,远小于竞争对手(80-171MB)。
-
速度:
-
Chonkie通过以下优化实现快速分块:
-
使用Tiktoken作为默认分词器,速度比竞争对手快3-6倍。
-
预计算和缓存机制,避免重复计算,节省时间。
-
运行均值池化技术,减少嵌入成本。
-
这些优化使得Chonkie在处理大规模数据和实时应用时表现出色。
问题4:可以在不同的文本中多次运行一个Chunker吗?Chonkie 是线程安全的吗?
- 答:可以多次运行Chunker,无需重新初始化。Chonkie的分块器是线程安全的。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。