【大模型应用】3.分块入门

分块

在RAG(检索增强生成)项目中,分块(Chunking)是连接原始文档与AI模型的核心桥梁,很多新手会疑惑"为什么非要分块?

什么是分块

分块就是把原始长文本拆成若干个小块,每个小块通常几百到上千字,包含相对完整的语义单元,比如一个段落、几个段落或一个小节。

通俗理解:把一本厚书拆成按章节划分的小册子,每本小册子保留完整章节内容,不用每次都抱整本书,方便查找和阅读

为什么要分块

为什么需要分块?核心原因有三个:

1)模型处理能力有上限。大语言模型一次能吃进去的文本长度是有限制的,GPT-4 Turbo是128Ktokens,Claude 3是200K tokens。一本10万字的书直接塞进去,模型消化不了,得先切成小块。

2)检索需要精准定位。用户提问通常只关心局部内容,比如问"第三章的案例是什么"。把整本书向量化成一个大向量,检索时根本分不清哪段最相关。切成小块后,每个块都有自己的向量表示,检索时能快速找到最匹配的那几个块。

3)平衡上下文和计算效率 。小块既能保留足够的上下文让模型理解前后逻辑,又能让向量计算和存储更高效。一个500tokens的块比5000tokens 的块在相似度计算时快得多。

分块大小怎么定

实践中常用的chunk大小在200到500tokens之间作为起点 。对于长技术文档或学术报告,可以放宽到512到1024tokens

  • 同时建议设置10%到20%的重叠让相邻块之间有交集,避免关键信息刚好卡在分界线上被截断
  • 也可以参考 OpenAI官方RAG分块默认值

元数据标注不能少,光切块不够,每个块还得带上身份信息:

  • 1)来源信息:这个块属于原文档的哪一章、哪一节
  • 2)位置信息:在原文档中的页码、段落编号
  • 3)类型信息:是正文、标题、列表还是图表说明

这些元数据在检索时很关键。用户问"附录A的公式怎么推导",检索系统能通过元数据直接定位到附录A的块,不会误匹配到正文里长得像的内容。

常用分块工具

  • LangChain 的RecursiveCharacterTextSplitter 支持滑动窗口和语义拆分 ,是目前用得最多的。
  • Hugging Face的Tokenizers 能按token数精确拆分,适合对token 限制敏感的场景。
  • Llamalndex也有内置的分块器,支持按段落、句子等多种粒度切分。

追问

提问1:分块时设置重叠有什么好处?重叠比例一般设多少?

回答:**重叠是为了防止关键信息刚好卡在分界线上被截断。**比如一段话讲的是"方案的优点和缺点",刚好在"优点"和"缺点"中间被切开了,前一个块只有优点,后一个块只有缺点,检索时可能漏掉完整的对比信息 。设置重叠后,边界附近的内容在两个块里都有,检索时更容易命中。重叠比例一般10%到20%,太大浪费存储和计算资源,太小起不到作用。

提问2:分块粒度对检索效果有什么影响?

回答:

  • 粒度太细,每个块信息量太少,检索出来的块可能不足以回答问题,得召回很多块拼凑。
  • 粒度太粗,块里混了多个话题,检索精度下降,模型容易被无关内容干扰
  • 实际项目中一般先用300到500tokens跑个基线,再根据检索召回率和答案质量调整。不同类型的文档最优粒度也不一样,技术文档可以粗一点,FAQ类的要细一点。

提问3:除了固定长度分块,还有什么更智能的分块方式?

回答:语义分块 是目前比较火的方向。不是机械地按字数切,而是用模型判断句子之间的语义相似度,相似度高的句子放一个块,相似度突然下降的地方就是分界点。

LangChain有个SemanticChunker 就是干这个的。还有基于文档结构 的分块,比如Markdown按标题切、PDF按段落切、代码按函数切,这种方式能保证每个块在结构上是完整的。

相关推荐
Victor3562 小时前
MongoDB(49)什么是副本集?
后端
橙子家2 小时前
Serilog 日志库简单实践(五)数据库 Sinks(.net8)
后端
独断万古他化3 小时前
【抽奖系统开发实战】Spring Boot 抽奖模块全解析:MQ 异步处理、缓存信息、状态扭转与异常回滚
java·spring boot·redis·后端·缓存·rabbitmq·mvc
七夜zippoe3 小时前
MongoDB聚合框架与性能优化实战指南
数据库·python·mongodb·性能优化·聚合框架
weisian1513 小时前
Java并发编程--12-读写锁与StampedLock:高并发读场景下的性能优化利器
java·开发语言·性能优化·读写锁·stampedlock
RDCJM3 小时前
Spring Boot + Vue 全栈开发实战指南
vue.js·spring boot·后端
勾股导航7 小时前
大模型Skill
人工智能·python·机器学习
2501_945423549 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
卷福同学9 小时前
【养虾日记】Openclaw操作浏览器自动化发文
人工智能·后端·算法