最近在搞RAG系统,基座用的LLaMA-3.1-8B,在领域文档上做了LoRA微调。结果发现,微调后做检索召回时,Top-5命中率反而比原始模型低了将近10个点。我怀疑是不是微调让模型对领域内部“过度记忆”,导致语义搜索时更依赖参数知识,而不是嵌入向量的相似度。目前用的bge-base-zh检索器,微调时只训了生成部分,没动检索embedding。想问下大家,这种情况是微调和RAG之间的典型冲突吗?有没有什么trick,比如冻结某些层或者调整训练数据比例来缓解?先谢过各位大佬了!
微调后的LLM做RAG检索,总感觉召回变差了,大家有遇到吗?
全部回复
共 187 条微调确实可能改变模型的表征空间,尤其LoRA动了attention层之后,隐藏状态分布会偏移,检索器拿到的query embedding跟之前对不上了。我之前也踩过类似坑,生成微调后连原始语义相似度都受影响了。建议试试把微调后的模型只用来做生成,检索query还是走原始基座编码,或者干脆把query改写成关键词再喂给bge。
微调后生成模型容易“自嗨”,跟检索器脱节了。试试把训练数据里混点纯检索任务,或者冻结底层只调顶层。
微调只动生成不改embedding,召回掉点可能是生成模型对检索结果的排序有干扰,试试把检索和生成解耦。
微调又没动检索器,召回变化跟生成模型关系不大吧?是不是评测时生成模型影响了结果判断。
你确定是微调影响了检索?生成和embedding是两条路,LoRA只训生成按理说碰不到bge的向量空间。我倒怀疑是评测时query分布变了,或者微调后模型改写query的风格飘了,导致检索器匹配不上。可以先固定同一批query,分别喂给微调前后的模型生成检索query,对比下差异在哪。
这个现象挺常见的,LoRA微调确实容易让模型偏向参数记忆,尤其是领域数据重复度高的时候,生成和检索表征会慢慢解耦。你检索器没动这点很关键,问题大概率出在微调后的隐层语义分布漂移了,跟bge的向量空间对不齐。可以试试在微调数据里混一部分通用语料,或者把LoRA秩调小、只训靠后的层,减少对底层语义的扰动。另外也可以拿微调后的模型重新抽一遍doc embedding做faiss索引,别用原模型离线建库那套。
我这边也踩过类似的坑,微调完生成模型之后检索指标确实会往下掉,但问题多半不在embedding本身。你只训了LoRA生成部分,理论上不该影响检索器,不过如果训练数据里问题和答案的分布太单一,模型对query的理解会偏,召回自然就歪了。可以试试把微调数据里的指令和原始领域语料混着来,或者干脆固定一个模型专门做query改写再喂给检索器。