NPL实践系列:9、Attention原理

1. Attention机制由来

编码器-解码器 (Encode-Decode) 结构在许多领域较其他的传统模型方法都取得了更好的结果。这种结构的模型通常将输入序列编码成一个固定长度的向量表示,对于长度较短的输入序列而言,该模型能够学习出对应合理的向量表示。然而,这种模型存在的问题在于:当输入序列非常长时,模型难以学到合理的向量表示
使用传统编码器-解码器的RNN模型先用一些LSTM单元来对输入序列进行学习,编码为固定长度的向量表示;然后再用一些LSTM单元来读取这种向量表示并解码为输出序列。
采用这种结构的模型在许多比较难的序列预测问题(如文本翻译)上都取得了最好的结果,因此迅速成为了目前的主流方法。
然而,它存在一个问题在于:输入序列不论长短都会被编码成一个固定长度的向量表示,而解码则受限于该固定长度的向量表示。
这个问题限制了模型的性能,尤其是当输入序列比较长时,模型的性能会变得很差,例如,在文本翻译任务上表现为待翻译的原始文本长度过长时翻译质量较差。
由此,Attention机制被引入进来,它的基本思想,打破了传统编码器-解码器结构在编解码时都依赖于内部一个固定长度向量的限制。
Attention机制的实现是通过保留LSTM编码器对输入序列的中间输出结果,然后训练一个模型来对这些输入进行选择性的学习并且在模型输出时将输出序列与之进行关联。
换一个角度讲,输出序列中的每一项的生成概率取决于在输入序列中选择了哪些项。
在文本翻译任务上,使用attention机制的模型每生成一个词时都会在输入序列中找出一个与之最相关的词集合。之后模型根据当前的上下文向量 (context vectors) 和所有之前生成出的词来预测下一个目标词。
它将输入序列转化为一堆向量的序列并自适应地从中选择一个子集来解码出目标翻译文本。

2.Attention Model 原理

Attention Model其实模拟的是人脑的注意力模型,举例来说,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但是在我们深入仔细地观察时,其实眼睛聚焦的就只有很小的一块,这个时候人的大脑主要关注在这一小块图案上,也就是说这个时候人脑对整幅图的关注并不是均衡的,是有一定的权重区分的。这就是深度学习里的Attention Model的核心思想。

AM(即Attention model)刚开始也确实是应用在图像领域里的,AM在图像处理领域取得了非常好的效果!于是,就有人开始研究怎么将AM模型引入到NLP领域。最有名的当属“Neural machine translation by jointly learning to align and translate”这篇论文了,这篇论文最早提出了Soft Attention Model,并将其应用到了机器翻译领域。
所谓Soft Attention Model,即是指,在求注意力分配概率分布的时候,对于输入句子X中任意一个单词都给出个概率,是个概率分布。
有Soft AM,对应也有Hard AM。Soft是给每个单词都赋予一个单词对齐概率,那么如果不这样做,直接从输入句子里面找到某个特定的单词,然后把目标句子单词和这个单词对齐,而其它输入句子中的单词硬性地认为对齐概率为0,这就是Hard Attention Model的思想。Hard AM在图像里证明有用,但是在文本里面用处不大,因为这种单词一一对齐明显要求太高,如果对不齐对后续处理负面影响很大。
但是,斯坦福大学的一篇paper“Effective Approaches to Attention-based Neural Machine Translation”提出了一个混合Soft AM 和Hard AM的模型,论文中,他们提出了两种模型:Global Attention Model和Local Attention Model,Global Attention Model其实就是Soft Attention Model,Local Attention Model本质上是Soft AM和 Hard AM的一个混合。
Global AM其实就是soft AM,Decoder的过程中,每一个时间步的Context vector需要计算Encoder中每一个单词的注意力权重,然后加权得到。
Local AM则是首先找到一个对其位置,然后在对其位置左右一个窗口内来计算注意力权重,最终加权得到Context vector。这其实是Soft AM和Hard AM的一个混合折中。

3. HAN的原理(Hierarchical Attention Networks)

HAN(Hierarchical Attention Networks)即多重注意力网络模型。网络结构如图所示,网络可以被看作为两部分,第一部分为词“注意”部分,另一部分为句“注意”部分。整个网络通过将一个句子分割为几部分(例如可以用“,”讲一句话分为几个小句子),对于每部分,都使用双向RNN结合“注意力”机制将小句子映射为一个向量,然后对于映射得到的一组序列向量,我们再通过一层双向RNN结合“注意力”机制实现对文本的分类。
NPL实践系列:9、Attention原理_第1张图片

3. Attention模型进行文本分类

待续。。。

参考博客:
https://www.cnblogs.com/shixiangwan/p/7573589.html
https://blog.csdn.net/mpk_no1/article/details/72862348
https://blog.csdn.net/qq_24305433/article/details/80427159

你可能感兴趣的:(python,机器学习,NPL)