综述
1Introduce a new task: Machine Translation
介绍机器翻译任务。
2.Introduce a new neural architecture: sequence-to-sequence
介绍神经网络结构:序列到序列。该结构的一个主要用例就是机器翻译。
3.Introduce a new neural technique: attention
介绍神经网络技术:注意力机制。该技术主要用于改进序列到序列网络的效果。
第一部分 机器翻译
机器翻译(MT)是将句子x从一种语言(源语言)转换为另一种语言(目标语言)的句子y的任务。
演变过程
1950年:主要通过规则,把俄文单词和英文单词进行匹配。
1990年-2010年:基于统计的机器翻译(SMT)。思想很简单,在给定句子x的前提下,使目标翻译P(y|x)最大时y的值。根据公式转换之后便变成了两部分模型,使P(x|y)最大的翻译模型和使P(y)最大语言模型。
其中a是对齐方式,即源句子x和目标句子y之间的词级对应。因为我们无法直接获取到x和y的对应数据,所以需要一个词对齐的任务,即引入a。
Alignment,对齐是翻译的句子对中特定单词之间的对应关系。
对齐其实也是非常复杂的任务,可能对齐是多对一,可能是多对多,甚至有些东西难以有对应内容。
所以,传统任务训练使P(x,a|y)最大化的任务包含了多个概率的训练,包括:
Probability of particular words aligning (also depends on position in sent) 特定单词对齐的概率(还取决于发送的位置)
Probability of particular words having particular fertility (number of corresponding words) 具有特定奇怪词的特定单词的概率(对应单词的数量)
etc. 等等
并且对齐单词a在数据中其实一般都不会被标识出来。
列举所有的y是不现实的,所以,19年视频回答是使用启发式搜索方法,并且进行剪枝(舍弃低概率的假设),20年课件是在模型中强加强烈的独立性假设,对全局最优解使用动态规划(例如Viterbi算法)。
19年
20年
https://www.zhihu.com/question/20136144
看到这里,大家应该也能明白为什么传统机器学习的方式会被舍弃的原因了吧。他最大的问题就在于每个语言对都需要不停的研究验证。
首先它本身是个非常庞大的研究领域,并且越好的系统就越复杂。
Hundreds of important details we haven’t mentioned here 非常多没有提及的细节问题
Systems had many separately-designed subcomponents 系统需要有很多独立设计的子组件
Lots of feature engineering 非常多的特征工程
Need to design features to capture particular language phenomena
Require compiling and maintaining extra resources 需要编译和维护额外资源
Like tables of equivalent phrases
Lots of human effort to maintain 需要许多人持续努力
Repeated effort for each language pair!
第二部分 神经网络Seq2Seq
相对于统计机器翻译(Statistical Machine Translation SMT),神经机器翻译(Neural Machine Translation NMT)是使用神经网络进行机器翻译的一种方法。
神经网络架构称为序列到序列(sequence-to-sequence seq2seq),早期的时候它只涉及两个RNN。
(注意所有的输入都是经过embedding的词向量,并且需要分别维护输入、输出语言的词汇表)
当然,seq2seq不仅可以用于机器翻译,在其他任务上同样非常有用。包括任何从一个序列转化到另一个序列的都可以使用。
? Summarization (long text → short text) 文本摘要
? Dialogue (previous utterances → next utterance) 对话
? Parsing (input text → output parse as sequence) 解析,但是不推荐这个模型
? Code generation (natural language → Python code) 代码生成
本质上,seq2seq模型是条件语言模型的一个例子。
说是语言模型是因为解码器是在预测目标句子的下一个词,说是条件受限是因为预测受限于原始输入。即下图所示:
The sequence-to-sequence model is an example of a Conditional Language Model.
? Language Model because the decoder is predicting the next word of the target sentence y
? Conditional because its predictions are also conditioned on the source sentence x
那么,请问如何训练呢?如下图所示:(每个语言都有对应的embedding)
J是下一个单词的负对数似然。即那么大的词表进行多分类的交叉熵。
大家能不能看出训练时会存在什么问题?
这里是上面的问题的一个回答:
没错,就是如果你训练时出现<END>标记之后后面的序列都丢失了,此时计算损失不是有问题了么,助教的回答是到<END>即结束,仅这部分计算loss。
之后就是逐渐在这个大框架下进行改进。
首先考虑到之前,我们是获取每个输出中使句子概率最大的一个词作为一个输出和下个时间的输入,这种模式被称为贪心解码。
最大的问题是他不能回溯,或者说所有贪心算法的通病,陷入了局部最优解。
如何改进呢?其实和之前改进SMT思路有些类似,改进搜索方法。
1.穷举搜索解码,明显是不现实的。
2.波束搜索解码
核心思想:在解码器的每个步骤上,跟踪k个最可能的部分转换(我们称为假设)其中,k是波束大小(实际上是5到10左右),他虽然同样不能获取最优解但是比穷举实用多了。
相对于贪心解码而言,波束搜索会在不同的时间产生<END>即有多个完整的假设,但对于未完成的假设我们仍让需要去给个结束条件,不能无休止的假设下去。
结束条件包括达到预先设定的最大时间步数或者至少有n个已经完成的假设。
但是查看上图示例,如果仅获取得分最高的假设的话,其实很容易发现一个问题,就是越短的假设越容易被选中,因为他们的得分始终是较低的。所以会按句子长度进行归一化。
课外知识小讲堂
贪心搜索、穷举搜索、波束搜索其实统称为确定解码算法。确定性解码算法就是当输入文本固定之后,解码出来的输出文本也是固定的。
也就是后续发展中还出现了随机解码算法。随机解码算法就是哪怕输入文本固定了,解码出来的输出文本也不是固定的。可能有人问了,我结果都不能确定,那输出还有个屁用,其实不是的,就像翻译任务,很多其实没有标准答案的。下面是三种随机解码算法的简介。
原生随机解码很简单,就是每步按概率随机采样一个token,比如第一步算p(y1|y0,x),然后按概率随机采样一个token,比如c;然后第二步算p(y2|y0,c,x),接着按概率随机采样一个token,比如a;那么第三步就算p(y3|y0,c,a,x),再按概率随机采样;...;依此类推,直到采样到<eos>停止。
top-k随机解码出自文章《Hierarchical Neural Story Generation》,其实就是在原生随机解码基础上加了个截断:每一步只保留概率最高的k个token,然后重新归一化后再采样,这样做是希望在“得分高”和“多样性”方面做一个折中。显然,当k=1时,其实就等价于贪心搜索。
Nucleus随机解码则来自文章《The Curious Case of Neural Text Degeneration》,跟top-k随机解码类似,也是对采样空间做了个截断,截断方式是:固定p∈(0,1),然后只保留概率最高的、概率和刚好超过p的若干个token,所以它也叫top-p采样。
NMT的优缺点(相对于SMT)
优点:
更好的表现,包括更流利的输出,更好的使用上下文,更好的使用短语的相似性。
端到端的优化的单个神经网络,无需单独优化子组件。
所需的人工工作量大大减少,没有对齐的工程,并且不受语言对的限制。
缺点:
解释性差,通病,不知道为什么失败不知道为什么成功。在MT任务中更为明显。
难以控制,无法在内部预置规则,比如和道德相关之类的内容云云。
评估方法
BLEU (Bilingual Evaluation Understudy)
知道有就行,具体就不解释和介绍了,差不多是人工翻译和机器翻译在n-gram上的相似度匹配,但翻译这种东西,本身也说不准的。
从下图可以看出NMT发展的迅速,很快就超过了SMT数年的积淀,这也是SMT被淘汰的体现。
很多问题
看着很美好,但是实际情况是仍然存在一堆的问题待解决。
词表外的词汇。专业领域知识。长文本相关问题。资料稀缺的语种。习语、俚语的翻译问题。并且训练时会存在偏见。奇奇怪怪难以解释的翻译。
所以说,NMT是NLP的旗舰任务,因为对于这方面的研究在其他任务上带来了许多创新性的思考,除了一些把RNN结构替换成LSTM等之外,还有一个不可或缺的改进点就是:注意力机制(Attention)
第三部分 Attention
回顾原模型,其中一个非常大的问题就是信息的丢失,因为我们只用了编码器最后的输出作为解码器的输入。但是按理来说,我们要尽可能多的提供原句信息,并且众所周知,通过RNN之后,时间步越久之前的信息丢失就会越严重。
所以,Attention机制最大的作用是提供了解决信息瓶颈的一个解决方案,并且这个方法可以用到多个NLP任务中。
核心思想:在解码器的每个步骤上,使用与编码器的直接连接来关注源序列的特定部分。
Core idea: on each step of the decoder , use direct connection to the encoder to focus on a particular part of the source sequence.
详细方程式,和图中说明并无二致。
注意力机制的优势
显著提高NMT性能,让编码器专注于原数据的部分信息。这点其实我本人也是存疑的。
解决之前所说的信息瓶颈的问题,但是对于长文本其实还是效果不佳。
有助于解决梯度消失问题,就是越远的文本反向传播的梯度对其影响越小,导致梯度消失问题。
提高了模型的可解释性,因为通过观察注意力权重分布可以感知到当前时间步关注的是原数据的什么内容,约等于我们得到了一个软对齐的结果,相当于模型自己学习了对齐方式。这是非常关键的一点。
另外,注意力机制其实是一个非常通用的技术。其本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射。
变体
注意力机制的变体主要都是在计算score得分上的式子进行改变,从而改变后续的概率分布。
第一种就是基础版,也就是上文介绍的。
第二种引入新的权重矩阵,维度大小为d2*d1,d2是解码器输出维度,d1是编码器输出维度,这是为了防止编码和解码维度不同无法进行点积操作。
第三种更复杂,还引入新的超参d3。和公式一致。
课外知识
出自论文《Attention is All You Need》
scaled dot-Product attention,缩放点积,相比于传统点积多了一个K起到调节作用,使得内积不至于太大。
Multi-head attention,多头,Query,Key,Value首先进过一个线性变换,然后输入到放缩点积attention,注意这里要做h次,其实也就是所谓的多头,每一次算一个头。而且每次Q,K,V进行线性变换的参数W是不一样的。然后将h次的放缩点积attention结果进行拼接,再进行一次线性变换得到的值作为多头attention的结果。