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的。

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

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

解码器是采用贪婪的算法生成目标单词的。在解码器的每一步取argmax最大可能性的那个单词。这个方法有什么问题吗?

问题就是:

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

穷举搜索解码

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

我们可以计算出所有可能的y,这意味着在解码器的每一个阶段t,我们计算Vt种可能的翻译,V是词汇表的长度。

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

定向搜索解码

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

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

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

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

在贪心搜索中,通常是产生<end>标识符就停止搜索。在定向搜索中,不能的假设会在不同的阶段产生<end>标识符,当产生了end标识符,就停止搜索,也可以设置成完成了n个可能的假设之后就停止。

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

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

解决办法:标准化:

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

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

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

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

神经机器翻译的劣势:

可解释性差,难以调试

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

如何评价机器翻译?

BLEU:Bilingual Evaluation Understudy

BLEU比较把机器翻译结果和人工翻译结果进行比较,基于以下模型计算相似度分数:

n-gram 精度

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

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

有许多有效的办法来翻译一个句子,所以好的翻译可能BLEU的得分比较低,因为与人类翻译没有重复的地方。

机器翻译还存在的问题:

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

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

有些语言的语料库比较少

等等。

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

其中一个是注意力机制.

 

第三部分:注意力机制

神经机器翻译的瓶颈:

从编码器的最后一个状态获取所有源句子的信息,也就是说解码器关于信息的来源只有编码器的最后一个状态,这样没有办法获取的关于句子的完整信息。

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

在解码器的每个阶段,与编码器的每个阶段直接连接,如下图所示,采用了点乘。

如将解码器的第一个阶段与编码器的每个阶段进行点乘,计算出分数,使用softmax得到一个分布,如下面的例子中发现he的分数最高,因此解码器的第一个阶段将会更多的关注he这个阶段提供的信息,结合这个信息生成了he。

其他单词的生成也是采用类似的做法。有时候也会使用前一个阶段的注意力结果来生成当前阶段的单词。

步骤:

  1. 有编码器的隐藏层状态h1,...hn
  2. 在阶段t,有解码器的隐层状态st,通过以下式子获得注意力分数:
  3. 使用softmax函数来获得注意力分布at,at是一个向量,和为1
  4. 通过at和隐层状态的乘积,再求和获得注意力输出at。
  5. 最终将注意力输出at和解码器的隐层状态st连接起来,像之前的步骤一样处理得到输出y。

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

  1. 提高了神经机器翻译的性能:使得解码器专注于源的某一个部分
  2. 解决了之前提到的瓶颈问题:允许解码器直观的看到源
  3. 对解决梯度消失问题有帮助:直接与距离较远的状态相连
  4. 提供了一些可解释性:
  • 通过注意力分布,我们能看到解码器更关注编码器的什么部分
  • 自己学习单词翻译之间的对齐方式

注意力机制的定义:

给定一组向量vectors,和一个查询向量query,注意力机制是一种根据query计算vectors的权重和。在上面的例子中编码器的隐层状态hi就是vectors,解码器的隐层状态si就是query。

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章