最近在做一个垂直领域的知识库问答,用bge-large-zh跑RAG,效果还行但专业术语老召回不准。就想着用领域数据微调一下embedding模型,用的FlagEmbedding,损失函数是默认的CSE。结果微调后单测相似度感觉还行,但接回RAG整体检索效果反而变差了,召回的结果有些莫名其妙。我怀疑是不是我的训练数据构造有问题,或者微调时把模型的通用语义破坏了?有没有朋友遇到过类似情况,一般怎么排查,是继续调参还是应该换别的方案比如重排序?求指点。
楼主
6天前
微调后的embedding模型在RAG里效果变差了,是哪里出了问题?
请 登录 后发表回复
全部回复
共 22 条
2楼
19小时前
我之前也踩过类似的坑,微调embedding模型很容易把通用分布带偏,尤其CSE这种对比损失对batch内的负样本要求很高,领域数据太单一的话,模型会记住表面模式而不是语义。建议你先别急着调参,把微调后的向量拉到TSNE或者PCA里看看分布,是不是和原始模型差距太大。另外重排序(rerank)确实是个更稳的方案,成本低见效快,可以先把这步加上再决定要不要继续折腾微调。训练数据这块,你试过用hard negative mining吗?纯随机负样本容易让模型学不到边界。
3楼
10小时前
我之前也踩过类似的坑,微调完单看相似度挺美,一上RAG就翻车。后来发现大概率是训练数据里正负样本太“干净”了,跟实际检索场景里的噪声完全不匹配,模型学得太死。建议你先别急着换模型,把微调时的负样本换成从真实语料里随机抽的段落试试,另外加个cross-encoder重排序,能救回来不少。还有个小细节,loss换成InfoNCE或者对比学习那套,对长尾术语的容忍度会好一些。