关于自然语言处理:斯坦福NLP课程-第8讲-机器翻译seq2seq与注意力机制

47次阅读

共计 9193 个字符,预计需要花费 23 分钟才能阅读完成。

作者:韩信子 @ShowMeAI,路遥 @ShowMeAI,奇异果 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/36
本文地址:http://www.showmeai.tech/article-detail/243
申明:版权所有,转载请分割平台与作者并注明出处

珍藏 ShowMeAI 查看更多精彩内容



ShowMeAI 为 斯坦福 CS224n《自然语言解决与深度学习 (Natural Language Processing with Deep Learning)》课程的全副课件,做了 中文翻译和正文,并制作成了 GIF 动图!


本讲内容的 深度总结教程 能够在 这里 查看。视频和课件等材料的获取形式见 文末


引言

概述

  • 引入新工作:机器翻译
  • 引入一种新的神经构造:sequence-to-sequence

    • 机器翻译是 sequence-to-sequence 的一个次要用例
  • 引入一种新的神经技术:注意力

    • sequence-to-sequence 通过 attention 失去晋升

1. 机器翻译与 SMT(统计机器翻译)

1.1 Pre-neural Machine Translation

1.2 机器翻译

机器翻译 (MT) 是将一个句子 \(x\) 从一种语言 ( 源语言 ) 转换为另一种语言 ( 目标语言 ) 的句子 \(y\) 的工作。

1.3 1950s:晚期机器翻译

机器翻译钻研始于 20 世纪 50 年代初。

  • 俄语 → 英语(热战的推动)
  • 零碎次要是 基于规定 的,应用双语词典来讲俄语单词映射为对应的英语局部

1.4 1990s-2010s:统计机器翻译

  • 外围想法 :从 数据 中学习 概率模型

  • 假如咱们正在翻译法语 → 英语

  • 对于给定法语句子 \(x\),咱们想要找到 最好的英语句子 \(y\)

$$
argmax_yP(y \mid x)
$$

  • 应用 Bayes 规定将其合成为 两个组件 从而别离学习

$$
argmax_yP(x \mid y) P(y)
$$

  • \(P(x \mid y)\):Translation Model / 翻译模型

    • 剖析单词和短语应该如何翻译(真切)
    • 从并行数据中学习
  • \(P(y)\):Language Model / 语言模型

    • 模型如何写出好英语(流畅)
    • 从单语数据中学习

1.5 1990s-2010s:统计机器翻译

  • 问题:如何学习翻译模型 P(x \mid y)?
  • 首先,须要大量的 并行数据(例如成对的人工翻译的法语 / 英语句子)

1.6 SMT 的学习对齐

  • 问题:如何从并行语料库中学习翻译模型 \(P(x \mid y)\)?
  • 进一步合成:咱们实际上想要思考

$$
P(x,a \mid y)
$$

  • \(a\) 是对齐
  • 即法语句子 \(x\) 和英语句子 \(y\) 之间的单词级对应

1.7 对齐

Examples from:“The Mathematics of Statistical Machine Translation: Parameter Estimation”, Brown et al, 1993. http://www.aclweb.org/antholo…

  • 对齐是翻译句子中特定词语之间的对应关系

    • 留神:有些词没有对应词

1.8 对齐是简单的

  • 对齐能够是多对一的

1.9 对齐是简单的

  • 对齐能够是一对多的

1.10 对齐是简单的

  • 有些词很丰盛

  • 对齐能够是 多对多(短语级)

  • 咱们学习很多因素的组合,包含

    • 特定单词对齐的概率(也取决于发送地位)
    • 特定单词具备特定多词对应的概率(对应单词的数量)

1.11 SMT 的学习对齐

  • 问题:如何计算 argmax

    • 咱们能够列举所有可能的 \(y\) 并计算概率?→ 计算成本太高

  • 答复 :应用 启发式搜索算法搜寻最佳翻译,抛弃概率过低的假如

    • 这个过程称为 解码

