最近在做一个企业知识库问答,文档主要是PDF和Word,大概几千页吧。用的LangChain + OpenAI的text-embedding-3-small,chunk_size试过500和1000,overlap也调了,但用户问一些跨章节的问题时,召回的内容总是不全,甚至答非所问。我怀疑是不是embedding模型对中文支持不够好,还是说切块策略本身就有问题?另外,看到有人提到用BM25做混合检索,但不确定我这个场景值不值得加。有没有大佬遇到过类似情况,能给个排查思路或者调优方向?先谢过了。
楼主
11天前
RAG召回老是不准,是切块太细还是embedding模型选错了?
请 登录 后发表回复
全部回复
共 23 条
2楼
2天前
我之前也踩过类似的坑,text-embedding-3-small对中文长文档的语义捕捉确实一般,尤其跨章节这种场景,切块再细也容易丢上下文。建议先别急着换模型,试试把chunk_size提到1500甚至2000,overlap设成200,同时用“章节标题+摘要”做前缀,召回会稳不少。BM25混合检索值得加,尤其PDF里表格和术语多的内容,稀疏检索能补不少漏,成本也不高。还有个点,你查一下是不是文档里图表内容根本没被解析出来,这比embedding更致命。
3楼
2天前
说实话你这个问题八成不是embedding的锅,text-embedding-3-small对中文的语义理解已经够用了。跨章节问题本质上是chunk之间信息割裂,建议试试父子切块或者加个段落级摘要索引,让检索能先定位到章节再细查。BM25混合检索很值得加,尤其对PDF里那些专业术语和编号,稀疏检索反而比向量更稳。另外可以查下你query是不是太短,先做一层query改写,把用户口语问题扩写成包含关键实体的表述,召回质量会明显提升。
4楼
1天前
说实话你这情况我也踩过坑,问题大概率不在切块和embedding本身。跨章节问题靠固定窗口切块根本抓不住上下文,试试父子切块或者按标题结构化切,先保住章节完整性再谈召回。中文场景text-embedding-3-small确实偏弱,有条件换个bge-m3或text-embedding-3-large对比下效果,差距挺明显的。BM25混合检索建议加上,尤其你这种企业文档里专有名词多,关键词匹配能兜底很多向量检索漏掉的精确命中,成本也不高。别急着调参,先拿几个典型问题做评测集,看看到底是切块丢信息还是语义匹配偏了,定位清楚再动手。