fastnlp / fastNLP

fastNLP: A Modularized and Extensible NLP Framework. Currently still in incubation.
https://gitee.com/fastnlp/fastNLP
Apache License 2.0
3.05k stars 451 forks source link

使用bert embedding loss可以下降,但正确率一直为0 #373

Open HuizhenShu opened 2 years ago

HuizhenShu commented 2 years ago

感谢开源 NER任务,同样的模型结构,使用Static embedding可以得到正常的结果,使用bert embedding loss可以正常下降,但评估结果一直都是0。大概是什么原因呢?是词表对不上吗?我看了代码,应该有把本地vocab和bert的vocab做映射。不过有一点很奇怪,我打印了同一个字符的embedding值,每次打印结果都不一样,是随机初始化的吗还是预训练模型没有成功读取?

yhcc commented 2 years ago

evaluate一直为0这个,建议你先只用10个sample(请保证这10个中一定至少包含一个entity哈,否则F1用于都是0),然后在这个10个上train,也在这10个上evaluate,看看能不能overfit这10个数据。同一个字符每次不一样,应该是由于dropout的原因,通过module.eval()设置成evaluate模式关掉dropout应该就是一致的了。

HuizhenShu commented 2 years ago

谢谢回复,莫名又有正常的结果了,我再验证一下

rwqzcq commented 2 years ago

谢谢回复,莫名又有正常的结果了,我再验证一下

请问你这个问题解决了吗?我也遇到了同样的问题

rwqzcq commented 2 years ago

evaluate一直为0这个,建议你先只用10个sample(请保证这10个中一定至少包含一个entity哈,否则F1用于都是0),然后在这个10个上train,也在这10个上evaluate,看看能不能overfit这10个数据。同一个字符每次不一样,应该是由于dropout的原因,通过module.eval()设置成evaluate模式关掉dropout应该就是一致的了。

evaluate一直为0这个,建议你先只用10个sample(请保证这10个中一定至少包含一个entity哈,否则F1用于都是0),然后在这个10个上train,也在这10个上evaluate,看看能不能overfit这10个数据。同一个字符每次不一样,应该是由于dropout的原因,通过module.eval()设置成evaluate模式关掉dropout应该就是一致的了。

您好,我用了10个sample,训练了10个epoch,但是正确率全都是0,fastNLP版本为0.6.0

yhcc commented 2 years ago

overfit小数据的时候,看看loss是否一直在下降,如果loss没有一直下降的话,应该是代码设置有问题(可以把epoch设置到1000这种)按道理loss会无限接近于0的。如果当loss都接近0了,metric还是为0的话,应该就是代码有问题了。(不过需要排除一种情况就是选择的10个sample如果只有O这个标签的话,及时overfit了,metric也是0

rwqzcq commented 2 years ago

感谢回复,问题已解决,降低Adam的学习率,我设置的是0.000001