huanghuidmml / tfbert

基于tensorflow1.x的预训练模型调用,支持单机多卡、梯度累积,XLA加速,混合精度。可灵活训练、验证、预测。
58 stars 11 forks source link

加载模型问题 #7

Open stirm1 opened 2 years ago

stirm1 commented 2 years ago

NER任务加载模型进行测试比直接训练之后的测试降了五个点。 加载完模型之后不进行初始化会报错,请问是否是部分参数未加载导致的。

huanghuidmml commented 2 years ago

NER任务加载模型进行测试比直接训练之后的测试降了五个点。 加载完模型之后不进行初始化会报错,请问是否是部分参数未加载导致的。

您好,我已经修改代码的使用逻辑,已经重新测试通过了,第二次加载模型可直接将保存的模型地址传入model_dir即可。一开始的运行逻辑是第二次调用预测的话加载的是output_dir内的权重,可能和您的使用 方式不太一致。

stirm1 commented 2 years ago

可能不是这个问题,因为我查看了你的代码逻辑,在第二次调用预测的时候我加载的是output_dir内的权重,不过仍然和训练过程后的推理下降了五个点的准确率。我进行了多次实验结果都是下降接近五个点,不过查看你的代码逻辑并没有发现有什么不同。训练过程中同时指定了dotrain和dopre,在预测时只指定了dopre。 同时我发现CRF对模型的召回率和准确率几乎没什么提高。 目前还在检查你的代码,是不是在加载过程中有某些参数没被初始化或者存在某种bug,这个现象目前还没得到什么解释,不清楚这五个点的损失来自哪里。

stirm1 commented 2 years ago

数据集是一份德语的数据集 我在其中添加了一定的预处理并保证预处理是正确的。

stirm1 commented 2 years ago

注意到在训练后推理过程中将德语置换成了英语,您的代码中是否有那部分做了这样的操作呢

huanghuidmml commented 2 years ago

注意到在训练后推理过程中将德语置换成了英语,您的代码中是否有那部分做了这样的操作呢

这个应该没有吧,如果有这个情况,应该是bert分词器切分的问题了,是不是词典用的英文词典呢?我一直用中文数据集测试,还没接触过德语

stirm1 commented 2 years ago

词典用的mbert的多语种词典。奇怪的是我二次推理的时候德语处理都是正常的,第一次处理预测出来的德语都被置换成英语了

huanghuidmml commented 2 years ago

那你的数据集是方便分享吗?我晚点用来测试下

stirm1 commented 2 years ago

很抱歉数据集是内部数据集无法分享 我现在解决了这个问题 之前为了查看模型效果我将测试数据集既当作验证集又当作测试集,目前我只用作测试集时可以解决上述情况,但是目前没定位到具体原因。