shenwzh3 / RGAT-ABSA

MIT License
216 stars 51 forks source link

你好,可以下提供最佳性能的参数吗 #4

Closed ROGERDJQ closed 4 years ago

ROGERDJQ commented 4 years ago

你好,我们想引用你们的工作,但是在复现上一直达不到文章中声称的结果。在laptop数据集上,glove+rgat+reshaped tree的结果声称有77.42,但是复现出来最高大约在75。 想问下可以提供下最佳性能的参数吗,另一方面,我们之后也会继续尝试调整参数的,但是尽管一直在尝试,直接给出参数会更快速一些,始终无法复现我们也只能先报告我们实现的结果

shenwzh3 commented 4 years ago

你好,最佳参数在run.sh,无法复现的原因我们认为是cuda版本和pytorch版本不同造成的,毕竟测试集太小,很容易引起随机误差。

qianqiangediao commented 4 years ago

作者您好,看了您的论文和您的代码,我有几个问题想请教您: 1:请问您在 relational graph attetnion network 中是如何体现多头attention的,我在代码中只看到了重复六次的attention 然后cat --> mean 2: 请问j∈Ni Ni 是邻接节点,那么您在求hatt_i 是如何体现的呢,在您的R-Gat-bert中我只看到您拼接了pool_out(方面词embedding),没有看到gan的过程

如果您有时间麻烦您给些提示,谢谢您了

shenwzh3 commented 4 years ago
  1. 根据论文中的公式,多头attention就是将多个attention拼接在一起,所以这里用了cat;至于mean是为了保证在不同的头数量下,最终gat输出的节点特征维度保持一致。可以根据代码注释的维度信息进行理解。
  2. 关于gat_bert中hatt_i的问题,我们在更早版本的论文中,在methodology部分有提到将r-gat-bert中的hatt_i替换为bert cls位置的输出,这是由于本质上transformer的结构也是一个图神经网络,并且直接使用cls的hidden state效果更好,操作也更简洁。但是最终出于提交论文篇幅限制与可读性考虑,我们做了权衡,将这些实现上的细节删除了。当然若您有follow我们的工作,我们十分欢迎您在自己的工作中把这点指出来。

作者您好,看了您的论文和您的代码,我有几个问题想请教您: 1:请问您在 relational graph attetnion network 中是如何体现多头attention的,我在代码中只看到了重复六次的attention 然后cat --> mean 2: 请问j∈Ni Ni 是邻接节点,那么您在求hatt_i 是如何体现的呢,在您的R-Gat-bert中我只看到您拼接了pool_out(方面词embedding),没有看到gan的过程

如果您有时间麻烦您给些提示,谢谢您了

Jhontang commented 4 years ago

作者,您好! 1:根据您的解答:“根据论文中的公式,多头attention就是将多个attention拼接在一起,所以这里用了cat;至于mean是为了保证在不同的头数量下,最终gat输出的节点特征维度保持一致。” 我们还有一个问题,我们认为求平均可能会使得拼接失效,没有达到多头拼接的作用,多头拼接可以保持维度一致的方法较多,比如在实现过程中通过相乘与头数一致的矩阵等,不知您这是否考虑过呢? 2:目前bert的输入是原句子+方面词,那原句子在bert的输出也有方面词,为什么作者要选用拼接后的方面词而不用原句子中的方面词呢?您这样做的目的是有其他考虑是吗?我们暂时还没有理解,如果您方便的话可以分享一下经验吗? 3:根据您的解答:“这是由于本质上transformer的结构也是一个图神经网络,并且直接使用cls的hidden state效果更好,操作也更简洁”用transformer作图卷积的话,依存树的连接信息好像没有起到作用,因为transformer是全连接的self-attention , 这跟您论文中公式1 好像有些出入,也可能我们理解的不到位,所以麻烦您给我们提供些想法,谢谢您! 4:公式3中您的多个头的Wm是如何设置的呢,是否一致呢,我们通过您的代码发现每个头的结果都是一样的,不知是我们复现代码过程中出错了,还是您有其他的用意,所以这里向您询问一下,麻烦您有时间解答一下,谢谢您!

shenwzh3 commented 4 years ago
  1. 我们实验的时候只考虑了mean pooling的方法,没有考虑其他方法。
  2. 这样做是为了让bert能够捕捉aspect和sentence之间的关系特征,也可以考虑直接使用原句中aspect位置的embedding,我们之前版本的论文是使用这种方法,但是表现和实现简洁度都没有直接拼接句子和aspect来的好。
  3. 你的理解没有问题,这边我们由于论文篇幅原因把这点删掉了,结合bert的时候就是直接使用bert的cls替换的h_attn
  4. 我们没有遇到这种情况,不过我建议可以把论文中的多头attention用nn.ModuleList来实现,可能效果更好。

关于论文的问题欢迎直接邮箱联系我:shenwzh3@mail2.sysu.edu.cn

作者,您好! 1:根据您的解答:“根据论文中的公式,多头attention就是将多个attention拼接在一起,所以这里用了cat;至于mean是为了保证在不同的头数量下,最终gat输出的节点特征维度保持一致。” 我们还有一个问题,我们认为求平均可能会使得拼接失效,没有达到多头拼接的作用,多头拼接可以保持维度一致的方法较多,比如在实现过程中通过相乘与头数一致的矩阵等,不知您这是否考虑过呢? 2:目前bert的输入是原句子+方面词,那原句子在bert的输出也有方面词,为什么作者要选用拼接后的方面词而不用原句子中的方面词呢?您这样做的目的是有其他考虑是吗?我们暂时还没有理解,如果您方便的话可以分享一下经验吗? 3:根据您的解答:“这是由于本质上transformer的结构也是一个图神经网络,并且直接使用cls的hidden state效果更好,操作也更简洁”用transformer作图卷积的话,依存树的连接信息好像没有起到作用,因为transformer是全连接的self-attention , 这跟您论文中公式1 好像有些出入,也可能我们理解的不到位,所以麻烦您给我们提供些想法,谢谢您! 4:公式3中您的多个头的Wm是如何设置的呢,是否一致呢,我们通过您的代码发现每个头的结果都是一样的,不知是我们复现代码过程中出错了,还是您有其他的用意,所以这里向您询问一下,麻烦您有时间解答一下,谢谢您!