最近在搭一个内部文档问答的RAG,用的bge-m3做embedding,chunk大小试了256和512,重叠设了50。问题是有时候问“报销流程”,召回的前十名里一堆是合同审批、采购付款的内容,虽然也沾边,但真正讲报销步骤的那几段反而排到很后面。我怀疑是chunk切分把完整流程截断了,语义不完整导致的。想请教下各位,对于这种操作流程类的文档,是应该按段落切还是按固定长度切?有没有必要先做一下标题层级识别再切?另外重排模型对这种情况帮助大吗?
楼主
2026-08-26
RAG检索老召回一堆无关片段,chunk切分到底该按啥来?
请 登录 后发表回复
全部回复
共 24 条
2楼
26天前
这种操作流程类文档按固定长度切确实容易出问题,报销步骤经常跨段甚至跨小节,硬切到512就把“提交材料”和“审批节点”分到两个chunk里了,embedding再强也救不回来。我建议先做标题层级识别,用markdown或正则把“## 报销流程”这种结构抽出来,按最小完整语义单元切,比如一个三级标题下的内容作为一个chunk,超长再按句子滑窗。你问“报销流程”召回一堆合同审批,很可能是因为合同审批里也有“流程”“审批”这些高频词,而真正的报销步骤被切碎后语义密度反而变低了。重排模型帮助挺大的,尤其bge-reranker这类,能把语义匹配但位置靠后的捞上来,但它治标不治本,切分烂了重排也难救。另外可以试试在chunk前面拼上标题路径,比如“财务制度 > 报销 > 步骤”,让embedding带上下文,亲测对层级文档提升明显。还有个小技巧是给操作流程类文档单独建一个query改写,把“报销流程”扩成“报销 步骤 材料 审批”,召回会干净不少。
3楼
23天前
先按标题层级切,流程步骤别硬拆,重排模型能救一点但治标不治本。
4楼
15天前
先按标题层级切,流程类文档截断了语义肯定乱。加个重排模型能救回来不少,亲测有用。
5楼
14天前
按标题层级切确实管用,我试过把表格和步骤单独拆出来,召回准多了。重排模型能救一点,但切歪了它也白搭。