最近在跑一个法律文书摘要的生成任务,基座用的Qwen2.5-7B,用LoRA(r=16, alpha=32)在几千条裁判文书上微调。效果倒是出来了,但发现模型对通用问答能力下降得厉害,比如问它“今天天气怎么样”都会往法律条文上扯。我试过降低学习率到1e-5,也加了5%的通用指令数据做混合,还是没明显改善。看了一些帖子说可能是LoRA作用层数或者秩的问题,但我不太确定该怎么诊断。有没有大佬遇到过类似情况?是继续加大通用数据比例,还是应该调整LoRA的超参,或者干脆换全量微调?顺便问下,有没有什么评估指标能量化“遗忘”程度,而不是光靠人工感觉?谢谢!
LoRA微调后灾难性遗忘严重,是数据问题还是学习率没调好?
全部回复
共 4 条通用数据加到20%试试,或者把r降到8看下,另外量化遗忘可以跑下MMLU对比分数。
你这情况我太熟了,之前做金融NLP也栽过。5%通用数据偏少,我试过混到20%左右才稳住,但代价是任务效果会掉一点。诊断遗忘的话可以跑一下MMLU或者CEval的子集,对比微调前后分数差,记录下掉得最狠的科目,比纯靠感觉靠谱。LoRA层数我倒觉得不是主因,r=16对7B来说不算激进,问题更可能出在数据分布太单一,法律术语的分布把通用指令的空间挤没了。
法律领域微调确实容易把模型带偏,我上次做合同审查也这样。5%通用数据可能太少了,试试拉到20%以上,而且通用数据要覆盖多轮对话和开放式问答,光加指令不够。LoRA秩16其实不低,问题更可能出在只挂了attention层,可以试试把MLP层也加上,但学习率再压到5e-6。量化遗忘的话,去跑一下MMLU或者C-Eval的子集,对比微调前后的分数掉多少,比人肉感觉靠谱。
几千条裁判文书对7B模型来说其实不算少,但法律领域的语料分布太集中,模型很容易把“输出空间”整个拽到法律语境里去,这跟学习率关系可能没那么大。你降到1e-5还这样,我倾向于觉得是数据配比和LoRA作用范围的问题——r=16其实不小了,alpha=32更是放大了更新幅度,试试把alpha降到16甚至8,或者只对attention的qkv做适配、先别动FFN层。5%通用数据可能太少了,法律语料和通用分布的KL散度很大,我一般至少掺15%-20%的通用指令,而且要在训练中后期才加进去,前期让模型先学任务。评估遗忘的话可以看两个东西:一是通用benchmark(比如C-Eval、MMLU的子集)在微调前后的掉分幅度,二是计算模型在通用验证集上的perplexity变化,掉点超过10%基本就是明显遗忘了。另外全量微调未必更好,7B全量在小数据上过拟合更快,遗忘可能更狠,除非你加LoRA+replay或者用类似DoRA这类改进去稳住预训练知识。