Advertisement

cs224n 2019 Machine Translation, Sequence-to-sequence and Attention

阅读量:

本节课内容:

介绍一个新的任务:机器翻译

介绍一个新的神经架构:序列到序列的模型

介绍一种新的神经技术:注意力,用于提升序列到序列的模型

第一部分:之前的机器翻译方法

1950s:系统是基于规则实现的,使用一个双语字典进行映射查询

1990s-2010s:基于统计的机器翻译,也叫SMT

主要思想:从数据中学习一个概率模型

假设我们从法语翻译成英语:对于输入的法语x,找到最好的英语翻译y

使用贝叶斯准则把这个概率分解成两部分:

第一部分P(x|y):从平行数据中构建单词和短语应该如何被翻译

在第二部分中讨论的是P(y),它是一种语言模型。例如n-gram模型、循环神经网络(RNN)等技术均可应用于这一领域研究。通过分析和学习单词数据集中的模式与特征, 我们可以训练出能够生成流畅英语文本的能力

如何学习模型P(y|x)呢?

需要大量的平行数据。

我们实际上需要考虑的是:

P(x,a|y)

a是一中对应关系,比如法语句子x和英语句子y之间的单词级对应。

注意:有些单词是没有对应关系的,比如中文的“的”在英语中没有对应的词。

对应关系是复杂的,可能是多对一,一对多,多对多

学习P(x,a|y)是多种因素的结合:

特定单词对齐的概率(也取决于单词的位置)

特定单词有特定含义的概率

我们可以采用穷举的办法计算概率,但是代价太大了。

解决方案:通过启发式的搜索手段寻找最优翻译方案,并放弃概率较低的可能性作为解码过程的一部分。

有巨大的搜索区域

要构建效果最好的系统很复杂。

比如需要做许多特征工程的工作,许多已有成果需要维护等

第二部分:神经机器翻译

神经机器翻译是使用单一的神经网络完成机器翻译。

该神经网络架构也叫序列到序列的模型seq2seq,涉及到两个RNN.

编码器根据源句子产生编码

解码器RNN是一个生成目标句子的语言模型

编码器为解码器提供了最初的隐层状态。

序列到序列的模型可以应用于多种场景:

  • 摘要抽取
  • 对话系统
  • 句子解析
  • 代码生成

神经机器翻译是一个条件语言模型的例子。

说它是语言模型是因为解码器预测了目标句子的下一个单词

说它是条件是因为它的预测是基于源句子x的。

如何训练一个神经机器翻译系统呢?

在解码器生成目标单词时计算计算损失,将损失加起来。

该解码器基于贪婪算法生成目标单词,在每一步中选择具有最大可能性的那个单词。是否存在问题?

问题就是:

没办法返回上一步,重新作出决策。

穷举搜索解码

理想情况下 ,我们找到一个翻译y最大化以下式子。

通过计算能得到所有的y值,则表明在解码器的每个时间步t中

O(Vt)的复杂度代价太大了!

定向搜索解码

思想:在解码器的每个阶段,追踪k个最有可能的翻译,我们把它称为假设。

每个假设y1,y2,y3...,yt都有一个分数

分数都是负数的,分数越高越好。

每次搜索计算所有的分数,取前k个最好的分数,其他的丢弃。

在贪心算法执行过程中,默认情况下程序会在生成标记时立即终止整个搜索流程。而针对定向搜索系统,则会采用更为灵活的方式,在多个阶段允许尚未完全确定的情况生成相应的标记,并且一旦出现标记就会导致整个过程终止。此外,在实际应用中可以选择根据需求设定最多处理n个潜在情况后再完成整个操作流程

在定向搜索中我们是如何获得分数的呢?

产生的问题:越长的假设分数越低。

解决办法:标准化:

比起数据统计机器翻译,神经机器翻译有很多优势:

  • 更好的性能
  • 更流畅
  • 更有效的利用上下文
  • 更好的利用句子的相似性

一个单独的神经网络是被端到端优化的,没有一个子组件被单独优化。

需要更少的人力:不需要特征工程,统一方法可以应用于所有的语言模型

神经机器翻译的劣势:

可解释性差,难以调试

难控制,比如对于翻译很难应用规则和指导

如何评价机器翻译?

BLEU:Bilingual Evaluation Understudy

基于BLEU指标的比较方法用于机器翻译输出与人工翻译输出的对比分析,在此过程中通过以下模型计算两者的相似度分数

n-gram 精度

为太短的系统翻译增加惩罚。

BLEU指标是有用的但是也是不完美的。

存在多种高效的方法用于将一个句子进行机器翻译。因此,在机器翻译中获得高BLEU分数通常意味着其结果与人类翻译存在显著差异。

机器翻译还存在的问题:

超出词汇表之外的单词没办法翻译

训练数据和测试数据不匹配

有些语言的语料库比较少

等等。

2019年,神经机器翻译又有了新的突破。

其中一个是注意力机制.

第三部分:注意力机制

神经机器翻译的瓶颈:

通过编码器的最终输出来收集所有原始句子的数据;这表明解码器仅能依据编码器最终的状态来推断信息来源;从而导致无法准确捕获每个句子的信息细节。

注意力机制提供了一个解决方案:

在解码器各个阶段之间通过点对点连接,并参考下图所示内容,在计算过程中采用了点积运算

通过将解码器的第一阶段与编码器的所有阶段进行点乘运算,计算出对应的分数值,并经过Softmax函数处理后得到一个概率分布。观察到在这些例子中,在解码器第一层处理后输出的各个词汇中,在注意力机制的作用下会分配不同的权重系数。从而使得解码器的第一层能够更加注重接收的信息来自编码器第一层,并据此生成最终输出中的he。

其他单词的生成采用了类似的策略。有时候也会应用前一阶段注意力的结果来生成当前阶段的单词。

步骤:

  1. 由编码器生成的隐藏层的状态为h₁,…, hₙ。
  2. 在时间阶段t中,解码器在时间阶段t中的隐层状态s_t基于下述公式计算得到注意力分数。
  1. 使用softmax函数来获得注意力分布at,at是一个向量,和为1
  1. 基于at与隐层状态相乘得到的总和就是注意力输出at。
  2. 在最后阶段将注意力输出at与解码器的隐层状态st进行融合运算,并按照类似的流程进行操作以生成最终的输出y。

注意力机制是一种很好的办法

  1. 显著提升了神经机器翻译性能,并使解码器专注于输入文本中的特定部分。
  2. 突破了传统模型难以处理的问题,并让解码器能够直接观察到输入内容。
  3. 有助于解决梯度消失的问题,并通过与较远状态建立直接连接来实现。
  4. 提供了一些可解释性

借助注意力机制的分布情况,我们可以识别出解码器在哪些位置上更为注重编码器的不同区域。

注意力机制的定义:

假设有一组向量集合vectors以及一个查询向量query,在这些情况下注意力机制的作用是通过将query与各个vectors进行对比来赋予权重。在这些案例中解码器的状态si对应于编码器的状态hi,在这些情况下编码器的状态hi则直接对应于输入中的原始信息。

关于e的计算不只有点乘,还有其他方法:

全部评论 (0)

还没有任何评论哟~