1.12 SMT 解码

Source:”Statistical Machine Translation”, Chapter 6, Koehn, 2009. https://www.cambridge.org/cor…

1.13 SMT 解码

1.14 1990s-2010s:统计机器翻译

  • SMT 是一个 微小的钻研畛域

  • 最好的零碎 非常复杂

    • 数以百计的重要细节咱们还没有提到
    • 零碎有许多 独立设计子组件工程
    • 大量特色工程

      • 很多性能须要设计个性来获取特定的语言景象
    • 须要编译和保护 额定的资源

      • 比方双语短语对应表
    • 须要 大量的人力 来保护

      • 对于每一对语言都须要反复操作

2. 神经网络机器翻译

2.1 Neural Machine Translation

2.2 神经机器翻译(NMT)

2.3 神经机器翻译(NMT)

  • 神经机器翻译 (NMT) 是利用单个神经网络进行机器翻译的一种办法
  • 神经网络架构称为 sequence-to-sequence (又名 seq2seq),它蕴含两个 RNNs

2.4 神经机器翻译(NMT)

  • 编码器 RNN 生成源语句的编码
  • 源语句的编码为解码器 RNN 提供初始暗藏状态
  • 解码器 RNN 是一种以编码为条件生成指标句的语言模型
  • 留神:此图显示了测试时行为 → 解码器输入作为下一步的输出

2.5 Sequence-to-sequence 是多功能的!

  • 序列到序列不仅仅对机器翻译有用

  • 许多 NLP 工作能够依照程序进行表白

    • 摘要(长文本 → 短文本)
    • 对话(前一句话 → 下一句话)
    • 解析(输出文本 → 输入解析为序列)
    • 代码生成(自然语言 → Python 代码)

2.6 神经机器翻译(NMT)

  • sequence-to-sequence 模型是条件语言模型的一个例子

    • 语言模型(Language Model),因为解码器正在预测指标句的下一个单词 \(y\)
    • 条件束缚的(Conditional),因为预测也取决于源句 \(x\)

  • NMT 间接计算 \(P(y \mid 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)
$$

  • 上式中最初一项为,给定到目前为止的指标词和源句 \(x\),下一个指标词的概率

  • 问题:如何训练 NMT 零碎?
  • 答复:找一个大的平行语料库

2.7 训练一个机器翻译零碎

  • Seq2seq 被优化为一个繁多的零碎。反向流传运行在“端到端”中

3. 机器翻译解码

3.1 贪心解码

  • 咱们理解了如何生成 (或“解码”) 指标句,通过对解码器的每个步骤应用 argmax

  • 这是 贪心解码(每一步都取最可能的单词)
  • 这种办法有问题吗

3.2 贪心解码的问题

  • 贪心解码没有方法撤销决定
  • 如何修复?

3.3 穷举搜寻解码

  • 现实状况下,咱们想要找到一个 (长度为 \(T\) ) 的翻译 \(y\) 使其最大化

  • 咱们能够尝试计算 所有可能的序列 \(y\)

    • 这意味着在解码器的每一步 \(t\),咱们跟踪 \(V^t\)个可能的局部翻译,其中 \(V\) 是 vocab 大小
    • 这种 \(O(V^T)\) 的复杂性 太低廉 了!

3.4 集束搜寻解码

  • 核心思想 :在解码器的每一步,跟踪 \(k\) 个 最可能 的局部翻译 (咱们称之为 假如[hypotheses] )

    • \(k\) 是 Beam 的大小(理论中大概是 5 到 10)

  • 假如 \(y_1, \ldots,y_t\) 有一个 分数,即它的对数概率

$$
\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)
$$

  • 分数都是正数,分数越高越好
  • 咱们寻找得分较高的假如,跟踪每一步的 top k 个局部翻译

  • 波束搜寻 不肯定能 找到最优解
  • 但比穷举搜寻 效率高得多

