M5-074M5: NLP & Large Language ModelsRAG End-to-End ArchitectureEasy
Mastery:
RAG End-to-End Architecture: 解释分块(chunking)策略与取舍。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: 固定长度、递归、语义、按结构切分;粒度影响召回与上下文质量,常配重叠与元数据。
📌 Key Takeaways
- •固定长度:简单但可能切断语义
- •递归/结构切分:按段落/标题,保留语义边界
- •语义切分:按嵌入相似度突变点切分
📐 Mathematical Derivations
数学机理:<strong>四类切分策略</strong>。(1) <strong>固定长度切分</strong>——按固定 token 数切(如 512);简单、可控,但<strong>可能在句子/段落中间切断</strong>,损害语义完整性。(2) <strong>递归切分(recursive)</strong>——按层级分隔符依次尝试(先按段落 `
<code>、再按句子 </code>
`、再按空格),尽量在语义边界处切;这是最常用的默认策略(如 LangChain 的 RecursiveCharacterTextSplitter)。(3) <strong>结构切分</strong>——利用文档结构(markdown 标题、HTML 标签、PDF 章节)切分;对结构化文档效果最好(保留'章节'这一自然语义单元)。(4) <strong>语义切分(semantic chunking)</strong>——计算相邻句子的嵌入相似度,在<strong>相似度骤降处</strong>切分(语义边界);更精确但更慢(需嵌入计算)。<strong>粒度(chunk size)的权衡</strong>——(a) <strong>太小</strong>(如 128 token)——语义不完整(缺上下文)、召回可能碎片化、需更多片段拼成完整答案;(b) <strong>太大</strong>(如 2048)——包含无关噪声、占用上下文预算、检索精度下降(向量被稀释);(c) <strong>经验值</strong>:256~1024 token(视文档类型与嵌入模型的最大长度)。<strong>重叠(overlap)</strong>——相邻片段<strong>共享一部分</strong>(如 50~100 token);作用:避免'关键信息正好被切在边界'而丢失;代价:增加索引体积与检索冗余。<strong>元数据</strong>——每个片段附带 (a) 来源文档/章节、(b) 位置、(c) 时间、(d) 标题;用于 (i) 过滤(按时间/来源)、(ii) 引用、(iii) <strong>上下文扩展</strong>(检索到片段后,把其所属段落/章节一并取出)。<strong>进阶策略</strong>——(a) <strong>父文档检索(parent document)</strong>——用小片段(利于检索)但返回其父段落(利于生成);(b) <strong>句子窗口</strong>——检索句子,返回其周围窗口;(c) <strong>摘要索引</strong>——为每个片段生成摘要,用摘要检索、用原文生成;(d) <strong>多粒度</strong>——同时建多粒度索引。
<code>、再按句子 </code>
`、再按空格),尽量在语义边界处切;这是最常用的默认策略(如 LangChain 的 RecursiveCharacterTextSplitter)。(3) <strong>结构切分</strong>——利用文档结构(markdown 标题、HTML 标签、PDF 章节)切分;对结构化文档效果最好(保留'章节'这一自然语义单元)。(4) <strong>语义切分(semantic chunking)</strong>——计算相邻句子的嵌入相似度,在<strong>相似度骤降处</strong>切分(语义边界);更精确但更慢(需嵌入计算)。<strong>粒度(chunk size)的权衡</strong>——(a) <strong>太小</strong>(如 128 token)——语义不完整(缺上下文)、召回可能碎片化、需更多片段拼成完整答案;(b) <strong>太大</strong>(如 2048)——包含无关噪声、占用上下文预算、检索精度下降(向量被稀释);(c) <strong>经验值</strong>:256~1024 token(视文档类型与嵌入模型的最大长度)。<strong>重叠(overlap)</strong>——相邻片段<strong>共享一部分</strong>(如 50~100 token);作用:避免'关键信息正好被切在边界'而丢失;代价:增加索引体积与检索冗余。<strong>元数据</strong>——每个片段附带 (a) 来源文档/章节、(b) 位置、(c) 时间、(d) 标题;用于 (i) 过滤(按时间/来源)、(ii) 引用、(iii) <strong>上下文扩展</strong>(检索到片段后,把其所属段落/章节一并取出)。<strong>进阶策略</strong>——(a) <strong>父文档检索(parent document)</strong>——用小片段(利于检索)但返回其父段落(利于生成);(b) <strong>句子窗口</strong>——检索句子,返回其周围窗口;(c) <strong>摘要索引</strong>——为每个片段生成摘要,用摘要检索、用原文生成;(d) <strong>多粒度</strong>——同时建多粒度索引。
🏭 Production Trade-offs
深度剖析与工程权衡:① <strong>'检索粒度 vs 生成粒度'的分离是重要洞察</strong>——用<strong>小片段</strong>检索(向量更聚焦、召回更准),但用<strong>大上下文</strong>生成(信息完整);'父文档检索'与'句子窗口'正是这一思想。这是实践中提升效果的关键技巧。② <strong>'chunk 大小'没有通用最优</strong>——它取决于 (a) 文档类型(法律条文 vs 聊天记录)、(b) 查询类型(事实查找 vs 全局总结)、(c) 嵌入模型的能力;故需<strong>实验调优</strong>(用检索指标评估)。③ <strong>'重叠'的收益递减</strong>——重叠能防止边界丢失,但增加冗余(索引膨胀、检索到重复内容);故重叠比例常取 10%~20%。④ <strong>'元数据'的价值常被低估</strong>——时间过滤('只要最近一年的')、来源过滤('只看官方文档')、以及<strong>引用</strong>(提升可信度与可核查性)都依赖元数据;工业级 RAG 必须重视元数据设计。⑤ <strong>与'长上下文'的配合</strong>——若上下文窗口大,可用'大 chunk'或'检索后扩展';若窗口小,则需更精细的切分与压缩。⑥ <strong>面试要点</strong>——被问'chunk 怎么切',应给出'<strong>四类策略(固定/递归/结构/语义)+ 粒度权衡(256~1024)+ 重叠(10~20%)+ 元数据</strong>',并主动提出'<strong>检索粒度与生成粒度分离(父文档检索)</strong>'这一进阶技巧;这是区分'读过 RAG 文章'与'做过 RAG'的关键。
⚠️ Common Interview Pitfalls
- ✕用固定长度切分而不考虑语义边界
- ✕忽略'小片段检索 + 大上下文生成'的分离策略
🎯 Interviewer Follow-ups
- ?chunk 大小如何选?
- ?重叠(overlap)的作用与代价?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.