ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!
本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
机器翻译(MT)是将一个句子 x x x 从一种语言(源语言)转换为另一种语言(目标语言)的句子 y y y 的任务。
机器翻译研究始于20世纪50年代初。
核心想法:从数据中学习概率模型
假设我们正在翻译法语 → 英语
对于给定法语句子 x x x,我们想要找到最好的英语句子 y y y
a r g m a x y P ( y ∣ x ) argmax_yP(y \mid x) argmaxyP(y∣x)
a r g m a x y P ( x ∣ y ) P ( y ) argmax_yP(x \mid y) P(y) argmaxyP(x∣y)P(y)
P ( x ∣ y ) P(x \mid y) P(x∣y):Translation Model / 翻译模型
P ( y ) P(y) P(y):Language Model / 语言模型
问题:如何学习翻译模型 P(x \mid y)?
首先,需要大量的并行数据(例如成对的人工翻译的法语/英语句子)
P ( x , a ∣ y ) P(x,a \mid y) P(x,a∣y)
Examples from: “The Mathematics of Statistical Machine Translation: Parameter Estimation", Brown et al, 1993. http://www.aclweb.org/anthology/J93-2003
有些词很丰富
对齐可以是多对多(短语级)
我们学习很多因素的组合,包括
问题:如何计算argmax
回答:使用启发式搜索算法搜索最佳翻译,丢弃概率过低的假设
Source: ”Statistical Machine Translation", Chapter 6, Koehn, 2009. https://www.cambridge.org/core/books/statistical-machine-translation/94EADF9F680558E13BE759997553CDE5
SMT是一个巨大的研究领域
最好的系统非常复杂
神经机器翻译(NMT)是利用单个神经网络进行机器翻译的一种方法
神经网络架构称为 sequence-to-sequence (又名seq2seq),它包含两个RNNs
编码器RNN生成源语句的编码
源语句的编码为解码器RNN提供初始隐藏状态
解码器RNN是一种以编码为条件生成目标句的语言模型
注意:此图显示了测试时行为 → 解码器输出作为下一步的输入
序列到序列不仅仅对机器翻译有用
许多NLP任务可以按照顺序进行表达
sequence-to-sequence 模型是条件语言模型的一个例子
NMT直接计算 P ( y ∣ x ) P(y \mid x) P(y∣x)
P ( y ∣ x ) = P ( y 1 ∣ x ) P ( y 2 ∣ y 1 , x ) P ( y 3 ∣ y 1 , y 2 , x ) … P ( y T ∣ y 1 , … , y T − 1 , x ) P(y | x)=P\left(y_{1} | x\right) P\left(y_{2} | y_{1}, x\right) P\left(y_{3} | y_{1}, y_{2}, x\right) \ldots P\left(y_{T} | y_{1}, \ldots, y_{T-1}, x\right) P(y∣x)=P(y1∣x)P(y2∣y1,x)P(y3∣y1,y2,x)…P(yT∣y1,…,yT−1,x)
上式中最后一项为,给定到目前为止的目标词和源句 x x x,下一个目标词的概率
问题:如何训练NMT系统?
回答:找一个大的平行语料库
我们了解了如何生成(或“解码”)目标句,通过对解码器的每个步骤使用 argmax
这是贪婪解码(每一步都取最可能的单词)
这种方法有问题吗?
贪婪解码没有办法撤销决定
如何修复?
理想情况下,我们想要找到一个(长度为 T T T )的翻译 y y y 使其最大化
我们可以尝试计算所有可能的序列 y y y
核心思想:在解码器的每一步,跟踪 k k k 个最可能的部分翻译(我们称之为假设[hypotheses ] )
假设 y 1 , … , y t y_1, \ldots,y_t y1,…,yt 有一个分数,即它的对数概率
score ( y 1 , … , y t ) = log P L M ( y 1 , … , y t ∣ x ) = ∑ i = 1 t log P LM ( y i ∣ y 1 , … , y i − 1 , x ) \operatorname{score}\left(y_{1}, \ldots, y_{t}\right)=\log P_{\mathrm{LM}}\left(y_{1}, \ldots, y_{t} | x\right)=\sum_{i=1}^{t} \log P_{\operatorname{LM}}\left(y_{i} | y_{1}, \ldots, y_{i-1}, x\right) score(y1,…,yt)=logPLM(y1,…,yt∣x)=i=1∑tlogPLM(yi∣y1,…,yi−1,x)
分数都是负数,分数越高越好
我们寻找得分较高的假设,跟踪每一步的 top k 个部分翻译
波束搜索 不一定能 找到最优解
但比穷举搜索效率高得多
score ( y 1 , … , y t ) = ∑ i = 1 t log P LM ( y i ∣ y 1 , … , y i − 1 , x ) \operatorname{score}\left(y_{1}, \ldots, y_{t}\right)=\sum_{i=1}^{t} \log P_{\operatorname{LM}}\left(y_{i} | y_{1}, \ldots, y_{i-1}, x\right) score(y1,…,yt)=i=1∑tlogPLM(yi∣y1,…,yi−1,x)
hit
和 was
a
和 me
pie
和 with
a
和 one
pie
在贪心解码中,我们通常解码到模型产生一个 令牌
在集束搜索解码中,不同的假设可能在不同的时间步长上产生 令牌
通常我们继续进行 Beam Search ,直到
我们有完整的假设列表
如何选择得分最高的?
我们清单上的每个假设 y 1 , … , y t y_1, \ldots ,y_t y1,…,yt 都有一个分数
score ( y 1 , … , y t ) = log P L M ( y 1 , … , y t ∣ x ) = ∑ i = 1 t log P LM ( y i ∣ y 1 , … , y i − 1 , x ) \operatorname{score}\left(y_{1}, \ldots, y_{t}\right)=\log P_{\mathrm{LM}}\left(y_{1}, \ldots, y_{t} \mid x\right)=\sum_{i=1}^{t} \log P_{\operatorname{LM}}\left(y_{i} \mid y_{1}, \ldots, y_{i-1}, x\right) score(y1,…,yt)=logPLM(y1,…,yt∣x)=i=1∑tlogPLM(yi∣y1,…,yi−1,x)
问题在于 :较长的假设得分较低
修正:按长度标准化。用下式来选择top one
1 t ∑ i = 1 t log P L M ( y i ∣ y 1 , … , y i − 1 , x ) \frac{1}{t} \sum_{i=1}^{t} \log P_{\mathrm{LM}}\left(y_{i} \mid y_{1}, \ldots, y_{i-1}, x\right) t1i=1∑tlogPLM(yi∣y1,…,yi−1,x)
与SMT相比,NMT有很多优点
更好的性能
单个神经网络端到端优化
需要更少的人类工程付出
SMT相比,NMT的缺点
NMT的可解释性较差
NMT很难控制
BLEU (Bilingual Evaluation Understudy)
BLEU将机器翻译和人工翻译(一个或多个),并计算一个相似的分数
BLEU很有用,但不完美
Source: http://www.meta-net.eu/events/meta-forum-2016/slides/09_sennrich.pdf
神经机器翻译于2014年从边缘研究活动到2016年成为领先标准方法
2014:第一篇 seq2seq 的文章发布
2016:谷歌翻译从 SMT 换成了 NMT
这是惊人的
Further reading: “Has AI surpassed humans at translation? Not even close!” https://www.skynettoday.com/editorials/state_of_nmt
Source: https://hackernoon.com/bias-sexist-or-this-is-the-way-it-should-be-ce1f7c8c683c
Picture source: https://www.vice.com/en_uk/article/j5npeg/why-is-google-translate-spitting-out-sinister-religious-prophecies
Explanation: https://www.skynettoday.com/briefs/google-nmt-prophecies
没有!
许多困难仍然存在
使用常识仍然很难
NMT在训练数据中发现偏差
无法解释的系统会做一些奇怪的事情
NMT是NLP深度学习的核心任务
NMT研究引领了NLP深度学习的许多最新创新
2019年:NMT研究将继续蓬勃发展
注意力为瓶颈问题提供了一个解决方案
核心理念:在解码器的每一步,使用与编码器的直接连接来专注于源序列的特定部分
首先我们将通过图表展示(没有方程),然后我们将用方程展示
将解码器部分的第一个token 与源语句中的每一个时间步的隐藏状态进行 Dot Product 得到每一时间步的分数
通过softmax将分数转化为概率分布
在这个解码器时间步长上,我们主要关注第一个编码器隐藏状态(“he”)
利用注意力分布对编码器的隐藏状态进行加权求和
注意力输出主要包含来自于受到高度关注的隐藏状态的信息
连接的注意力输出与解码器隐藏状态 ,然后用来计算 y ^ 1 \hat y_1 y^1
有时,我们从前面的步骤中提取注意力输出,并将其输入解码器(连同通常的解码器输入)。我们在作业4中做这个。
e t = [ s t T h 1 , … , s t T h N ] ∈ R N e^{t}=\left[s_{t}^{T} \boldsymbol{h}_{1}, \ldots, \boldsymbol{s}_{t}^{T} \boldsymbol{h}_{N}\right] \in \mathbb{R}^{N} et=[stTh1,…,stThN]∈RN
α t = softmax ( e t ) ∈ R N \alpha^{t}=\operatorname{softmax}\left(e^{t}\right) \in \mathbb{R}^{N} αt=softmax(et)∈RN
a t = ∑ i = 1 N α i t h i ∈ R h \boldsymbol{a}_{t}=\sum_{i=1}^{N} \alpha_{i}^{t} \boldsymbol{h}_{i} \in \mathbb{R}^{h} at=i=1∑Nαithi∈Rh
[ a t ; s t ] ∈ R 2 h \left[\boldsymbol{a}_{t} ; \boldsymbol{s}_{t}\right] \in \mathbb{R}^{2 h} [at;st]∈R2h
注意力显著提高了NMT性能
注意力解决瓶颈问题
注意力帮助消失梯度问题
注意力提供了一些可解释性
我们已经看到,注意力是改进机器翻译的序列到序列模型的一个很好的方法
然而:你可以在许多结构(不仅仅是seq2seq)和许多任务(不仅仅是MT)中使用注意力
我们有时说 query attends to the values
例如,在seq2seq + attention模型中,每个解码器的隐藏状态(查询)关注所有编码器的隐藏状态(值)
注意力的更一般定义
直觉
候选值 h 1 , … , h N ∈ R d 1 \boldsymbol{h}_{1}, \ldots, \boldsymbol{h}_{N} \in \mathbb{R}^{d_{1}} h1,…,hN∈Rd1,查询 s ∈ R d 2 s \in \mathbb{R}^{d_{2}} s∈Rd2
注意力总是包括:
α = softmax ( e ) ∈ R N \alpha=\operatorname{softmax}(\boldsymbol{e}) \in \mathbb{R}^{N} α=softmax(e)∈RN
a = ∑ i = 1 N α i h i ∈ R d 1 \boldsymbol{a}=\sum_{i=1}^{N} \alpha_{i} \boldsymbol{h}_{i} \in \mathbb{R}^{d_{1}} a=i=1∑Nαihi∈Rd1
More information: “Deep Learning for NLP Best Practices”, Ruder, 2017. http://ruder.io/deep-learning-nlp-best-practices/index.html#attention
“Massive Exploration of Neural Machine Translation Architectures”, Britz et al, 2017, https://arxiv.org/pdf/1703.03906.pdf
有几种方法可以从 h 1 , … , h N ∈ R d 1 \boldsymbol{h}_{1}, \ldots, \boldsymbol{h}_{N} \in \mathbb{R}^{d_{1}} h1,…,hN∈Rd1 计算 e ∈ R N e \in \mathbb{R}^{N} e∈RN 和 s ∈ R d 2 s \in \mathbb{R}^{d_{2}} s∈Rd2
基本的点乘注意力 e i = s T h i ∈ R \boldsymbol{e}_{i}=\boldsymbol{s}^{T} \boldsymbol{h}_{i} \in \mathbb{R} ei=sThi∈R
乘法注意力 e i = s T W h i ∈ R e_{i}=s^{T} \boldsymbol{W} \boldsymbol{h}_{i} \in \mathbb{R} ei=sTWhi∈R
加法注意力 e i = v T tanh ( W 1 h i + W 2 s ) ∈ R e_{i}=\boldsymbol{v}^{T} \tanh \left(\boldsymbol{W}_{1} \boldsymbol{h}_{i}+\boldsymbol{W}_{2} \boldsymbol{s}\right) \in \mathbb{R} ei=vTtanh(W1hi+W2s)∈R
我们学习了一些机器翻译的历史
自2014年以来,神经机器翻译迅速取代了复杂的统计机器翻译
Sequence-to-sequence 是NMT的体系结构(使用2个RNN)
注意力是一种集中注意力的方法
可以点击 B站 查看视频的【双语字幕】版本
【双语字幕+资料下载】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)