3.5 集束搜寻解码:示例

  • Beam size = k = 2
  • 蓝色的数字是

$$
\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)
$$

  • 计算下一个单词的概率分布
  • 取前 \(k\) 个单词并计算分数

    • 对于每一次的 \(k\) 个假如,找出最后面的 \(k\) 个单词并计算分数
    • 在 \(k^2\) 的假如中,保留 \(k\) 个最高的分值

      • \(t = 2\) 时,保留分数最高的 hitwas
      • \(t = 3\) 时,保留分数最高的 ame
      • \(t = 4\) 时,保留分数最高的 piewith
      • \(t = 5\) 时,保留分数最高的 aone
      • \(t = 6\) 时,保留分数最高的 pie
  • 这是最高得分的假如
  • 回溯以取得残缺的假如

3.6 集束搜寻解码:进行判据

  • 在贪婪解码中,咱们通常解码到模型产生一个 <END> 令牌

    • 例如:<START> he hit me with a pie <END>

  • 在集束搜寻解码中,不同的假如可能在 不同的工夫步长 上产生 <END> 令牌

    • 当一个假如生成了 <END> 令牌,该假如 实现
    • 把它放在一边,通过 Beam Search 持续摸索其余假如

  • 通常咱们持续进行 Beam Search,直到

    • 咱们达到工夫步长 \(T\) (其中 \(T\) 是预约义截止点)
    • 咱们至多有 \(n\) 个已实现的假如(其中 \(n\) 是预约义截止点)

3.7 集束搜寻解码:实现

  • 咱们有残缺的假如列表
  • 如何抉择得分最高的?

  • 咱们清单上的每个假如 \(y_1, \ldots ,y_t\) 都有一个分数

$$
\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)
$$

  • 问题在于:较长的假如得分较低
  • 修改:按长度标准化。用下式来抉择 top one

$$
\frac{1}{t} \sum_{i=1}^{t} \log P_{\mathrm{LM}}\left(y_{i} \mid y_{1}, \ldots, y_{i-1}, x\right)
$$

3.8 神经机器翻译 (NMT) 的长处

与 SMT 相比,NMT 有很多 长处

  • 更好的 性能

    • 更流畅
    • 更好地应用上下文
    • 更好地应用短语相似性

  • 单个神经网络 端到端优化

    • 没有子组件须要独自优化

  • 须要 更少的人类工程付出

    • 无特色工程
    • 所有语言对的办法雷同

3.9 神经机器翻译 (NMT) 的毛病

SMT 相比,NMT 的 毛病

  • NMT 的 可解释性较差

    • 难以调试

  • NMT 很 难管制

    • 例如,不能轻松指定翻译规定或指南
    • 平安问题

4. 机器翻译评估

4.1 如何评估机器翻译品质

  • BLEU (Bilingual Evaluation Understudy)

    • 你将会在 Assignment 4 中看到 BLEU 的细节

  • BLEU 将机器翻译和人工翻译(一个或多个),并计算一个类似的分数

    • n-gram 精度 (n 通常为 1 -4)
    • 对过于短的机器翻译的加上惩办

  • BLEU 很 有用 ,但 不完满

    • 有很多无效的办法来翻译一个句子
    • 所以一个 好的 翻译能够失去一个蹩脚的 BLEU score,因为它与人工翻译的 n -gram 重叠较低

4.2 MT 随时间推移的提高

Source: http://www.meta-net.eu/events…

4.3 NMT:NLP 深度学习的最大胜利案例

神经机器翻译于 2014 年从 边缘钻研流动 到 2016 年成为 当先规范办法

  • 2014:第一篇 seq2seq 的文章公布
  • 2016:谷歌翻译从 SMT 换成了 NMT

  • 这是惊人的

    • 由数百名工程师历经多年打造的 SMT 零碎,在短短几个月内就被多数工程师训练过的 NMT 零碎超过

