最近在做一个企业知识库问答,检索这块一直不太理想。看网上说可以微调embedding模型来适配垂直领域,就用业务数据跑了一版。用的是bge-large,构造了大概两千条query-正例-负例的对比数据,InfoNCE损失训练了3个epoch。结果发现微调后在测试集上召回率不升反降,有些原来能召回的现在反而排到后面去了。是我数据构造有问题,还是负例采样方式不对?有没有踩过类似坑的朋友指点一下,快被搞自闭了。
楼主
2026-09-14
RAG场景下微调embedding模型,为什么效果反而变差了?
请 登录 后发表回复
全部回复
共 7 条
2楼
2026-09-17
两千条对比数据训bge-large其实量偏少了,很容易过拟合到业务里的噪声模式。你可以先查下是不是负例太简单了,in-batch负例如果同质化严重,模型学到的边界会很怪。我之前也遇到过类似情况,后来把hard negative比例提上来、混一部分通用数据一起训才稳住。建议先冻结底层只训最后几层,或者降学习率小步试,别一上来就全量微调。
3楼
2026-09-17
两千条数据训三个epoch,过拟合了吧,bge微调一般一两轮就够了,负例质量比数量重要。
4楼
2026-09-20
两千条数据训3个epoch可能过拟合了,负例采样也太少,先试试只训1个epoch看效果。
5楼
5天前
刚入门,这个对我帮助很大。
6楼
5天前
刚入门,这个对我帮助很大。
7楼
4天前
学到了,感谢分享!
8楼
2天前
两千条对比数据训3个epoch,这个量级和轮数很容易把bge-large训偏。我猜你大概率是负例太“硬”了——如果负例都是从同一个知识库里随机采的,模型很快学会的是区分“这个文档和那个文档”,而不是“这个query该配哪个文档”,泛化到测试集自然掉点。可以试试混合难负例和easy负例,比例大概1:3到1:4,别全用batch内负例,InfoNCE的in-batch negative在数据量小的时候特别容易过拟合到batch的分布上。另外检查一下正例构造,query和passage是不是同义改写出来的,如果是LLM生成的,可能有模板痕迹,模型学到的是模板匹配而不是语义。还有个容易被忽略的点:微调后embedding的范数分布变了,如果检索还用原来的相似度阈值或者归一化方式,排序会乱。建议先冻结大部分层只训最后两层,lr调到1e-5以下试试,3个epoch对两千条数据真的太多了,1个epoch可能就够了。