前记

现在的深度学习中,特别是在NLP领域里面,几乎attention已经成为了每个模型的标配,因为attention模型在序列建模上面有着天然的优势,能够将注意力集中到特定的部分。

1 Attention的提出

在这里插入图片描述

​ 在机器翻译(NMT)的任务中,为解决RNN中的Encoder-Decoder的基础上target端输入固定长度的问题,提出了Align方式,这也是Attention的开始。这篇paper中,它将输入句子编码成一系列向量,并在解码翻译时自适应地选择这些向量的子集。 这使得神经翻译模型不必将源句的所有信息(无论其长度)压缩成固定长度的矢量。
其模型的结构图如下:

这篇文章是在RNN-Encoder-Decoder基础上,对source端输入到target端的sequence做了处理。得到target端的token与source端的token能够有多对一或者一对多的方式。

例如:source端句子1:我出生于中国,并热爱着这片土地。target端句子2:I was born in China and love this land. 对齐的方式是希望相关词的权重大于无关词之间的权重,如source端的’我’与target端的’I’之间的权重大于与其他词之间的权重。
在机器翻译任务中,希望source端和target端句子内对应字词之间可以相互对应或者之间的联系可以大于其他,即source端与target端相互对应的字词之间的权重更大。在文本分类问题中,希望输入的文本得到训练后可以更多注意哪些能够代表类别的句子或者词语,给这些词语更大的权重,以提高分类的效果,这一点有些与情感分析类似,但情感分析会更需要掌握整个句子或者文本的情感走向,以得到整体的情感倾向,而不仅仅是个别字词或者句子。

2.Attention 分类

1)全局注意力机制

在这里插入图片描述

这种注意力模型,张俊林博士之前有了介绍,这种可以理解为soft attention,即是上文提到的align.通常的解释是指attention的计算权重与source端和target端所有的隐藏向量相关。其结构及其部分公式如图:

如上面提到的NMT任务中,要将

source:我喜欢吃冰淇淋
target:I like eating ice-cream.

在这种模式下,在翻译  的时候,需要计算与target中每个词对齐的程度,即和哪个词最相关。

2)局部注意力机制

局部注意力机制,是指attention的计算权重与source端和target端部分的隐藏向量相关。其结构及其部分公式如图:

在这里插入图片描述

如果在没有对比这个图和上面的图的情况下,局部注意力和全局注意力是看不出来区别的,但是实际情况下,相差还是比较大的。他们的不同在于计算的公式,**局部注意力机制计算出将哪些隐藏单元纳入计算的attention权重中去,较之全局注意力机制,多了一层计算。**多算的那一个部分在ptp_tpt​那个部分…

3)自注意力机制(self-attention)

self-attention最早是Google在《Attention is all you need》中提出来的,但是个人感觉《A Decomposable Attention Model for Natural Language Inference》这篇文章在写的时候更加能够能让人理解。但是Google的光芒实在是太大了(两篇文章都是值得去研究一下)。self-attention 模型结构图如下:

在这里插入图片描述

Self-Attention与传统Attention机制的不同:传统的Attention有source端和target端的隐变量(hidden state)计算Attention,得到的结果是源端的每个词与目标端每个词之间的依赖关系。self-attention,可以看做是在target=source的情况下来计算attention;这种attention方式能够有效获取源端或目标端自身词与词之间的依赖关系。
说到了self-attention,那么就不得不提一下transformer了,transformer现在在NLP界是热火朝天,BERT、XLnet模型的核心都是使用的transformer.我们可以先看一下transformer的模型结构图:

在这里插入图片描述

是不是能一下子就能看到self-attention的影子?这里的multi-head attention就是多层attention的叠加。可见transformer的本质还是self-attention。

那么self-attention这么火,能不能用通俗的话来解释一下呢?我觉得最简单的解释的话就是:self-attention能够帮我们注意到整个句子提供的信息,而不仅仅是某个方向的。

4)层级注意力机制

在NLP界中,Hierarchical这个词正在释放越来越多的魅力。本人之前有幸看了关于ON-LSTM的结构,发现对LSTM进行分层计算的方式真的是太美妙了。能够最大程度的上的保留重要的信息,而对之前一些不太重要的进行慢慢忘记的方式让人难以忘记。现在很多论文都是在采用层级结构,这能为我们处理数据更加方便,有层次.

说远了,主题硬拉回中…

层级注意力机制是指模型计算多层的注意力,其结构如图:

在这里插入图片描述

在该架构中,自注意力机制使用了两次:在词层面与句子层面。该方法因为两个原因而非常重要,首先是它匹配文档的自然层级结构(词——句子——文档)。其次在计算文档编码的过程中,它允许模型首先确定哪些单词在句子中是非常重要的,然后确定哪个句子在文档中是非常重要的。

2 HAN的原理

HAN是在《Hierarchical Attention Networks for Document Classification》此文中提出,paper中的模型架构如图:

在这里插入图片描述

这种方式就是利用上面所涉及到的层次attention作为基础,总体的架构都是采用同一种方式,流程如图片右侧:

word encoder ->word attention ->sentence encoder ->sentence attention->softmax

文章中提出的HAN(Hierarchical Attention Networks)是指先对word Encoder进行计算attention权重,将得到的句子内重要的字词构成sentence,作为输入,并计算attention,进而得到文本内容中重要的句子。其思想本质是,对于一篇文本而言,其中的一些句子可能是十分重要的,而对于一些句子而言某些词语也是十分关键的,因此,那么对应的是,句子中重要的字词构成的句子,文本中重要的句子构成的文本,就在一定程度上能够表达文本整体的信息了。

3 利用Attention模型进行文本分类

​ 此处用“Hierarchical Attention Networks for Document Classification”中的attention处理IMDB数据集。

可参见 github

Reference

Hierarchical Attention Networks for Document Classification

Attention Is All You Need

放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较

深度学习中的注意力机制

HAN for classification

HAN for classification

科学空间(苏剑林) Attention is all you need 解读

PS:谷歌在arxiv发了一篇论文名字教Attention Is All You Need,提出了一个只基于attention的结构来处理序列模型相关的问题,比如机器翻译。传统的神经机器翻译大都是利用RNN或者CNN来作为encoder-decoder的模型基础,而谷歌最新的只基于Attention的Transformer模型摒弃了固有的定式,并没有用任何CNN或者RNN的结构。该模型可以高度并行地工作,所以在提升翻译性能的同时训练速度也特别快。 原文地址:https://arxiv.org/abs/1706.03762

相关阅读博客:http://blog.csdn.net/zchang81/article/details/78425114


on the way to be a Electrical Engineer & Designer......