4.4 机器翻译问题完满解决了吗?

Further reading:“Has AI surpassed humans at translation? Not even close!”https://www.skynettoday.com/e…

Source: https://hackernoon.com/bias-s…

Picture source: https://www.vice.com/en_uk/ar…

Explanation: https://www.skynettoday.com/b…

  • 没有!

  • 许多艰难依然存在

    • 词表外 的单词解决
    • 训练和测试数据之间的 畛域不匹配
    • 在较长文本上保护上下文
    • 资源较低 的语言对

  • 应用常识依然很难
  • NMT 在训练数据中发现偏差
  • 无法解释的零碎会做一些奇怪的事件

4.5 NMT 钻研仍在持续

  • NMT 是 NLP 深度学习的 外围工作
  • NMT 钻研引领了 NLP 深度学习的许多最新 翻新
  • 2019 年:NMT 钻研将持续蓬勃发展

    • 钻研人员发现,对于咱们明天介绍的一般 seq2seq NMT 零碎,有很多、很多的改良
    • 但有一个改良是如此不可或缺

5. 注意力机制

5.1 Attention

5.2 Sequence-to-sequence:瓶颈问题

  • 源语句的编码
  • 须要捕捉对于源语句的所有信息
  • 信息瓶颈!

5.3 注意力

  • 注意力 为瓶颈问题提供了一个解决方案

  • 核心理念 :在解码器的每一步,应用与 编码器的间接连贯 来专一于源序列的 特定局部

  • 首先咱们将通过图表展现(没有方程),而后咱们将用方程展现

5.4 带注意力机制的序列到序列模型

  • 将解码器局部的第一个 token <START> 与源语句中的每一个工夫步的暗藏状态进行 Dot Product 失去每一时间步的分数

  • 通过 softmax 将分数转化为概率分布
  • 在这个解码器工夫步长上,咱们次要关注第一个编码器暗藏状态(“he”)

  • 利用 注意力散布 对编码器的暗藏状态进行 加权求和
  • 注意力输入次要蕴含来自于受到 高度关注 暗藏状态 的信息

  • 连贯的 注意力输入 解码器暗藏状态,而后用来计算 \(\hat y_1\)
  • 有时,咱们从后面的步骤中提取注意力输入,并将其输出解码器(连同通常的解码器输出)。咱们在作业 4 中做这个。

5.5 注意力:公式

  • 咱们有编码器暗藏状态 \(h_{1}, \ldots, h_{N} \in \mathbb{R}^{h}\)
  • 在工夫步 \(t\) 上,咱们有解码器暗藏状态 \(s_{t} \in \mathbb{R}^{h}\)
  • 咱们失去这一步的留神分数

$$
e^{t}=\left[s_{t}^{T} \boldsymbol{h}_{1}, \ldots, \boldsymbol{s}_{t}^{T} \boldsymbol{h}_{N}\right] \in \mathbb{R}^{N}
$$

  • 咱们应用 softmax 失去这一步的留神散布 \(\alpha^{t}\) (这是一个概率分布,和为 1)

$$
\alpha^{t}=\operatorname{softmax}\left(e^{t}\right) \in \mathbb{R}^{N}
$$

  • 咱们应用 \(\alpha^{t}\) 来取得编码器暗藏状态的加权和,失去注意力输入 \(\alpha^{t}\)

$$
\boldsymbol{a}_{t}=\sum_{i=1}^{N} \alpha_{i}^{t} \boldsymbol{h}_{i} \in \mathbb{R}^{h}
$$

  • 最初,咱们将留神输入 \(\alpha^{t}\) 与解码器暗藏状态连接起来,并依照非留神 seq2seq 模型持续进行

$$
\left[\boldsymbol{a}_{t} ; \boldsymbol{s}_{t}\right] \in \mathbb{R}^{2 h}
$$

