CRIPAC-DIG / TextING

[ACL 2020] Tensorflow implementation for "Every Document Owns Its Structure: Inductive Text Classification via Graph Neural Networks"
180 stars 57 forks source link

注意力机制 #7

Closed 1eclipse closed 4 years ago

1eclipse commented 4 years ago

您好,问一下论文中提到的注意力机制说的是用在图表示上,但是看论文中的公式(6)似乎仍然是在学习节点表示。是我哪里弄错了嘛?希望您能解答。

Magicat128 commented 4 years ago

您好 @1eclipse

是用在图表示上的,这里的图表示为各节点的加权平均,所以注意力的计算是对应节点的。

1eclipse commented 4 years ago

您好,感谢您的回答,但是我还是不太明白。论文中的公式6中sigmoid函数引用了注意力机制,hv是指引入注意力机制后得到的单词表示嘛?如果是这样的话,那我认为是注意力机制学习的单词表示,最后再采用最大池化和平均池化结合的方式学习得到图表示。谢谢~

Magicat128 commented 4 years ago

@1eclipse

是的,公式6是中间步骤,表示加权后的单词。其实就是分开两步来写,可以参考 https://arxiv.org/pdf/1511.05493.pdf 第3.3节。

1eclipse commented 4 years ago

嗯谢谢您。我还有一个问题,在可视化的时候test_doc_embeddings存放的是所有测试集文档的嵌入,它的shape有三个维度,第一个是batchsize,最后一个是隐藏层大小(也就是文本嵌入维度),但是我不太理解第二个维度代表什么?按照这个代码,最后每一个文档的嵌入表示是这样的(?,96),但是实际上应该就是(96)吧?希望您能解答一下,十分感谢! # For visualization print(test_doc_embeddings.shape) doc_vectors = [] for i in range(len(test_doc_embeddings)): doc_vector = test_doc_embeddings[i] doc_vector_str = ' '.join([str(x) for x in doc_vector]) doc_vectors.append(str(np.argmax(test_y[i])) + ' ' + doc_vector_str)

1eclipse commented 4 years ago

我知道了,可视化的话我可能还需要改一下代码,感谢您抽时间回答!

Magicat128 commented 4 years ago

目前产生的是含所有节点的embedding,第二维相当于节点数目。如果用于可视化(或使用整个图的embedding),可以再通过一层ReadoutLayer,去掉最后的MLP即可。

1eclipse commented 4 years ago

恩恩我明白了,谢谢