自然语言处理(十)

1. 基本的Attention原理。

最基本的seq2seq模型包含一个encoder和一个decoder,通常的做法是将一个输入的句子编码成一个固定大小的state,然后作为decoder的初始状态(当然也可以作为每一时刻的输入),但这样的一个状态对于decoder中的所有时刻都是一样的。
自然语言处理(十)
attention即为注意力,人脑在对于的不同部分的注意力是不同的。需要attention的原因是非常直观的,比如,我们期末考试的时候,我们需要老师划重点,划重点的目的就是为了尽量将我们的attention放在这部分的内容上,以期用最少的付出获取尽可能高的分数;再比如我们到一个新的班级,吸引我们attention的是不是颜值比较高的人?普通的模型可以看成所有部分的attention都是一样的,而这里的attention-based model对于不同的部分,重要的程度则不同。
Attention-based Model其实就是一个相似性的度量,当前的输入与目标状态越相似,那么在当前的输入的权重就会越大,说明当前的输出越依赖于当前的输入。严格来说,Attention并算不上是一种新的model,而仅仅是在以往的模型中加入attention的思想,所以Attention-based Model或者Attention Mechanism是比较合理的叫法,而非Attention Model。

1.1模型的介绍

对于机器翻译来说,比如我们翻译“机器学习”,在翻译“machine”的时候,我们希望模型更加关注的是“机器”而不是“学习”。那么,就从这个例子开始说吧(以下图片均来自上述课程链接的slides)
自然语言处理(十)
attention其实就是一个当前的输入与输出的匹配度。在上图中,即为h1和z0的匹配度( h1为当前时刻RNN的隐层输出向量,而不是原始输入的词向量,z0初始化向量,如rnn中的initial memory,图片中的这一部分是encode的部分 ),其中的match为计算这两个向量的匹配度的模块,出来的α10即为由match算出来的相似度。好了,基本上这个就是attention-based model 的attention部分了。那么,match什么呢? 对于“match”, 理论上任何可以计算两个向量的相似度都可以,比如:
余弦相似度
一个简单的 神经网络,输入为h 和w,输出为α
或者矩阵变换α=h^T Wz

这里有一个问题:就是如果match用后面的两种,那么参数应该怎么学呢?其实这些都是可以BP的时候就可以自动学到的。比如我们明确输出是什么,在第一时刻的时候,那就会调整z^0 和 c^0 的值,进而就会调整所有的α 值,之前说过α 是match的输出,如果match是后两种的话,就会进而调整match中的参数。图片中的左半部分是encode,右面部分是decode,

自然语言处理(十)
公式如下
自然语言处理(十)
自然语言处理(十)

2. HAN的原理(Hierarchical Attention Networks)。

自然语言处理(十)

整个网络结构包括五个部分:
1)词序列编码器
2)基于词级的注意力层
3)句子编码器
4)基于句子级的注意力层
5)分类
整个网络结构由双向GRU网络和注意力机制组合而成,具体的网络结构公式如下:
1)词序列编码器
给定一个句子中的单词w it ,其中 i 表示第 i 个句子,t 表示第 t 个词。通过一个词嵌入矩阵 We,将单词转换成向量表示,具体如下所示:
自然语言处理(十)
利用双向GRU实现的整个编码流程
自然语言处理(十)
2)词级的注意力层
但是对于一句话中的单词,并不是每一个单词对分类任务都是有用的,比如在做文本的情绪分类时,可能我们就会比较关注“很好”、“伤感”这些词。为了能使循环神经网络也能自动将“注意力”放在这些词汇上,作者设计了基于单词的注意力层的具体流程如下:
自然语言处理(十)
上面式子中,uit 是 hit 的隐层表示,ait是经 softmax 函数处理后的归一化权重系数,uw是一个随机初始化的向量,之后会作为模型的参数一起被训练,si 就是我们得到的第 i 个句子的向量表示。
3)句子编码器
也是基于双向GRU实现编码的,其流程如下:
自然语言处理(十)
公式和词编码类似,最后的 hi 也是通过拼接得到的.
4)句子级注意力层
注意力层的流程如下,和词级的一致:
自然语言处理(十)
最后得到的向量 v 就是文档的向量表示,这是文档的高层表示。接下来就可以用可以用这个向量表示作为文档的特征。
5)分类
使用最常用的softmax分类器对整个文本进行分类了
自然语言处理(十)
代码参考:
https://github.com/THTBSE/rnn_text_classification/blob/master/model.py

参考:
1.https://blog.****.net/u014665013/article/details/82619808
2.https://blog.****.net/chen_yiwei/article/details/88648508