5.6 注意力很棒!

  • 注意力显著进步了NMT 性能

    • 这是十分有用的,让解码器专一于某些局部的源语句

  • 注意力解决 瓶颈问题

    • 注意力容许解码器间接查看源语句;绕过瓶颈

  • 注意力 帮忙隐没梯度问题

    • 提供了通往边远状态的捷径

  • 注意力 提供了一些可解释性

    • 通过查看注意力的散布,咱们能够看到解码器在关注什么
    • 咱们能够收费失去 (软) 对齐
    • 这很酷,因为咱们素来没有明确训练过对齐零碎
    • 网络只是自主学习了对齐

5.7 注意力是一种广泛的深度学习技巧

  • 咱们曾经看到,注意力是改良机器翻译的序列到序列模型的一个很好的办法

  • 然而:你能够在 许多构造 (不仅仅是 seq2seq) 和许多工作 (不仅仅是 MT) 中应用注意力

  • 咱们有时说 query attends to the values
  • 例如,在 seq2seq + attention 模型中,每个解码器的暗藏状态 (查问) 关注所有编码器的暗藏状态(值)

5.8 注意力是一种广泛的深度学习技巧

  • 注意力的更个别 定义

    • 给定一组向量 和一个向量 查问,注意力是一种依据查问,计算值的加权和的技术

  • 直觉

    • 加权和是值中蕴含的信息的 选择性汇总,查问在其中确定要关注哪些值
    • 留神是一种获取 任意一组示意 (值) 的固定大小示意的办法,依赖于其余一些示意(查问)。

5.9 有几种注意力的变体

  • 候选值 \(\boldsymbol{h}_{1}, \ldots, \boldsymbol{h}_{N} \in \mathbb{R}^{d_{1}}\), 查问 \(s \in \mathbb{R}^{d_{2}}\)

  • 注意力总是包含:

    • 计算 注意力得分 \(e \in \mathbb{R}^{N}\) (很多种计算形式)
    • 采取 softmax 来取得 注意力散布 \(\alpha\)

$$
\alpha=\operatorname{softmax}(\boldsymbol{e}) \in \mathbb{R}^{N}
$$

  • 应用注意力散布对值进行加权求和:从而失去注意力输入 \(\alpha\) (有时称为上下文向量)

$$
\boldsymbol{a}=\sum_{i=1}^{N} \alpha_{i} \boldsymbol{h}_{i} \in \mathbb{R}^{d_{1}}
$$

5.10 注意力的变体

More information:“Deep Learning for NLP Best Practices”, Ruder, 2017. http://ruder.io/deep-learning…
“Massive Exploration of Neural Machine Translation Architectures”, Britz et al, 2017, https://arxiv.org/pdf/1703.03…

  • 有几种办法 能够从 \(\boldsymbol{h}_{1}, \ldots, \boldsymbol{h}_{N} \in \mathbb{R}^{d_{1}}\) 计算 \(e \in \mathbb{R}^{N}\) 和 \(s \in \mathbb{R}^{d_{2}}\)

  • 根本的点乘注意力 \(\boldsymbol{e}_{i}=\boldsymbol{s}^{T} \boldsymbol{h}_{i} \in \mathbb{R}\)

    • 留神:这里假如 \(d_1 = d_2\) [这是咱们之前看到的版本]

  • 乘法注意力 \(e_{i}=s^{T} \boldsymbol{W} \boldsymbol{h}_{i} \in \mathbb{R}\)

    • \(\boldsymbol{W} \in \mathbb{R}^{d_{2} \times d_{1}}\) 是权重矩阵

  • 加法注意力 \(e_{i}=\boldsymbol{v}^{T} \tanh \left(\boldsymbol{W}_{1} \boldsymbol{h}_{i}+\boldsymbol{W}_{2} \boldsymbol{s}\right) \in \mathbb{R}\)

    • 其中 \(\boldsymbol{W}_{1} \in \mathbb{R}^{d_{3} \times d_{1}}, \boldsymbol{W}_{2} \in \mathbb{R}^{d_{3} \times d_{2}}\) 是权重矩阵,\(\boldsymbol{v} \in \mathbb{R}^{d_{3}}\) 是权重向量,\(d_3\) (注意力维度)是一个超参数

