最近在做一个内部知识库问答,文档主要是产品手册和操作规范,用的是LangChain+开源embedding模型(bge-large-zh)。现在遇到一个很头疼的问题:用户问“如何重置密码”,系统召回的片段经常是“忘记密码时可通过管理员重置”这种周边描述,真正讲操作步骤的段落反而排到后面去了。我试过把chunk_size从500调到200,也加了overlap,效果还是不稳定。想请教下各位,这种情况一般是切分策略的问题,还是说bge这种通用模型对短句/操作步骤的语义理解不够?如果要换模型,有没有适合中文技术文档的推荐?另外,有没有必要对召回的片段做重排序?感谢!
楼主
9天前
RAG检索老是召回不相关片段,是切分粒度问题还是embedding选型不对?
请 登录 后发表回复
全部回复
共 24 条
2楼
2天前
我之前也踩过类似的坑,问题不一定在切分粒度,bge对操作步骤这种强指令性文本确实容易“抓偏”。建议先试试对召回结果加个基于关键词或规则的过滤,比如把含“步骤”“点击”“按”这种词的片段权重拉高。另外重排序(rerank)非常值得上,尤其用bge-reranker,对中文技术文档效果提升挺明显的。如果还不行,再考虑换模型也不迟。
3楼
1天前
说实话你这问题我去年也踩过一模一样的坑,最后发现根子不在切分粒度,而是bge对“操作步骤”这种强指令性文本的语义重心抓不准。我后来换成了m3e-large,配合一个简单的规则:把包含“点击/输入/选择”这类动词的句子单独切成小块,召回准确率直接上了一个台阶。重排序强烈建议加,用bge-reranker-base就行,成本不高但能把真正讲步骤的段落顶上前面,比反复调chunk参数管用多了。
4楼
1天前
建议先看下chunk切分是不是把操作步骤和说明文字混在一起了,分开存效果会好很多。
重排序确实值得加,尤其你这种技术文档,bge对短句召回本来就一般。
5楼
11小时前
说实话我觉得你这问题大概率不是切分粒度的事儿,bge-large-zh对操作步骤这种强指令性文本本来就偏弱,它更擅长匹配语义相近的泛化描述。我之前做类似手册问答时,把embedding换成bge-m3或者text2vec-large-chinese,召回准确率明显上来了。另外重排序强烈建议加,用bge-reranker-base跑一遍,能把“重置密码”和“操作步骤”的相关性权重拉正,成本也不高。你试试先换模型,如果还不行再调chunk大小,别一上来就动切分参数。