-
Notifications
You must be signed in to change notification settings - Fork 52
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
关于半指针-半标注模型中数据不平衡导致2分类器几乎全预测为0的问题 #5
Comments
你是直接用本项目的数据集复现本项目的模型吗? 在我的环境里,本项目的代码是可以成功跑起来,重复跑也可以重现这个结果。但是很奇怪,有的人在有些环境下死活跑不起来(就是你说的情况)。类似的问题也出现在 https://github.com/bojone/bert4keras/blob/master/examples/task_relation_extraction.py ,那脚本也有人成功复现了,也有人说f1一直为0,我至今都没总结出问题何在。 如果你确认实现上没有问题,那么不妨试试换几个随机种子,或者想办法搞一些其他的随机因素,多试几次。 threshold的问题其实不大,在本项目里边,虽然0.1最好,但就算你设成0.5,效果也不会降为0;尽管是类别不均衡的,但我们的实践里边,这个不均衡对训练结果影响不大(也就是说用普通的交叉熵、还是用focal loss或者手动调节权重,差别都不大)。 |
关于数据集我是使用的WebQA 关于训练细节: /* ----- */ /* ------ */ |
在Validation中,出现的结果不止f1=0,同时 recall,precision=0 |
大大增大Epoch数目,解决问题。 我的理解: |
你是自己的数据,还是同样的开源的数据啊? |
都是开源数据 CasRel 用的是 WebNLG数据 |
在模型训练若干个epoch后,在valuation过程中发现,
经过sigmoid后输出的标注开始和结束的两个指针向量中值都很小,通过threshold=0.1解码后的两个向量都是0。
这样导致Acc很高,Prec,recall,f1都为0
同样的问题也出现在复现您的另一篇关系抽取论文中 https://github.com/weizhepei/CasRel 也是半指针半标注模型
(但是开源的作者好像不太上心解答issue)
我现在还没有找到问题的原因QAQ,我是用Pytorch进行复现的
想请问一下在使用半指针-半标注模型中 有哪些值得注意的点?
还有,在解码过程中Threshold超参数要怎么选取
我注意到在CasRel中Threshold选取的0.5, 但是在这篇DGCNN中Threshold的选择是0.1
/* ----下面是我自己对半指针半标注模型的一些疑惑 -----*/
该模型最后是两个2分类器,一个Start指针的二分类器,和一个End指针的二分类器
根据您的博客,对于这个QA任务,如果一个长度为L语料里存在一个answer,那么他的结果
Start_vec ,End_vec 应该是一个长度为L的向量,其中一个Index为1,其余为0。
显然这是一个负样本远多于正样本的数据集,
而且在数据集中,还有很多语料里是没有答案的,那么Start 和 End 就直接是0向量了。
负样本会更多。这种失衡的数据集应该会把二分类器向预测0的趋势上进行训练吧。
QAQ
The text was updated successfully, but these errors were encountered: