论文地址:
https://www.aclweb.org/anthology/D19-1098.pdf
介绍
之前其实有很多工作将句法信息融入到了RNN中,例如ON-LSTM和PRPN,用来隐式建模句法结构信息,同时提升语言模型的准确率。本文尝试将句法信息融入到Transformer中,用来赋予attention更好的解释性。同时可以无监督的预测出句子的句法树,并且相比于一般的Transformer,语言模型的性能有所提高。
模型结构
上面这张是模型结构,最主要的区别就是在multi-head attention操作基础上新增了一个成分的attention,用来表示一段span能否构成一个短语。比如上图中,“cute dog”构成一个短语,所以第0层中这两个单词的attention较大。而“the cute dog”构成了一个更大的短语,所以第1层中“the”和“dog”的attention较大。
回顾self-attention的操作,主要是计算两个单词的向量点积:
这里 。但是在本文中,新增加了一个成分先验 C ,其中 表示 和 在一个短语内的概率。然后与原来的self-attention做元素乘即可:
注意不同的head之间共享 C 。
那么这个成分先验 C 怎么算呢?这里把它拆成若干相邻单词在同一短语内概率的乘积。也就是定义 在同一短语内的概率,那么 就可以表示为:
这样只有 中所有单词都有较大概率在同一短语中, 取值才比较大。当然在实现中会取对数,来避免数值太小。
那么问题又来了, a 怎么算?首先类似self-attention,计算相邻两个单词属于同一短语的得分:
注意这里区分了方向,也就是还存在得分 ,并且两者虽然意义是一样的,但是分数不一定相同。为了防止出现一种问题,也就是所有得分全部相同,然后算出来概率全是1,那就没有意义了,所以要给得分加上限制,也就是归一化。这里选择归一化一个单词和左右邻居两者的得分:
然后由于 值不一样,所以取平均:
这样的话,如果两个相邻单词互相之间连接的概率很大,就会导致 很大,也就说明了这两个单词大概率属于同一个短语。
从第一张模型图中可以看到,成分attention不只计算了一层。低层可以用来表示两两相邻单词之间属于同一短语的概率,而高层可以表示属于更大的短语的概率。注意还得满足一个性质,也就是如果两个单词在低层大概率属于同一个短语,那他们高层肯定更大概率属于一个更大的短语。所以计算方式如下:
初始化的时候 都设为0。这样对于每一层都可以得到一个成分先验 。
无监督句法分析