资源链接:https://www.bilibili.com/video/BV1r4411
本节课主要介绍了机器翻译、seq2seq to seq2seq和注意力机制。
机器翻译(MT)是将一个句子x从一种语言( 源语言 )转换为另一种语言( 目标语言 )的句子y的任务,如下图:
始于1950s,主要是俄语->英语,起因是冷战,系统主要是基于规则的,使用双语词典来讲俄语单词映射为对应的英语部分
P(x|y):翻译模型,分析单词和短语应该如何翻译,从并行数据中学习
P(y):语言模型,模型如何写出好英语,从单语数据中学习。之前也讲解过语言模型/ML
既然ML已经学过了/了解了,那么就是讨论翻译模型了~
如何学习翻译模型?
首先,需要大量的并行数据(例如成对的人工翻译的法语/英语句子)
其次,我们实际上想需要考虑P(x,a|y),其中a是对齐,即法语句子x和英语句子y之间的单词级对应关系
对齐是翻译句子中特定词语之间的对应关系,如下图所示:
注意:有些词是没有对应词的
对其是复杂的,可以多对一,一对多,多对多,一对一~如下图s所示:
学习P(x,a|y)是许多因素导致的,包括:
首先我们思考:我们可以列举所有可能的 y 并计算概率。但是这样代价太大了,几乎不可行
正确答案:使用启发式搜索算法搜索最佳翻译,丢弃概率过低的假设,这个过程称为解码
SMT是一个巨大的研究领域
如何形容NMT出现对机器翻译世界带来的影响呢?如下图:
注意:此图显示了测试时行为 -> 解码器输出作为下一步的输入
具体说一下sequence-to-sequence 模型,该模型是序列到序列的意思,输入一段不等长序列然后生成一段不等长序列,之前我们计算时都是等长的序列生成下一个词,实际上不等长的才是应用最多的~
虽然有点夸张哈·~但是确实许多领域都可以用Sequence-to-sequence,例如:
问题 :如何培训NMT系统?
答案 :找一个大的平行语料库(所谓平行语料库就是平行语料库(Parallel Corpus)是指将源语文本及其译语文本进行检索并对照显示的语料库)
Seq2seq作为一个单一的系统被优化。反向传播运行在“端到端”中
我们了解了如何生成(或“解码”)目标句子,通过对解码器的每个步骤使用 argmax,这就是贪婪解码,过程如下图所示:
这种方法存在一些问题:最大的问题就是没法回溯(还有一点就是思想是局部最优解,不一定是全剧最优解),如下图所示:(are翻译错了,但是没法返回到第二步)
穷举搜索解码
理想情况下,我们想要找到一个(长度为 T )的翻译 y 使其最大化,我们可以尝试计算所有可能的序列 y,这意味着在解码器的每一步 t ,我们遍历个可能的部分翻译,其中 V 是 vocab 大小,但是这种的复杂性太高了!
束搜索解码
核心思想 :在解码器的每一步,跟踪 k 个最可能的部分翻译(我们称之为 hypotheses 假设 ,类似一种剪枝思想) ,k是Beam的大小(人为设定的,实际中大约是5到10)
假设 y1,y2,...,yt有一个分数,即它的对数概率,分数都是负数,分数越高越好,我们寻找得分较高的假设,跟踪每一步的 top k 个部分翻译
虽然束搜索不一定能找到最优解,但比穷举搜索效率高得多
假设k=2,如下图所示,每次生成选取最大的和第二大的(因为k=2嘛,如果k=n则同一层选前n个最大的进行生成)再继续生成
我们有完整的假设列表
如何选择得分最高的?
我们列表上的每个假设y1,y2,...,yt都有一个分数
假设参考语言模型,使用下述公式:
在此基础上,确实有道理,但是存在一个很严重的问题,就是较长的假设的评分会非常低,所以我们需要进行按长度标准化/平均化
优势:
更好的性能
更流利
更好地使用上下文
更好地使用短语相似性
单个神经网络端到端优化
没有子组件需要单独优化
对所有语言对使用相同的方法(SMT如果创建其他翻译系统,几乎是重新做)
劣势:
NMT的可解释性较差,难以调试
NMT很难控制,例如,不能轻松指定翻译规则或指南,存在安全问题
(其实就是因为神经网络类似一个黑盒,我们不知道其如何解释、生成的,也很难为他制定规则等)
用BLEU /Bilingual Evaluation Understudy/进行评价
假定人工给出的译文为,机器翻译的译文为。
1、早起的BLEU算法
存在的问题:
如果一文为:the cat is on the tree,翻译结果:tree tree tree tree tree tree,tree,那么BLEU=1,这明显不合理的~
2、改进的算法 — 分子截断计数
上述早起算法,存在问题主要体现在分子上,所以对分子作如下改进:
其中,,但一般情况下reference可能会有多个,,例如上述样例中的the,因此有
(简单理解就是看翻译结果在译文中出现的次数,但是对于同一个单词来说,只计算一次,且最大值如果超过在译文中该词数量,则令其为译文中该词出现的最大次数)
例如:上述例子结果BLEU=1/7,如果翻译结果为:the the the the the the the,则BLEU=2/7
3、继续改进的算法 — 引入−
在上面我们一直谈的都是对于单个单词进行计算(相当于1−),1−可以描述翻译的充分性,即逐字翻译的能力,但不能关注翻译的流畅性和上下文语义,因此引入了−,在这里一般不大于4。引入−后的公式如下:
很多时候在评价一个系统时会用多条来评价,因此上面式子中引入了一个候选集合。中的即−中的n。
接下来简单的理解下上面的式子,首先来看分子:
再来看分母,前两个∑和分子中的含义一样,(−′)表示−′在中的计数。
再进一步来看,实际上分母就是中−的个数,分子是出现在中的中−的个数。
举一个例子来看看实际的计算:
则结果为:
4、补充BLEU内容-添加对句子长度的乘法因子
在翻译时,若出现译文很短的句子时往往会有较高的BLEU值,因此引入对句子长度的乘法因子,其公式如下:
在这里c表示cadinate的长度,r表示reference的长度。将上面的整合在一起,得到最终的表达式:
5、存在的问题
意思就是:可能翻译的很好(语义接近),但是翻译结果的词在译文中所占很少
神经机器翻译于2014年从边缘研究活动到2016年成为领先标准方法
这是非常令人震撼的,由数百名工程师历经多年打造的SMT系统,在短短几个月内就被少数工程师训练过的NMT系统超越。
NMT是NLP深度学习的核心任务
上述的机器翻译过程中,我们可以发现Encoder RNN中输入到Decoder RNN更类似于橙色的那块,也就是最后一个词,而且根据RNN传递规则我们知道,输入到Decoder RNN中的更倾向于后面词语的内容,而不是前面的~而机器翻译则需要捕获全文信息~
注意力机制为上述问题提供了一个解决方案
核心理念 :在解码器的每一步,使用 与编码器的直接连接 来专注于源序列的特定部分
首先我们将通过图表展示,然后我们将用方程展示
将解码器部分的第一个结点与源语句中的每一个时间步的隐藏状态进行 Dot Product 得到每一时间步的分数
通过softmax将分数转化为概率分布,在这个解码器时间步长上,我们主要关注第一个编码器隐藏状态(“he”)
连接的注意力输出与解码器隐藏状态 ,然后用来计算,后续过程同上,具体过程如下:
上述讲的感觉不是很明白...结合一下动手学习深度学习的内容来理解下~
(这一部分我也没接触过,直接截取翻译版本的课件内容了)
(这个内容以后如果感兴趣的可以再详细了解~)