由于bert线上推理预测时间较长,考虑更换轻量级albert,参考https://github.com/brightmart/albert_zh,用自己数据集训练分类模型时遇到以下问题:
1、用albert_zh(albert_tiny、albert_bas)代码跑了一下自己的数据,eval accuracy 只有0.1左右
从以下几方面排查问题:a、数据(数据量,数据输入,数据噪音) b、学习率 c、训练时间
经过排查学习率和epochs不变的情况下,用其他分类数据集没问题,确定是数据问题
我的数据格式是csv,在classifier_utils.py中加入处理数据的Processor,然后train_data下的数据,第一行其实是噪音建议删去,修改下_create_examples
函数,_create_examples中在return之前random.shuffle(examples)
修改后重新训练,准确率80%左右
2、同样的参数数据,albert_tiny和albert_base准确率正常,albert_large准确率0.1左右
查阅了相关资料,使用large 的预训练模型做下游finetune的时候, 应该把学习率调低一点
将学习率1e-4改为1e-5,准确率接近80%,这里还有一个问题,albert_large准确率低于albert_base,后又测试了将lr改为2e-5,large准确率优于base
3、albert_xlarge准确率异常
文档中提到使用xlarge时,batch_size不能太小,否则可能影响精度,调整batch_size 后准确率仍异常,还从1中的几个角度排查问题,发现是训练时间太短,多训练一会后,结果正常
在我的数据集上,albert_xlarge精度没有上升很多,但预测推理时间和bert差不多,暂时不考虑使用