ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">RAG Chunking Techniques
Retrieval-Augmented Generation(RAG)很大程度上取决于你怎么分块数据。
想让LLM检索到真正有意义的上下文?你得用心设计数据的分块方式。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">下面是15种关键的分块策略,详细解释,每种都带一个实际的例子和实用的拆分方法。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding-left: 12px;color: rgb(63, 63, 63);">1. 按行分块(Line-by-Line Chunking)ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;color: rgb(250, 81, 81);">是什么:每遇到新行就拆分。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;color: rgb(250, 81, 81);">什么时候用:ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">• 聊天记录、访谈记录,或者每行都表达一个完整意思的数据。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">示例输入:Alice: 嘿,Bob,今天下午3点有空通话吗?
Bob: 当然,Alice。你想聊项目更新吗?
Alice: 对,还要讨论客户会议。
Bob: 没问题!3点见。
分块输出:
- •CHUNK1: Alice: 嘿,Bob,今天下午3点有空通话吗?
- •CHUNK2: Bob: 当然,Alice。你想聊项目更新吗?
- •CHUNK3: Alice: 对,还要讨论客户会议。
为什么:
- • 适合精细化检索,LLM能直接抓到具体的问答对。
- •注意:如果行太短,LLM可能因为缺少上下文而“胡编乱造”。
2. 固定大小分块(Fixed-Size Chunking)
是什么:不管内容含义,按固定字数或字符数拆分。
什么时候用:
- • 适合:OCR扫描的文本、爬取的网页原始内容、老旧扫描文档。
示例输入:
Python是一种高级、解释型编程语言。它的简单语法和动态类型使其在快速应用开发和脚本编写中很受欢迎。Python支持多种编程范式,包括结构化、面向对象和函数式编程。它广泛用于Web开发、数据分析、AI、科学计算等领域。
假设固定大小 = 20个单词。
分块输出:
- •CHUNK1: Python是一种高级、解释型编程语言。它的简单语法和动态类型使其在快速应用开发
- •CHUNK2: 和脚本编写中很受欢迎。Python支持多种编程范式,包括结构化、面向对象和函数式编程。
- •CHUNK3: 它广泛用于Web开发、数据分析、AI、科学计算等领域。
为什么:
- •小贴士:只有在没结构的情况下用,调整大小要考虑LLM的token限制。
3. 滑动窗口分块(Sliding Window Chunking)
是什么:按固定字数或token分块,但让块之间有重叠,保留上下文。
什么时候用:
示例输入:
机器学习模型需要大量数据集来训练。数据的质量和数量显著影响模型性能。数据预处理包括清理和转换原始数据为可用输入。
假设窗口大小 = 15个单词,重叠 = 5个单词。
分块输出:
- •CHUNK1: 机器学习模型需要大量数据集来训练。数据的质量和数量
- •CHUNK2: 质量和数量显著影响模型性能。数据预处理包括清理和转换
为什么:
- • 保持上下文连续性,检索不会丢失边界处的上下文。
- • 块之间有重叠,会有点冗余(增加存储,但为了上下文值得)。
4. 按句子分块(Sentence-Based Chunking)
是什么:每个句子作为一个块。
什么时候用:
示例输入:
深度学习已经改变了许多技术领域。神经网络现在能在图像识别上超越人类。训练这些模型需要大量计算资源。
分块输出:
- •CHUNK1: 深度学习已经改变了许多技术领域。
- •CHUNK2: 神经网络现在能在图像识别上超越人类。
为什么:
- •风险:有些句子可能太短或缺上下文,建议有时把2-3句合并成一个块。
5. 按段落分块(Paragraph Chunking)
是什么:每个段落作为一个块。
什么时候用:
示例输入:
数据科学结合了领域专业知识、编程技能以及数学和统计知识,从数据中提取有意义的洞察。
它是一个跨学科领域,使用计算机科学、统计学、机器学习和数据可视化技术来解决复杂问题。
数据科学家处理大型数据集,以识别趋势、进行预测并推动战略决策。
分块输出:
- •CHUNK1: 数据科学结合了领域专业知识、编程技能以及数学和统计知识,从数据中提取有意义的洞察。
- •CHUNK2: 它是一个跨学科领域,使用计算机科学、统计学、机器学习和数据可视化技术来解决复杂问题。
- •CHUNK3: 数据科学家处理大型数据集,以识别趋势、进行预测并推动战略决策。
为什么:
6. 按页面分块(Page-Based Chunking)
是什么:分页文档中的每一页作为一个块。
什么时候用:
示例输入:
第1页:
第1节:RAG简介
Retrieval-Augmented Generation(RAG)系统结合了LLM和信息检索。RAG提升了事实准确性,扩展了模型超越训练数据的知识。
第2页:
第2节:架构
主要组件是retriever(检索相关文档)和generator(根据检索到的上下文生成答案)。
分块输出:
- •CHUNK1 (第1页): 第1节:RAG简介
Retrieval-Augmented Generation(RAG)系统结合了LLM和信息检索。RAG提升了事实准确性,扩展了模型超越训练数据的知识。 - •CHUNK2 (第2页): 第2节:架构
主要组件是retriever(检索相关文档)和generator(根据检索到的上下文生成答案)。
为什么:
- • 当页面结构很重要时(比如法律证据、合同、教科书)必不可少。
7. 按章节或标题分块(Section or Heading-Based Chunking)
是什么:按标题(H1/H2等,或“## 章节标题”)拆分。
什么时候用:
示例输入:
# 简介
Retrieval-Augmented Generation(RAG)允许语言模型使用外部信息来改善回答。
# RAG如何工作
RAG首先检索相关文档,然后基于用户查询和上下文生成回答。
# 优点
RAG提升了事实准确性,并支持使用私有或更新的数据。
分块输出:
- •CHUNK1: # 简介
Retrieval-Augmented Generation(RAG)允许语言模型使用外部信息来改善回答。 - •CHUNK2: # RAG如何工作
RAG首先检索相关文档,然后基于用户查询和上下文生成回答。 - •CHUNK3: # 优点
RAG提升了事实准确性,并支持使用私有或更新的数据。
为什么:
8. 按关键词分块(Keyword-Based Chunking)
是什么:每次遇到特定关键词(比如“步骤”、“诊断”、“注意”)就拆分。
什么时候用:
示例输入:
诊断:急性支气管炎。
症状:持续咳嗽、轻度发烧、胸部不适。
处方:阿莫西林500毫克,每日三次,连续7天。
注意:建议患者休息和补充水分。
关键词:“注意:”
分块输出:
- •CHUNK1: 诊断:急性支气管炎。
症状:持续咳嗽、轻度发烧、胸部不适。
处方:阿莫西林500毫克,每日三次,连续7天。
为什么:
- • 将相关信息保持在一起(“注意:”之前的内容为一个块)。
9. 按实体分块(Entity-Based Chunking)
是什么:用Named Entity Recognition(NER)将句子或段落按实体(人、组织、产品等)分组。
什么时候用:
- • 新闻、法律文档、产品评论——实体引用很重要的场景。
示例输入:
苹果在年度活动中发布了新款iPhone型号。TimCook展示了聚焦于相机改进和电池续航的新功能。与此同时,三星据传下个月将推出竞争设备。
NER识别:“Apple”、“Tim Cook”、“Samsung”
分块输出:
- •CHUNK1: 苹果在年度活动中发布了新款iPhone型号。Tim Cook展示了聚焦于相机改进和电池续航的新功能。
- •CHUNK2: 与此同时,三星据传下个月将推出竞争设备。
为什么:
- • 支持基于实体的检索,比如LLM可以回答“苹果发布了什么?”时获取所有“Apple”相关块。
10. 按Token分块(Token-Based Chunking)
是什么:按token数(模型的处理单位)而非单纯字数拆分。
什么时候用:
- • LLM上下文大小有限时(比如1024、2048个token)。
示例输入:
生成式AI的快速增长推动了聊天机器人、文档摘要和数据提取应用的激增。随着模型越来越大,它们需要更多内存和计算,但也为跨行业的自动化开辟了新可能。组织正在探索结合传统算法和大型语言模型的混合系统,以提升性能和成本效率。
假设每个块 = 25个token(模拟:约10个单词=10个token,避免断句)。
分块输出:
- •CHUNK1: 生成式AI的快速增长推动了聊天机器人、文档摘要和数据提取应用的激增。
- •CHUNK2: 随着模型越来越大,它们需要更多内存和计算,但也为跨行业的自动化开辟了新可能。
- •CHUNK3: 组织正在探索结合传统算法和大型语言模型的混合系统,以提升性能和成本效率。
为什么:
11. 表格分块(Table Chunking)
是什么:将每个表格提取为单独的块(可选按行或整个表格)。
什么时候用:
- • 发票、财务报告、科学论文——任何带表格的文档。
示例输入:
表格1:季度收入
| 季度 | 收入(美元) |
|---------|---------------|
| 2024年Q1 | $1,000,000 |
| 2024年Q2 | $1,200,000 |
公司经历了稳定增长,Q2增长尤为明显。
分块输出:
- •CHUNK2: 公司经历了稳定增长,Q2增长尤为明显。
为什么:
- • 检索可以回答“2024年Q2的收入是多少?”时直接获取表格块。
12. 递归分块(Recursive Chunking)
是什么:先按大块(段落或章节)拆分,超大的块再进一步拆(按句子、单词),直到每个块符合大小要求。
什么时候用:
- • 长篇、冗长的访谈记录、采访或段落大小不均的文档。
示例输入:
访谈记录:
John:一开始我们主要关注用户体验。我们跑了好几次调查,收集反馈,快速迭代。
后来,随着产品成熟,我们开始解决扩展性和基础设施问题。这阶段更具挑战,因为我们需要在扩展时保持系统正常运行。
假设块大小 = 最大20个单词。
步骤1:按段落拆分
- • 段落1:“John:一开始我们主要关注用户体验。我们跑了好几次调查,收集反馈,快速迭代。”
- • 段落2:“后来,随着产品成熟,我们开始解决扩展性和基础设施问题。这阶段更具挑战,因为我们需要在扩展时保持系统正常运行。”
步骤2:段落仍超大,拆成句子
分块输出:
- •CHUNK1: John:一开始我们主要关注用户体验。
- •CHUNK2: 我们跑了好几次调查,收集反馈,快速迭代。
- •CHUNK3: 后来,随着产品成熟,我们开始解决扩展性和基础设施问题。
- •CHUNK4: 这阶段更具挑战,因为我们需要在扩展时保持系统正常运行。
为什么:
13. 语义分块(Semantic Chunking)
是什么:用embeddings或AI将讨论同一主题的句子或段落分组。
什么时候用:
- • 混合主题的数据(比如客服工单、问答文档、FAQ)。
示例输入:
问:如何重置密码?
答:前往登录页面,点击“忘记密码”。
问:如何更改邮箱地址?
答:访问你的个人资料设置,输入新邮箱。
问:退款政策是什么?
答:购买后30天内可退款。
假设语义模型检测到“账户管理”和“支付”两个主题。
分块输出:
- •CHUNK1: 问:如何重置密码?
答:前往登录页面,点击“忘记密码”。
问:如何更改邮箱地址?
答:访问你的个人资料设置,输入新邮箱。 - •CHUNK2: 问:退款政策是什么?
答:购买后30天内可退款。
为什么:
14. 层次分块(Hierarchical Chunking)
是什么:多级分块——按章节、然后按小节、然后按段落等。
什么时候用:
- • 大型、结构良好的文本(书籍、技术文档、法律条文)。
示例输入:
第1章:简介
1.1节:什么是RAG?
Retrieval-Augmented Generation(RAG)结合了LLM和外部数据源,提供最新答案。
1.2节:为什么用RAG?
RAG扩展了模型能力,提升事实准确性,支持私有或动态信息。
分块输出:
- •CHUNK2: 1.1节:什么是RAG?
Retrieval-Augmented Generation(RAG)结合了LLM和外部数据源,提供最新答案。 - •CHUNK3: 1.2节:为什么用RAG?
RAG扩展了模型能力,提升事实准确性,支持私有或动态信息。
为什么:
- • 让RAG系统能检索广泛(章节)或详细(小节)的信息。
15. 内容类型感知分块(Content-Type Aware Chunking)
是什么:对表格、列表、图片、纯文本使用不同的分块策略。
什么时候用:
示例输入:
摘要:
本研究探讨了RAG管道的分块策略。结果显示分块方法影响答案质量。
表格1:测试结果
| 方法 | 准确率 |
|----------------|--------|
| 按句子分块 | 85% |
| 滑动窗口分块 | 90% |
图1:管道图(此处未显示图片)
分块输出:
- •CHUNK1: 摘要:
本研究探讨了RAG管道的分块策略。结果显示分块方法影响答案质量。 - •CHUNK3: 图1:管道图(此处未显示图片)。
为什么:
- • 支持针对性检索,比如“给我看结果表格”或“获取摘要”。
结论
关键要点:
- • 根据你的文档格式、使用场景和用户问题来选择分块方法。
- • 在真实数据上测试,始终检查LLM输出是否存在上下文漂移或“胡编乱造”。