Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

为什么新版本bert效果如此差呢,这bert似乎也太不稳定了... #5

Open
Wangpeiyi9979 opened this issue Apr 26, 2019 · 11 comments
Labels
good first issue Good for newcomers help wanted Extra attention is needed

Comments

@Wangpeiyi9979
Copy link

No description provided.

@lemonhu
Copy link
Owner

lemonhu commented Apr 30, 2019

建议使用版本pytorch-pretrained-bert==0.4.0,后面有时间,我会再查找具体原因及更新。

@Wangpeiyi9979
Copy link
Author

谢谢您的项目,真的很棒。我这几天简单看了一下BertForTokenClassification源码。发现一个可能的原因。
在0.4.0中,bertForTokenClassification的前向传播是这样的
image
在0.6.0中,其是这样的
image
可以看到,在0.6.0中,求loss时进行了mask,但是0.4.0中没有。我试了一下,在0.4.0版本下,显示调用bertForTokenClassificaiton的前向传播。若求loss进行mask。则效果会变得很差。
具体原因还在分析。

@Wangpeiyi9979
Copy link
Author

希望能够给到您帮助

@lemonhu
Copy link
Owner

lemonhu commented May 1, 2019

谢谢反馈,后面我再仔细分析下。

@Single430
Copy link

@lemonhu 您好,在版本0.6.1中您是否已经修复了这个问题?新版我还是会出现f1值低的原因

祝您生活愉快
super.single430

@acneyouth1996
Copy link

大佬代码写的真好,学习了。
有个小建议,您的dataiterator,在不能被batch size整除的情况下,直接pass了最后一个batch,在inference的时候可能不大方便。

@lemonhu
Copy link
Owner

lemonhu commented Jun 21, 2019

@lemonhu 您好,在版本0.6.1中您是否已经修复了这个问题?新版我还是会出现f1值低的原因

祝您生活愉快
super.single430

问题如@Wangpeiyi9979所指,稍作修改即可适应新版本。

@lemonhu
Copy link
Owner

lemonhu commented Jun 21, 2019

大佬代码写的真好,学习了。
有个小建议,您的dataiterator,在不能被batch size整除的情况下,直接pass了最后一个batch,在inference的时候可能不大方便。

谢谢您的建议。

@lemonhu lemonhu closed this as completed Jun 25, 2019
@lemonhu lemonhu added good first issue Good for newcomers help wanted Extra attention is needed labels Jul 9, 2019
@WaNePr
Copy link

WaNePr commented Oct 9, 2019

谢谢您的项目,真的很棒。我这几天简单看了一下BertForTokenClassification源码。发现一个可能的原因。
在0.4.0中,bertForTokenClassification的前向传播是这样的
image
在0.6.0中,其是这样的
image
可以看到,在0.6.0中,求loss时进行了mask,但是0.4.0中没有。我试了一下,在0.4.0版本下,显示调用bertForTokenClassificaiton的前向传播。若求loss进行mask。则效果会变得很差。
具体原因还在分析。

请问您分析出来是什么原因导致mask 之后的loss变得很差?

@sakuranew
Copy link

谢谢您的项目,真的很棒。我这几天简单看了一下BertForTokenClassification源码。发现一个可能的原因。
在0.4.0中,bertForTokenClassification的前向传播是这样的
image
在0.6.0中,其是这样的
image
可以看到,在0.6.0中,求loss时进行了mask,但是0.4.0中没有。我试了一下,在0.4.0版本下,显示调用bertForTokenClassificaiton的前向传播。若求loss进行mask。则效果会变得很差。
具体原因还在分析。

按理说pad的输入预测的logits和pad的标签不应该需要做损失计算啊,为什么会这样真的是很神奇的问题,0.6和0.4的区别也就是这个了,新版pytorch-transformer 也是mask了loss。

@lemonhu
Copy link
Owner

lemonhu commented Nov 3, 2019

@sakuranew 谢谢关注与反馈。
我最近的实验,也表明在计算损失时引入mask会严重降低NER的效果,有些神奇(新版的pytorch-transformer引入了mask了loss)。
这个也作为该问题的一个实验性解答吧。

@lemonhu lemonhu reopened this Nov 3, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

6 participants