最近在拿Llama3-8B做中文情感分析微调,用的QLoRA,数据集大概1万条电商评论,二分类(正向/负向)。训练时loss从2.1降到0.8,看着挺正常,但验证的时候发现模型几乎把所有句子都预测成“正向”。我检查了数据,正负样本大概是平衡的(5.5:4.5),也试过调学习率(从2e-4降到1e-5)和增加epoch,结果差不多。我怀疑是不是prompt格式的问题?我用的模板是“评论:xxx 情感:”,但模型好像没理解任务。另外,我用的LoRA rank=8,alpha=16,target_modules只改了q_proj和v_proj,是不是需要改全连接层?有没有大佬遇到过类似情况?想知道是数据的问题还是我哪里设置得不对,求指点,谢谢。
楼主
12天前
微调Llama3做中文情感分析,loss降了但预测全是一个标签,怎么回事?
请 登录 后发表回复
全部回复
共 22 条
2楼
2天前
我之前跑类似任务也翻过车,最后发现是prompt里少了明确的指令性描述,模型根本不知道“情感:”后面该接啥,你试试把模板改成“请判断以下评论的情感倾向,只输出正向或负向:xxx”。另外QLoRA只改q和v确实可能欠拟合,把gate_proj和up_proj也加上会稳很多,尤其中文任务对MLP层的依赖比想象中大。还有个坑是验证集如果和你训练时的分布不一致,比如混入了大量中性样本,也会导致模型摆烂全选多数类,建议抽几十条人工看下预测概率分布,别只看标签。
3楼
1天前
我之前做类似任务也踩过这个坑,loss降了不代表模型真学会了任务,很可能是在学“频率捷径”。你正负样本虽然平衡,但如果训练时模型发现输出“正向”的loss更低,它就会无脑选性价比高的那个。建议你直接看训练集上的预测分布,如果训练集也全正,那就是模型欠拟合或指令没对齐,可以试试把模板改成更明确的“以下是评论,请判断情感是正向还是负向”这种完整指令。另外target_modules只改q和v确实可能不够,加上gate_proj和down_proj试试,我上次加了之后效果变化挺明显的。还有个土办法,拿几条训练样本跑推理,打印logits看看正向和负向的分数差距,能帮定位是不是输出层偏置了。