入门自然语言处理(自然语言处理-第十五期-Attention)
上一期有解释到Attention Mechanism的本质or解决的是什么问题。
简短的回顾下:
首先,在我的NLP系列第十三期提到的最基础Seq2Seq模型中,Encoder将原始文本“转化”为 一个hidden State,然后Decoder将此hidden state“解压”为目标文本;
但是,其问题是,对于较长的句子。仅仅由一个Hidden State,很难生成准确的目标语句;
面对此问题,Attention Mechanism的应对方法是将原始语句中,每个词的Hidden State都作为输入的一部分。并且找出需要重点关注的部分,即需要Attention的部分
但是上期也遗留来一个关键问题,那就是如何自动计算出哪一部分需要重点关注呢?
Attention Mechanism
上一期将Attention Mechanism 概念化成 Dynamic Memory Access(动态记忆获取), Word Alignment(软对齐)的方法。那么接下来将介绍具体如何实现的。
首先,与基础Seq2Seq模型不同的是 Attention Mechanism将Encoder(蓝色部分)的所有Hidden State 都引入到Decoder中来;
那么如下图,当我们需要翻译第二个单词时,我们所拥有的信息是什么呢:
- 上一个红色部分传递过来的Hidden State, Ht-1
- 所有蓝色部分的Hidden State
大家直观就能看出来,当我们翻译第二个单词时,重点需要放在“am”这个单词上。Attention Mechanism的思路也很直接,将 ht-1 分别与蓝色的每个Hidden State 打分(score)。我看到这里时,我有很多疑问。
这个Score 意味着什么? 它到底是对什么打分的呢? 接下来与大家分享下我的思考。
假设我们的例子是要将“I am a student” 翻译成“我是一个学生”
我们对什么打分Score?
- 首先,要回答Score意味着什么,就要看Ht-1 和 Hs 分别是什么? Ht-1(上一个红色框传递来的Hidden State)。看到NLP-13期的朋友可能有印象。当传统Seq2Seq没有Attention Mechanism时,唯一的信息来源就是上一个框框传递来的Hidden State。所以,也可以理解为Ht-1 不仅限但包含了 此位子目标单词的内容。
- Hs 分别代表着蓝色每个框框的Hidden State,即包含每个单词(含语境)的信息;
- 总结下上述两点。Ht-1 包含了“是”这个目标单词的信息;而Hs包含了每个单词的信息,其中有一个单词是“am”
我们打分意味着什么?
知道了Ht-1 和 Hs的意义,那么回到我们的任务 我们需要翻译出“am”这个单词。我们除了拿到Ht-1之外,我们还希望能拿到 “am”对应的Hidden State;
所以打分的意义就是帮助我们找到想要的Hs
Normalization
当我们遵循上图的步骤计算出每个蓝色Hidden State 的Score之后,如下图。
接下来就是将其转化为出现的概率。类似与Softmax的处理。最终如下图2,形成一个按照权重综合的向量。此向量导入到我们的Decoder中去。
总结下
Attention Mechansim的思路是,将Ht-1 与 Enocder中每个Hidden State 打分。然后基于打分的权重制作一个新的Vector。并且将此Vector传递到Deocder中去。那么此时Decoder不但拥有了上一个Sequence传递过来的Hidden State(Ht-1)还拥有了“对应”单词的Hidden State。
这也就达到了我们的目标:在NLP-13期提到了 普通的Seq2Seq仅仅依据一个浓缩整个句子的Hidden State很难“转化”成一个较长的句子。那么,Attention Mechanism 所做到的是,不仅有代表整个句子的Hidden State,还有对应单词的Hidden State。 那么使得翻译更长的句子成为可能。下图是来自于公开课的截图,大家能看到当句子长度增加时,红色部分表现下降明显。而Attention 表现很稳定。
Attention Mechanism Function
上面阐述了Attention Mechanism的思路,但是其中有一个比较重要的点单独拿出来讲。上面讲到了Score,也讲到了Score的意义。但是如何计算Score,公式有哪些呢? 接下来我也与大家分享下我的理解。
我的理解,这个Score类似于“相关性”计算。 这个相关性代表着 “am” 这个单词的Hidden State 与 Ht-1的相关性。
我们可以换个角度理解此相关性。Encoder-Decoder 其实是一个压缩与解压的过程。 假设我们是将“one two three" 翻译成 “一 二 三”。那么Encoder 按照顺序压缩“one two three”最终形成一个Hidden State;然后Decoder 输入Hidden State, 分别解压出“一 二 三”。
并且,解压“一 二 三”的过程并不是同步的,而是一个Hidden State传递的过程。 那么当我们翻译“二”时,我们除了从“一”收到一个Ht-1,我们还应该收到“two”的Hidden State。那么这个Score的相关性,也可以理解成 “压缩中的位子” 与 “解压的位子”的 对齐。
至于具体的公式,有以下几种。其中第一种,就是相乘。两个向量相乘,值越大,某种程度上代表着相关性越高。
其他疑问
有一个问题,我也想了蛮久。转了下牛角尖。可能大家也会遇到,与大家分享下。
我的疑问是,既然是打分。不论是上述三个公式的哪一个。每个Encoder的Hidden State都能计算出一个分数。 如何保证,当我翻译“二”的时候,我能拿到“two”的Hidden State呢? 万一拿到“one”的Hidden State也非常可能的啊。
换句话说,我的疑问是,虽然Attention 给出了方法,但是怎么保证真的能给出“two”的Hidden State呢?
话说这个问题我琢磨了很久。我之前又想歪了。
首先,我们讨论的是机器学习的问题。那么自然会有一个学习的过程;
其次,当Attention 给错Hidden State时,那么最终结果的loss function会比较大。那么还需要通过Gradient Descent降低loss;
然后,Score 是由两个Hidden State 相乘,所以换句话说,Score也是由RNN神经网络中的参数影响的。那么意味着,当Hidde State值变化时,Score也会变化;
然后,神经网络的训练,自然会改变RNN的参数,也自然会改变Score,经过训练下降Loss,也代表着Score越来越准确;
最后,按照神经网络的思路的理解,Score的出现,相当于给了神经网络多一个参数,或者说优化的目标。 训练的过程就是让Score准确的过程。
所以,不应该理解成,Attention 怎么就能够保证 我们能拿到想要的Hidden State。而应该理解成,有了Attention,相当于给了神经网络找到正确Hidden State 一个奖励或者找到错误Hidden State一个处罚。那么,意味着经过训练,Score 会越来越准确。
总结与下期预告本期与大家分享了Attention Mechanism 是如何做到将注意力放到正确的地方。当我翻译“二”的时候,我会取到“two”的hidden state。
其实Attention 的思路很直接,就是将每个Encoder中的Hidden State 与Ht-1 打分。然后基于打分权重将其引入到Decoder中来。 那么理想的效果是,当我需要翻译“二”时,我不仅拥有了之前代表这个Encoder 的Hidden State,也拥有了对应“two”的Hidden State。那么翻译的效率自然会得到提高。
最后,之前感觉Attention Mechanism蛮难的。 但是,实际上还是可以通俗的理解的。并且我看到的代码也不难,因为有很多大神的各种lib。哈哈
下一期,会给大家带来Beam Search。
Beam Search Attention Seq2Seq 基本上就是Google牛逼的神经网络翻译NMT的雏形了。有点小激动的说。。。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com