最近在搭一个本地知识库问答,用的LangChain+Chroma,Embedding模型试了m3e-base和bge-large-zh,检索出来的片段总是不够精准。比如问“报销流程有哪些步骤”,它经常只召回“差旅报销”相关的段落,反而漏掉了更通用的财务报销说明。我也尝试了调chunk_size(从500试到200),效果有改善但不明显。想请教一下大家,中文场景下除了换模型,还有没有比较实用的预处理或检索策略?比如是不是要做关键词权重融合,或者对文档做摘要索引?另外,有没有人试过用Qwen或ChatGLM做rerank?效果差距大吗?先谢谢各位了。
楼主
2026-08-01
RAG项目用开源模型做Embedding,中文效果总感觉不对劲,大家怎么调优的?
请 登录 后发表回复
全部回复
共 101 条
2楼
2天前
我之前也踩过这个坑,m3e和bge-large-zh其实都还算能打,问题大概率不在模型本身,而是你的检索粒度太粗了。问“报销流程”,召回一堆“差旅报销”其实挺正常,因为它们字面重合度高,但语义上你要的是更泛的那一层,这时候单靠向量确实容易偏。
我的经验是别急着上rerank,先把chunk做点“语义切分”而不是死磕固定长度。财务类文档里表格、条款、编号特别多,按标题层级切、或者把每条流程单独成块,召回准确率能明显好一截。另外可以给每个chunk加一句人工或模型生成的“摘要头”,检索时用摘要去匹配,命中率会高不少。
关键词融合我试过,BM25和向量做加权融合,对“报销流程”这种带明确术语的query确实有用,尤其是漏召回通用段落的时候。不过权重得调,不然容易把噪声也拉进来。
至于Qwen或ChatGLM做rerank,我用Qwen2做过一轮,比bge-reranker-base在中文长尾query上稳一些,但延迟和显存也上去了。如果本地部署,建议先用小模型rerank top20,再让大模型精排top5,性价比会好点。