最近在公司做一个内部知识库的RAG问答,用的bge-large-zh,分块按512字符切,重叠64。文档是各种技术手册和会议纪要混在一起。现在问题就是,用户问“服务器宕机怎么排查”,检索出来的片段全是讲网络配置的,甚至还有报销流程。我试过调top_k,也换了chunk_size,效果都不行。是不是我应该先做一下文档分类,或者换个embedding模型?还是说混合检索(BM25+向量)能救一下?希望有经验的大佬指点一下,万分感谢。
楼主
2026-08-02
RAG检索到的都是无关片段,是不是我embedding方式选错了?
请 登录 后发表回复
全部回复
共 121 条
2楼
3天前
技术手册和会议纪要混在一起确实挺坑的,这两类文本的语义分布差太多了,会议纪要里“服务器”可能是在聊采购预算,检索出来能不跑偏嘛。你换chunk_size和top_k没用很正常,问题大概率不在embedding模型本身,bge-large-zh做中文检索够用了,而是混合语料让向量空间被稀释了。我建议先别急着上混合检索,那个是治标,先做个粗分类或者给文档打个domain标签,检索时按类型过滤一下,效果立竿见影。另外512字符切分对技术手册可能偏大,一个chunk里塞了好几个主题,embedding就被平均掉了,可以试试按标题层级切或者降到256左右看看。还有个容易忽略的点,你query那边有没有做指令前缀?bge系列检索时query加个“为这个句子生成表示以用于检索相关文章:”效果会好一些,很多人漏了这一步。混合检索确实能救一部分,BM25对“宕机”这种关键词匹配很敏感,但前提是你先把语料污染的问题处理掉,不然BM25也会把报销流程里带“服务器”字样的段落捞上来。