最近在搞一个文档问答的项目,用的Chroma + OpenAI embedding,文档切成512字符的chunk。测试的时候发现,很多问题明明答案就在文档里,但召回top5就是找不到。我试过调相似度阈值,从0.7降到0.5,结果噪声也变多了。也试过用不同embedding模型,但效果差别不大。有点迷茫,是不是chunk大小的问题?还是应该上rerank?或者是元数据过滤没做好?想请教一下有经验的朋友,一般这个阶段会怎么排查和优化?
最近在搞一个文档问答的项目,用的Chroma + OpenAI embedding,文档切成512字符的chunk。测试的时候发现,很多问题明明答案就在文档里,但召回top5就是找不到。我试过调相似度阈值,从0.7降到0.5,结果噪声也变多了。也试过用不同embedding模型,但效果差别不大。有点迷茫,是不是chunk大小的问题?还是应该上rerank?或者是元数据过滤没做好?想请教一下有经验的朋友,一般这个阶段会怎么排查和优化?
512字符的chunk对中文来说其实挺尴尬的,容易把一段完整语义切碎,检索时上下文断掉了自然召回不准。我一般会先把chunk调到256左右再试试,同时加上overlap,很多时候问题就出在这。另外你只测top5有点少,先看top20里有没有正确答案,能区分是召回问题还是排序问题。rerank确实值得上,但别急着当救命稻草,先确认是切分和embedding的锅。元数据过滤如果你文档有明显结构(章节、来源),加上会稳不少。