RowitZou / LGN

EMNLP-2019 paper: A Lexicon-based Graph Neural Network for Chinese NER.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于添加unk边的问题

Maybewuss opened this issue · comments

一不小心把上一个issue关闭了。
因为具体实现时,每一个graph都加入了一条unk的边。对于一个没有边连接的孤立结点,在aggregation阶段,key和value就是unk边。unk边在aggregation阶段,key和value是所有结点。

我想问一下,为什么要加这个unk的边呢,这不是和全局节点冲突了吗?

unk边的加入是为了处理孤立结点的aggregation实现问题。模型是用multi-head attention来做aggregation的,如果一个结点没有边与之连接,在做attention的时候就没有key和value,如果分开处理就不利于batch化计算,所以加入了unk边。

之前有一点没说清楚,其实unk边是不会参与迭代的,每一个step使用的unk向量都相同,参考 model/LGN.py 的340行,index为0的unk向量直接保留到下一个step的迭代。至于aggregation阶段unk边也参与计算,只是为了batch计算方便,不起到任何作用。

所以unk边不和全局结点冲突。全局结点在每一次迭代都会更新,并且它的信息也会被其他结点和边用到。unk边只起到作为孤立结点临时边的作用。

谢谢