最近在做公司内部的文档问答,用langchain搭了个RAG流程,PDF解析后按500字切chunk,用的bge-large-zh,向量库是Milvus。但实际效果很拉胯,问一些跨章节的问题(比如“XX项目的预算和负责人分别是谁”),检索回来的top5经常只有一段对得上,甚至直接跑偏。我试过调top_k,降相似度阈值,也试过重叠切分,但都改善不大。想问问各位老哥,这种问题一般是chunk粒度的问题,还是说embedding模型对该领域术语理解不够?或者有没有必要上重排(rerank)?求个排查思路,感谢。
楼主
28天前
RAG检索老是不准,是chunk切太碎还是embedding模型选错了?
请 登录 后发表回复
全部回复
共 82 条
2楼
3天前
这种跨章节的复合问题,光靠切块和embedding很难搞定,信息分散在不同段落里,top5召回自然对不齐。建议先别急着换模型,试试把chunk加大到800-1000字,或者用父子chunk那种结构,先定位大段落再回取细节。另外你这场景上rerank大概率有提升,bge-large-zh做初筛还行,精排用bge-reranker或者cross-encoder能救回来不少。排查的话,建议先抽几个bad case看下检索score分布,如果相关段落分数也低,那embedding领域适配确实有问题,得考虑微调。
3楼
2天前
这种跨章节问题光靠切块和向量检索确实容易翻车,建议先上重排,把top20召回再精排,效果会明显很多。