论文发表在2018 ACL上,论文地址:https://arxiv.org/abs/1805.02473
本篇文章主要详细叙述了该论文的主要内容,全部都由自己总结,若文章有地方不正确或与读者想法不一致,欢迎在评论区中提出讨论.
AMR与AMR-to-Text Generation
AMR(Abstract Meaning Representation):a semantic formalism that encodes the meaning of a sentence as a rooted, directed graph.
AMR-to-Text Generation:to recover a text representing the same meaning as an input AMR graph.
sequence-to-sequence model
对AMR图作深度优先遍历,获得一个序列v1, . . . , vN,N为tokens的个数,例如上述AMR图的例子遍历后的序列为:“describe :arg0 ( person :name ( name :op1 ryan ) ) :arg1 person :arg2 genius”. (PS:我们可以看到,在AMR原图上“describe” and “genius”直接相连,而在序列上的距离为14)
我们需要计算每一个token vj的representation,方法有两个:
1.直接使用word embedding:
ej为token vj的word embedding;
2.为了减轻数据稀疏性问题并获得更好的单词表示作为输入,作者还可以对token的字符characters采用了正向LSTM,然后和word embedding作concatenate操作:
Encoder
S2S的encoder是一个双向LSTM,对于每一步j来说:
Decoder
S2S的Decoder使用了attention-based LSTM;
attention memory A以及每一个attention vector aj定义如下:
这里引入两个向量:
the previous context vector µt−1, which is calculated with attention from A
the previous coverage vector γt−1, which is the accumulation of all attention distributions so far
对于LSTM的每一步t,输入为当前输入的word embedding et 以及一个上一时刻的context vector µt−1,得到hidden state St,然后计算attention probability αt,i,如下:
接着更新coverage vector γt:
αt可以理解为所有token在t时刻(token vt)此时的attention分布信息,用一个向量表示.
更新context vector µt:
此时刻t的ouput probability distribution:
用到的是St以及µt.
这样,t时刻就可以得到一个Pvocab,概率向量中最大的vocabulary即为该时刻输出的word,最后可以输出一个序列w1, w2, . . . , wM.
graph-to-sequence model
与baseline中的sequence-to-sequence model不同,论文提出用graph-to-sequence model直接对图结构建模而不进行序列化.
The graph encoder
对于图G = (V, E),用hidden state vector hj 表示每个节点 vj ∈ V. 整个图就可以表示为:
经过一系列的graph state transition,我们可以得到graph states g0, g1, . . . , gt, . . . .
Input representation
g0时,所有节点的初始化states为h0,即对于所有节点j:
这里的h0为hyperparameter.
除了节点有representation外,还定义了图的edge representation,有两种方法:
其中el和ei分别表示edge label l和源节点vi的word embeeding,方法二即式(7)表示可以对节点i的word的字符characters采用正向LSTM,然后再作concatenate,与上面的(1)(2)类似,注意edge的representation不会随着t变化.
State transition
对于节点j,第t层,先计算出:
这里针对边的方向分为incoming和outgoing,这里其实就是一个对邻居的聚合,可以看作用的是一种sum aggregation.
接着我们需要用这四个关键信息去计算:
上面的操作就是在图上针对节点使用LSTM,使用了input gate,output gate,forget gate,使用上述的state transition,每个步骤之后,每个节点的信息都会传播到其所有相邻节点,经过多层的state transition,就可以得到每个节点的输出hj.
Decoder
graph-to-sequence的decoder使用和s2s的一样,都有两个小地方需要改变:
上面的式子(3)(4)中的aj需要更改为:
用的是encoder得到的每个节点j的representation(last state).(但笔者不理解的是这里的xj代表什么,是表示连接j节点的所有边的representation加起来吗,如果有懂的同学可以在下面评论留言哦)
另一个不一样的地方是decoder的initial state s−1 是graph encoder所有节点的hj的平均.
2020.03.19