5.11 课程总结

  • 咱们学习了一些机器翻译的历史
  • 自 2014 年以来,神经机器翻译 迅速取代了简单的统计机器翻译
  • Sequence-to-sequence 是 NMT 的体系结构(应用 2 个 RNN)
  • 注意力 是一种集中注意力的办法

    • 从序列到序列改良了很多

6. 视频教程

能够点击 B 站 查看视频的【双语字幕】版本

7. 参考资料

  • 本讲带学的 在线阅翻页本
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
  • 双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)
  • Stanford 官网 | CS224n: Natural Language Processing with Deep Learning

ShowMeAI系列教程举荐

  • 大厂技术实现 | 举荐与广告计算解决方案
  • 大厂技术实现 | 计算机视觉解决方案
  • 大厂技术实现 | 自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程 | 斯坦福 CS224n 课程 · 课程带学与全套笔记解读

NLP 系列教程文章

  • NLP 教程(1)- 词向量、SVD 合成与 Word2vec
  • NLP 教程(2)- GloVe 及词向量的训练与评估
  • NLP 教程(3)- 神经网络与反向流传
  • NLP 教程(4)- 句法分析与依存解析
  • NLP 教程(5)- 语言模型、RNN、GRU 与 LSTM
  • NLP 教程(6)- 神经机器翻译、seq2seq 与注意力机制
  • NLP 教程(7)- 问答零碎
  • NLP 教程(8)- NLP 中的卷积神经网络
  • NLP 教程(9)- 句法分析与树形递归神经网络

斯坦福 CS224n 课程带学详解

  • 斯坦福 NLP 课程 | 第 1 讲 – NLP 介绍与词向量初步
  • 斯坦福 NLP 课程 | 第 2 讲 – 词向量进阶
  • 斯坦福 NLP 课程 | 第 3 讲 – 神经网络常识回顾
  • 斯坦福 NLP 课程 | 第 4 讲 – 神经网络反向流传与计算图
  • 斯坦福 NLP 课程 | 第 5 讲 – 句法分析与依存解析
  • 斯坦福 NLP 课程 | 第 6 讲 – 循环神经网络与语言模型
  • 斯坦福 NLP 课程 | 第 7 讲 – 梯度隐没问题与 RNN 变种
  • 斯坦福 NLP 课程 | 第 8 讲 – 机器翻译、seq2seq 与注意力机制
  • 斯坦福 NLP 课程 | 第 9 讲 – cs224n 课程大我的项目实用技巧与教训
  • 斯坦福 NLP 课程 | 第 10 讲 – NLP 中的问答零碎
  • 斯坦福 NLP 课程 | 第 11 讲 – NLP 中的卷积神经网络
  • 斯坦福 NLP 课程 | 第 12 讲 – 子词模型
  • 斯坦福 NLP 课程 | 第 13 讲 – 基于上下文的表征与 NLP 预训练模型
  • 斯坦福 NLP 课程 | 第 14 讲 – Transformers 自注意力与生成模型
  • 斯坦福 NLP 课程 | 第 15 讲 – NLP 文本生成工作
  • 斯坦福 NLP 课程 | 第 16 讲 – 指代消解问题与神经网络办法
  • 斯坦福 NLP 课程 | 第 17 讲 – 多任务学习(以问答零碎为例)
  • 斯坦福 NLP 课程 | 第 18 讲 – 句法分析与树形递归神经网络
  • 斯坦福 NLP 课程 | 第 19 讲 – AI 平安偏见与偏心
  • 斯坦福 NLP 课程 | 第 20 讲 – NLP 与深度学习的将来

正文完
 0