最近在折腾本地知识库问答,用的Chroma+开源embedding模型(bge-large-zh),文档切了512字符带overlap。结果发现问一些具体问题(比如“某个参数在哪个文件里配的”)时,召回的片段经常不相关,反而用ES做BM25能直接命中。是我切块策略有问题,还是embedding模型选得不对?或者向量数据库本身就不适合这种精确匹配场景?求有实战经验的大佬指点一下,现在有点迷茫,感觉技术选型可能一开始就错了。
最近在折腾本地知识库问答,用的Chroma+开源embedding模型(bge-large-zh),文档切了512字符带overlap。结果发现问一些具体问题(比如“某个参数在哪个文件里配的”)时,召回的片段经常不相关,反而用ES做BM25能直接命中。是我切块策略有问题,还是embedding模型选得不对?或者向量数据库本身就不适合这种精确匹配场景?求有实战经验的大佬指点一下,现在有点迷茫,感觉技术选型可能一开始就错了。
这个问题太典型了,我去年也踩过一模一样的坑。向量检索本质上找的是语义相似,你问“参数在哪个文件配的”这种精确指向性问题,embedding反而容易把语义沾边但位置不对的片段捞上来。建议试试混合检索,BM25和向量各召回一部分再rerank,效果提升很明显。另外512字符切块对这种定位类问题确实偏大,可以试试按段落或函数边界切,语义完整性更好。
刚入门,这个对我帮助很大。