先简单记录一下基础的知识点,阅读完综述《Attention, please! A Critical Review of Neural Attention Models in Natural Language Processing》后会更新。
1、Attention 简介
Attention可以理解为一种文本聚焦的方法,基本思想是对单词的embedding分配不同的权重,把注意力集中在相关的文本内容上。
参考《Attention is All You need》的定义:假设在t步时,有一个query向量,有一系列key向量和value向量,attention机制首先设计匹配函数,计算query与每个key向量的匹配程度得到权重,将权重归一化后与对应value相乘后加权求和。
2、Attention 种类划分
2.1 按计算区域划分:
1)Soft Attention(也可以叫Global Attention),这是比较常见的Attention方式,query与所有key放入匹配函数求权重,每个key都有一个对应的权重,是一种全局的计算方式。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。
2)Hard Attention,这种方式是直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。
3)Local Attention,这种方式其实是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。
2.2 所用信息
1)General Attention。key与value是由原文得出,query用了外部的信息。例如阅读理解和文本匹配,要对两段文本进行对其,另一段文本的信息作为query。
2)Local Attention。只对一段文本采用attention,就是key、value和query都是根据同一段文本生成的,常用于文本分类,在阅读理解和文本匹配中也有使用,用于发掘一段文本间不同单词的相互联系。
2.3 层次结构
1)单层Attention,比较普遍的做法,就是用query对原文的key和value做attention。
2)多层Attention,做多层的attention,例如想得到一个文档的向量,先对各个句子做attention得到句子的向量,再对句子向量做attention得到文档的向量。
3)多头Attention,来自Transformer(《Attention is All You Nedd》)的multi-head attention,就是query对原文并行进行了多次attention,每个attention采用不同的参数,相当于以不同的角度关注原文,然后叠加各个attention的结果。
3 匹配函数
4 模型分析
Attention一般用在CNN和LSTM上,也有纯Attention结构的Transformer。
CNN提取的是局部的信息,忽略了长距离的依赖,在文本任务上的编码能力不如LSTM,但是因为卷积提取特征是相互独立的,所以有良好的并行能力。
LSTM能够很好的捕捉长距离的依赖,但是是单方向的,BiLSTM也只是从左右两个方向编码,然后做一个拼接。而且LSTM是串行模型,并行计算能力较差。
Transformer采用纯Attention的结构,能够很好的捕捉上下的信息,且有良好的并行能力。
-
1)CNN+Attention
- a)在卷积前做attention
- b)在卷积后做attention
- c)在pooling层做attention
-
2)LSTM+Attention
- 提取不同的信息做query和key,求出权重后对不同step的hidden state求和。
-
3)纯Attention
- 用三个不同的矩阵,使向量生成key、query、value向量,然后每个向量都是attention value的加权求和。
5 任务分析
需要用到attention的场景:
a)长文本任务。文本太长带来信息过载,需要捕捉一些关键信息,例如文本人分类。
b)涉及两段相关的文本。需要对两段文本的内容对齐,例如阅读理解、文本匹配、机器翻译。
一些具体的任务:
1)机器翻译:encoder用于对原文建模,decoder用于生成译文,attention用于连接原文和译文,在每一步翻译的时候关注不同的原文信息。
2)摘要生成:encoder用于对原文建模,decoder用于生成新文本,从形式上和机器翻译都是seq2seq任务,但是从任务特点上看,机器翻译可以具体对齐到某几个词,但这里是由长文本生成短文本,decoder可能需要capture到encoder更多的内容,进行总结。
3)图文互搜:encoder对图片建模,decoder生成相关文本,在decoder生成每个词的时候,用attention机制来关注图片的不同部分。
4)文本蕴含:判断前提和假设是否相关,attention机制用来对前提和假设进行对齐。
5)阅读理解:可以对文本进行self attention,也可以对文章和问题进行对齐。
6)文本分类:一般是对一段句子进行attention,得到一个句向量去做分类。
7)序列标注:Deep Semantic Role Labeling with Self-Attention,这篇论文在softmax前用到了self-attention,学习句子结构信息,和利用到标签依赖关系的CRF进行pk。
8)关系抽取:也可以用到self attention