最近在预训练完达观杯基于大规模预训练模型的风险事物标签识别的题目之后,发现分数较低,排查错误的过程整理为一篇对应论文。
这里我们首先使用tensorflow之中的微调过程进行比对,训练的结果如下
从中可以看出最好的分数为0.5293800811021452,与之前使用pytorch微调的最高分相比,提升明显,由此我们将错误的重点放在微调代码的甄别之中
!!!启示:定位错误的位置很关键,只有定位好了错误的位置,错误才能够被分析与判断出来!!!
这里面我经过跑程序发现,我的效果较好的tensorflow的bert模型之中
与pytorch之中
输出的内容不同
经过仔细地排查之后,发现pytorch之中的fine-tuning多加了一个pooler网络层
去除pooler网络层之后,发现网络层的效果提升并不明显
在tensorflow之中的maxlen为128,而我调用的maxlen只有32,之前由于显存不够,所以故意调小了maxlen的值,可见不能随便地调小maxlen,否则会导致模型训练的时候出现问题
先用了150个unlabeled文件进行预训练,这之后再使用labeled-data进行预训练了300个epoch,发现预训练300个epoch之后的效果反而不如不用labeled-data进行预训练的效果好,思考有没有可能是labeled-data预训练的epoch过多了,造成了模型参数结果的过拟合。
调整之后发现,是由于引用的是原先的bertmodel之中的数据,而不是新的unlabelled数据预训练好之后的权重值造成的这种差距