ShomyLiu / pytorch-relation-extraction

distant supervised relation extraction models: PCNN MIL (Zeng 2015), PCNN+ATT(Lin 2016). 关系抽取

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于模型ONE模型测试和AUC曲线画法的问题

onehaitao opened this issue · comments

您好,看了Lin2016和Zeng2015论文的代码后,对于ONE模型如何测试和AUC曲线如何去画有两个疑问,希望您能帮忙解答。
1、从两篇论文的代码及您的代码中,可以看到ONE模型测试时如何选取测试结果是不同的,OpenNRE中把每个bag的的logits(n*class_num,n是这个包中句子数)从列方向取最大值,而Zeng2015的代码中,是按多实例学习的方法从bag中挑出一个句子。您对这两种方法有什么看法?我个人偏向于第二种,从MIL的理解角度更能接受。
2、关于AUC曲线,您代码中也有体现差异,Lin2016和Zeng2015的画法到底应该哪个是正确的?总不能在同一张图中比较两种画法下的AUC曲线吧?我想听听您的建议,如果有在关系抽取方面比较 详细地提及AUC画法的论文,也希望您能推荐给我。
谢谢!

你好,我当时在复现代码的时候,参考了Zeng2015的Theano代码和Lin2016的C++代码(现在已经经过很多次迭代升级为OpenNRE了),比较之下,我个人选择了Zeng2015的实现方式。
所以第一个问题,我个人倾向与Zeng2015的计算实现方式,正如你所说的符合distant supervision的MIL。
第二个问题,我跑过两种画法的代码,差别挺小。 涉及到画法的话,其实就是关于如何计算precision和recall的值了.Zeng2015的方法就是去掉NA来单独计算正例。Lin2016的就是你上面说的取了Top2000. ,这两种正如我在博客中提到的,结果类似。我认为Zeng的更加直接。 至于 画法,就好说了,我直接参考https://github.com/ppuliu/GloRE的plot文件。

你好,我当时在复现代码的时候,参考了Zeng2015的Theano代码和Lin2016的C++代码(现在已经经过很多次迭代升级为OpenNRE了),比较之下,我个人选择了Zeng2015的实现方式。
所以第一个问题,我个人倾向与Zeng2015的计算实现方式,正如你所说的符合distant supervision的MIL。
第二个问题,我跑过两种画法的代码,差别挺小。 涉及到画法的话,其实就是关于如何计算precision和recall的值了.Zeng2015的方法就是去掉NA来单独计算正例。Lin2016的就是你上面说的取了Top2000. ,这两种正如我在博客中提到的,结果类似。我认为Zeng的更加直接。 至于 画法,就好说了,我直接参考https://github.com/ppuliu/GloRE的plot文件。

谢谢您的回答。还有个问题,因为NYT语料只有train和test两部分数据,训练时如何找到最好的模型呢?(没有dev)。我做实验的时候是因为通过AUC曲线的面积来选择模型的,所以去曲线的画法有一定的深究。

dev这个从train里面随机划分吧。或者不用dev,只用test,大部分文章都是这样实验的。
此外,远程监督下的曲线,其实前面部分更加重要,所以前面高,后面低的模型要比前面低,后面高的模型要更优。所以面积感觉不如曲线更好。

dev这个从train里面随机划分吧。或者不用dev,只用test,大部分文章都是这样实验的。
此外,远程监督下的曲线,其实前面部分更加重要,所以前面高,后面低的模型要比前面低,后面高的模型要更优。所以面积感觉不如曲线更好。

这个能稍微解释下吗?因为在我的理解中,PR图左上角那部分其实不重要(zeng2015的文章也探讨了PCNN开始突然下降的原因,是false negative的问题),我更倾向看recall在0.3-0.4左右时的precision,大致比较模型优异。其实,对于用PR图评价远程监督数据上的模型优劣,我一直不是很明白为什么。但目前也没看到过有人用其他更好的指标来评价远程监督数据上的模型。

关系抽取是为了抽取出三元组关系来。 因此precision 应该更重要,曲线后面部分的precision已经很低了,参考意义不大。所以大部分论文都要比较一个Top N。
远程监督这边的评价指标就说服力不太够,经常被审稿人diss...

谢谢,收获不少