[标题]
Text Level Graph Neural Network for Text Classification
[代码地址]
https://github.com/LindgeW/TextLevelGNN
(大佬复现的pytorch代码,但效果不佳)
[知识储备]
什么是TextGCN?
目录
一、背景与概览
1.1 相关研究
- CNN
- RNN
- GNN
- 整个语料上建图,图中包含所有单词节点
- 滑动窗口大->内存大
- 边的权重固定,表示能力差
- 模型结构、参数过分依赖于语料
1.2 贡献点
- 给每一篇文章单独建图
- 滑动窗口小->内存小
- 相同的节点表示,以及边的权重全局共享,并更新
- 不依赖于语料
1.3 相关工作
差不多在相关研究中
二、模型
2.1 建图
对于一个text
- l是它的长度
- N是图的所有单词节点
- E是图的所有边,即节点i与以他为中心的2p+1大小的窗口内的其它邻近节点有边相连
- N和E都来自于共享的全局矩阵
- 出现少于k次的边是公共边
2.2 MPM消息传递机制
对于第n个单词
- (3):2p+1个邻近节点(包括它自己)*与它的边权重,在每一维度上取最大
- (4):一个可学习的参数来决定保留多少原来的向量表示(N),保留多少更新过后的向量表示(M),完成更新
2.3 training object
对于一个句子,将其所有单词向量求和,最后映射到输出维度,使用cross entropy loss function
三、实验与评估
- window size/p = 2
- lr = 1e-3
- L2 weight decay = 1e-4
- dropout_p = 0.5
- bs = 32
- early stop = 10
- glove word embeddings
四、结论与个人总结
论文结论
- window size/p = 3左右效果最好
- window size/p = 2(?)的情况下,像比如textgcn中的20,内存小
- 边的权重使用固定的PMI+window size设置成20,效果不好
- 单个句子的max pooling换成mean pooling,效果不好
- 随机初始化所有单词节点的向量表示,效果不好
个人总结
- 和TextING一样,也可以批处理
- 是否和word embedding一样,需要建立edge embedding,即每一条unique的eage都有unique的idx
五、参考
无
六、拓展
下面的对https://github.com/LindgeW/TextLevelGNN的理解和改进的思路。