What are the different chunk enhancement techniques in RAG
1️⃣ 考察意图
面试官想考察你对 RAG 系统“预检索”阶段的深度理解,而非简单背诵分块大小。真正的刁钻点在于:你是否能区分“分块策略”与“块增强技术”的本质差异,以及是否理解每种增强技术背后的工程取舍(如计算成本 vs 检索精度)。答好了能展示你对 RAG 整条链路优化的系统思维,以及从论文到落地的实战能力。
2️⃣ 标准答
块增强(Chunk Enhancement)是在检索前对文档块进行预处理,以提升检索质量。核心目标是让块更“对齐”查询意图,同时保持语义完整性。以下是主流技术及其工程细节:
- 滑动窗口重叠(Sliding Window with Overlap)
- 原理:相邻块之间保留 10%-50% 的 token 重叠,避免关键信息被分块边界截断。例如,chunk_size=512,overlap=128。
- 为什么这么做:长文档中,实体或逻辑关系可能跨越块边界。重叠确保无论查询落在哪个位置,都能在至少一个块中找到完整上下文。
- 实际落地的坑:重叠过多会导致索引膨胀(如 50% 重叠使存储翻倍),且检索时可能返回多个高度相似的块,降低多样性。解法:设置 overlap 为 chunk_size 的 20%-30%,并在检索后对结果做去重(如基于 Jaccard 相似度过滤)。
- 元数据附加(Metadata Attachment)
- 原理:为每个块附加结构化元数据,如文档标题、章节名、摘要、创建时间、实体标签等。检索时,元数据作为额外信号参与相似度计算或过滤。
- 为什么这么做:纯文本嵌入容易丢失文档级上下文。例如,查询“2024年财报”时,块内容可能只包含数字,但元数据“标题:2024年Q4财报”能直接提升召回。
- 实际落地的坑:元数据字段过多会稀释嵌入向量的语义权重。解法:仅保留 3-5 个高价值字段(如标题、章节、文档类型),并在 embedding 前将元数据拼接为文本前缀(如“标题:xxx;章节:xxx;内容:xxx”)。
- 假设问题生成(Hypothetical Question Generation, HQG)
- 原理:对每个块,用 LLM 生成 N 个可能被用户提出的问题,然后将问题作为索引对象。检索时,直接匹配用户查询与生成的问题。
- 为什么这么做:文档块是“陈述性”的,而用户查询是“疑问性”的。HQG 将语义鸿沟转化为“问题-问题”匹配,明显提升 Recall@K(论文《HyDE》中提升 15-20%)。
- 实际落地的坑:生成问题成本高(每个块需调用 LLM),且生成质量依赖 prompt。解法:只对高价值块(如摘要、结论)做 HQG,或使用小模型(如 7B)批量生成,再用大模型(如 70B)做一次质量校验。
- 摘要嵌入(Summary Embedding)
- 原理:不直接用块原文做 embedding,而是先生成块的摘要(如 1-2 句),再用摘要向量作为索引。检索时,返回摘要对应的完整块。
- 为什么这么做:长块(如 1024 tokens)的 embedding 容易丢失核心语义,摘要能压缩信息并突出关键点。论文《LLM-based Chunking》显示,摘要嵌入在长文档检索中 Recall@5 提升 10%。
- 实际落地的坑:摘要可能遗漏细节,导致召回偏概全。解法:采用“双通道”策略——同时索引原文 embedding 和摘要 embedding,检索时加权融合(如 0.7 原文 + 0.3 摘要)。
- 块重排与过滤(Chunk Re-ranking & Filtering)
- 原理:检索后,用轻量级模型(如 Cohere Rerank 或 cross-encoder)对 top-K 块重排,过滤掉低相关块。
- 为什么这么做:初检(如 DPR 或 BM25)可能召回噪声块,重排能提升 Precision@K。工程取舍:重排增加延迟(约 50-100ms/query),但能减少 LLM 生成时的幻觉。
- 实际落地的坑:重排模型需与检索模型对齐。解法:用检索结果中的正负样本微调重排模型,或直接使用通用 reranker(如 BGE-Reranker-v2)。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,块增强的核心目标是让块更对齐查询意图,避免边界截断和语义丢失。第二,主流技术包括滑动窗口重叠(解决边界问题)、元数据附加(提供文档级上下文)、假设问题生成(对齐查询模式)和摘要嵌入(压缩信息)。第三,工程上需权衡计算成本与检索精度,例如重叠比例设为 20%-30%,元数据字段不超过 5 个。总结一句:块增强不是万能药,需根据数据特征(文档长度、查询类型)选择组合策略。”
4️⃣ 高频追问 & 应对
追问 1:滑动窗口重叠和元数据附加哪个更重要?如何选择?
没有绝对答案,取决于数据特征。如果文档是连续叙事(如小说、报告),重叠更重要,因为实体可能跨块;如果文档是结构化内容(如 FAQ、技术文档),元数据附加更有效,因为标题和章节能直接定位。工程上建议先做 A/B 测试:在 1000 条查询上对比 Recall@5,选择提升更显著的技术。如果资源允许,两者叠加效果最佳(重叠 20% + 标题元数据)。
追问 2:假设问题生成(HQG)的成本太高,有没有替代方案?
有。可以用“查询扩展”替代:在检索时,对用户查询做同义词替换或改写(如用 LLM 生成 3 个变体),然后分别检索并合并结果。成本从“每个块一次 LLM 调用”降为“每个查询一次 LLM 调用”。另一种方案是使用“双编码器”模型(如 Contriever),它天然支持查询-文档的语义对齐,无需显式生成问题。但 HQG 在长尾查询上 Recall 更高,适合高精度场景。
追问 3:摘要嵌入和假设问题生成有什么区别?能同时用吗?
核心区别:摘要嵌入是“压缩文档”,HQG 是“生成查询”。两者可以组合:先对块生成摘要,再对摘要生成假设问题,然后同时索引摘要和问题。但成本会翻倍。工程上建议二选一:如果查询偏事实性(如“2024年营收”),用摘要嵌入;如果查询偏推理(如“为什么营收下降”),用 HQG。同时用的话,需控制索引大小,例如只对 top-20% 的高价值块做双重增强。
5️⃣ 避坑 · 常见错误答法
- ❌ 只提“分块大小”和“重叠比例”,不提元数据或 HQG → ✅ 必须覆盖至少 4 种技术,并说明每种技术的适用场景和 trade-off。
- ❌ 说“重叠越多越好”,没有给出具体数字和成本分析 → ✅ 给出 20%-30% 的推荐值,并解释索引膨胀和去重策略。
- ❌ 把“块增强”和“检索后处理”(如 rerank)混为一谈 → ✅ 明确块增强是预检索阶段,rerank 是后检索阶段,两者互补但不重叠。
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“我在项目中实现了滑动窗口重叠和元数据附加”切入,具体说明重叠比例(如 20%)、元数据字段(标题+章节),以及 Recall@5 提升 12% 的量化结果。
- 如果你只做过传统 NLP:用“文档摘要”类比“摘要嵌入”,用“关键词提取”类比“元数据附加”,强调迁移能力。例如:“我在文本分类中用过摘要压缩,类似思路可以用于 RAG 块增强。”
- 如果你是校招无项目:聚焦论文复现,如“我复现了 HyDE 论文中的假设问题生成,在 Natural Questions 数据集上 Recall@5 提升 18%”,展示对前沿技术的理解。
- 《HyDE: Precise Zero-Shot Dense Retrieval without Relevance Labels》
- 《LLM-based Chunking for Long Document Retrieval》
- 《BGE-Reranker-v2: A Lightweight Cross-Encoder for RAG》
- 《Contriever: Unsupervised Dense Retrieval with Contrastive Learning》
- 《RAGAS: Automated Evaluation of Retrieval Augmented Generation》