Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
白麟_嗷呜
apachecn-dl-zh
提交
fb711f7b
A
apachecn-dl-zh
项目概览
白麟_嗷呜
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fb711f7b
编写于
12月 22, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-22 17:27:51
上级
123f14d0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
21 deletion
+21
-21
new/intel-proj-py/03.md
new/intel-proj-py/03.md
+21
-21
未找到文件。
new/intel-proj-py/03.md
浏览文件 @
fb711f7b
...
...
@@ -130,15 +130,15 @@
![](
img/9028a0b4-506c-49df-a783-869bb5c75426.png
)
这里
*<sub>P</sub> (s <sub>i</sub> )= P(w <sub>i</sub> / w <sub>1</sub> w <sub>2</sub> …w <sub>i-1</sub> )*
。 将
`(1)`
和
`(4)`
结合起来,困惑可以写成如下:
这里
`P(s[i]) = P(w[i] / w[1], w[2], ..., w[i-1])`
。 将
`(1)`
和
`(4)`
结合起来,困惑可以写成如下:
![](
img/785a9853-f2d3-4c28-a718-aeb9e2fcb6de.png
)
假设我们有一个语言模型
*P(。)*
和一个我喜欢机器学习进行评估的测试集
*。 根据语言模型,测试集的概率如下:*
假设我们有一个语言模型
`P(.)`
和一个进行评估的测试集
`I love Machine Learning`
。 根据语言模型,测试集的概率如下:
![](
img/82e0b0cf-e3ee-43a0-962e-91bf737abd0a.png
)
如果语言模型的训练语料也是
*我喜欢机器学习,则*
测试集的概率为 1,导致对数概率为
*为零*
,且困惑为
[
`1`。 这意味着该模型可以完全确定地生成下一个单词。
如果语言模型的训练语料也是
`I love Machine Learning`
,则测试集的概率为 1,导致对数概率为
`0`
,且困惑为
`1`
。 这意味着该模型可以完全确定地生成下一个单词。
另一方面,如果我们有一个更现实的训练语料库,其词汇量为
`N`
= 20,000,并且训练数据集在测试数据集上的困惑度为 100,那么平均而言, 为了预测序列中的下一个单词,我们将搜索范围从 20,000 个单词缩小到 100 个单词。
...
...
@@ -164,9 +164,9 @@
对于语言模型,需要在训练过程中估计生育率,失真率和单词到单词的翻译率。
现在,让我们回到估计概率
*P(s / t)*
的原始问题。 如果我们用
`E`
表示英语句子,而用
`F`
表示法语句子,则需要计算
*P(F / E)*
的概率。 为了考虑单词的对齐方式,我们将概率修改为
*P(F,a / E)*
,其中
`a`
表示目标句子在法语中的对齐方式。 这种一致性将有助于我们注入有关畸变和生育能力的信息。
现在,让我们回到估计概率
`P(s / t)`
的原始问题。 如果我们用
`E`
表示英语句子,而用
`F`
表示法语句子,则需要计算
`P(F / E)`
的概率。 为了考虑单词的对齐方式,我们将概率修改为
`P(F, a / E)`
,其中
`a`
表示目标句子在法语中的对齐方式。 这种一致性将有助于我们注入有关畸变和生育能力的信息。
让我们通过一个示例来计算概率
*P(F,a / E)*
。 让一个特定的英语句子由五个单词的句子表示。
*e =(e <sub>1</sub> ,e <sub>2</sub> ,e <sub>3</sub> ,e <sub>4</sub> ,e <sub>5</sub> )*
,实际上这是实际法语句子的正确翻译。
*f =(f <sub>1</sub> ,f <sub>2</sub> ,f <sub>3</sub> ,f <sub>4</sub> ,f <sub>5</sub> ,f <sub>6</sub> )*
。 另外,让单词的相应对齐方式如下:
让我们通过一个示例来计算概率
`P(F, a / E)`
。 让一个特定的英语句子由五个单词的句子表示。
`e = (e[1], e[2], ..., e[5])`
,实际上这是实际法语句子的正确翻译。
`f = (f[1], f[2], ..., f[6])`
。 另外,让单词的相应对齐方式如下:
*
`e1 -> f6`
*
`e2 ->`
不对应法语中的任何单词
...
...
@@ -181,11 +181,11 @@
![](
img/688b2388-8434-4d98-8d00-66ea374148b9.png
)
现在,让我们将对齐方式作为两个成分的组合:失真
`a[d]`
和
生育力
`f[d]`
。
`(1)`
中的表达式可以重写如下:
现在,让我们将对齐方式作为两个成分的组合:失真
`a[d]`
和
丰富度
`f[d]`
。
`(1)`
中的表达式可以重写如下:
![](
img/edaf41f6-4172-4397-b791-f714571e57ca.png
)
![](
img/546bd7e5-37e3-44ba-a006-3378e4664053.png
)
如果我们仔细观察,
*P(f <sub>5</sub> / e <sub>1</sub> )*
就是翻译概率,
*P(a <sub>f</sub> / e <sub>1</sub> )*
是生育力,而
*P(a <sub>d</sub> / e <sub>1</sub> ,f <sub>5</sub> )*
是失真概率。 我们需要针对英语句子中与给定法语句子的所有比对中的所有给定英语单词进行此活动,以计算
*P(F,a / E)*
。 最后,我们需要采用最佳英语句子!
[](
img/da614761-d0d0-4d7c-a1db-6666a7d68f5b.png
)
和对齐方式!
[](
img/10715372-f52d-4d7d-a131-032da0542465.png
)
,以使
*P(F,a / E)P(E)*
的概率最大化。 如下所示:
如果我们仔细观察,
`P(f[5] / e[1])`
就是翻译概率,
`P(a[f] / e[1])`
是丰富度,而
`P(a[d] / e[1], f[5])`
是失真概率。 我们需要针对英语句子中与给定法语句子的所有比对中的所有给定英语单词进行此活动,以计算
`P(F, a / E)`
。 最后,我们需要采用最佳英语句子!
[](
img/da614761-d0d0-4d7c-a1db-6666a7d68f5b.png
)
和对齐方式!
[](
img/10715372-f52d-4d7d-a131-032da0542465.png
)
,以使
`P(F, a / E)P(E)`
的概率最大化。 如下所示:
![](
img/396ee058-a561-4b7e-a60d-1a568bbb52b6.png
)
...
...
@@ -204,9 +204,9 @@ NMT 与其他传统方法相比的一些优点如下:
# 编码器-解码器型号
下图说明了一种神经翻译机的体系结构,该结构使用一个 LSTM 作为编码器,将输入源语言序列编码为最终隐藏状态
`h[f]`
和最终存储单元状态
[
`c[f]`
。 最终的隐藏状态和单元状态
*[h <sub>f</sub> ,c <sub>f</sub> ]*
将捕获整个输入序列的上下文。 因此,
*[h <sub>f</sub> ,c <sub>f</sub> ]*
成为解码器网络可适应的良好候选者。
下图说明了一种神经翻译机的体系结构,该结构使用一个 LSTM 作为编码器,将输入源语言序列编码为最终隐藏状态
`h[f]`
和最终存储单元状态
`c[f]`
。 最终的隐藏状态和单元状态
`[h[f]; c[f]]`
将捕获整个输入序列的上下文。 因此,
`[h[f]; c[f]]`
成为解码器网络可适应的良好候选者。
此隐藏状态和单元状态信息
*[h <sub>f</sub> ,c <sub>f</sub> ]*
作为初始隐藏状态和单元状态被馈送到解码器网络,然后解码器 在目标序列上训练序列,其中输入目标序列相对于输出目标序列滞后一。 根据解码器,输入序列的第一个字是伪字
`[START]`
,而输出标签是字
*c'est*
。 解码器网络仅被训练为一种生成语言模型,在任何时候,输出标签
`t`
t 都是相对于输入的下一个单词,即
*y <sub>t</sub> = x <sub>t + 1</sub>*
。 唯一的新变化是编码器的最终隐藏状态和单元状态(即
*[h <sub>f</sub> ,c <sub>f</sub> ]*
) 解码器的隐藏状态和单元状态为翻译提供内容。
此隐藏状态和单元状态信息
`[h[f]; c[f]]`
作为初始隐藏状态和单元状态被馈送到解码器网络,然后解码器 在目标序列上训练序列,其中输入目标序列相对于输出目标序列滞后一。 根据解码器,输入序列的第一个字是伪字
`[START]`
,而输出标签是字
`c'est`
。 解码器网络仅被训练为一种生成语言模型,在任何时候,输出标签
`t`
都是相对于输入的下一个单词,即
`y[t] = x[t + 1]`
。 唯一的新变化是编码器的最终隐藏状态和单元状态(即
`[h[f]; c[f]]`
) 解码器的隐藏状态和单元状态为翻译提供内容。
这意味着可以将训练过程视为为目标语言(由解码器表示)建立语言模型,该模型以代表源语言的编码器的隐藏状态为条件:
...
...
@@ -214,7 +214,7 @@ NMT 与其他传统方法相比的一些优点如下:
图 3.3:神经机器翻译系统的高级编码器-解码器架构
如果
`T`
是与源语言文本!
[](
img/39b615f1-11b1-4356-b3bb-e432b66d1e58.png
)
相对应的目标语言文本,那么为了进行训练,我们只是试图使
*P <sub>w</sub> 的对数概率最大化(T <sub> t + 1 </sub> / S,T)*
相对于
`W`
,其中
*T <sub> s + 1 </sub>*
表示目标语言文本已转换 只需一个时间步长,
`W`
表示编码器-解码器体系结构模型参数。
如果
`T`
是与源语言文本!
[](
img/39b615f1-11b1-4356-b3bb-e432b66d1e58.png
)
相对应的目标语言文本,那么为了进行训练,我们只是试图使
`P[w](T[s+1] / S, T)`
的对数概率相对于
`W`
最大化,其中
`T[s+1]`
表示目标语言文本已转换 只需一个时间步长,
`W`
表示编码器-解码器体系结构模型参数。
现在我们已经讨论了编码器-解码器 NMT 的训练过程,现在我们将研究如何在推理过程中使用训练后的模型。
...
...
@@ -226,7 +226,7 @@ NMT 与其他传统方法相比的一些优点如下:
图 3.4:基于编码器/解码器的神经机器翻译的推论
在推论过程中,源语言输入序列被馈送到编码器网络并产生最终的隐藏状态和单元状态,
*[h <sub>f</sub> ,c <sub>f</sub> ]*
馈给解码器的隐藏状态和单元状态。 解码器被转换为单个时间步,馈送到解码器的第一个输入是伪
`[START]`
字。 因此,基于
*[h <sub>f</sub> ,c <sub>f</sub> ]*
和初始虚拟字
`[START]`
,解码器将输出一个字
`w`
,以及新的隐藏状态和单元格状态
*[h <sub>d</sub> ,c <sub>d</sub> ]*
。 这个单词
`w`
再次以新的隐藏状态和单元状态馈送到解码器。
*[h <sub>d</sub> ,c <sub>d</sub> ]*
生成下一个单词。 重复此过程,直到遇到序列结束字符。
在推论过程中,源语言输入序列被馈送到编码器网络并产生最终的隐藏状态和单元状态,
`[h[f]; c[f]]`
馈给解码器的隐藏状态和单元状态。 解码器被转换为单个时间步,馈送到解码器的第一个输入是伪
`[START]`
字。 因此,基于
`[h[f]; c[f]]`
和初始虚拟字
`[START]`
,解码器将输出一个字
`w`
,以及新的隐藏状态和单元格状态
`[h[d]; c[d]]`
。 这个单词
`w`
再次以新的隐藏状态和单元状态馈送到解码器。
`[h[d]; c[d]]`
生成下一个单词。 重复此过程,直到遇到序列结束字符。
# 实现序列到序列的神经翻译机
...
...
@@ -234,21 +234,21 @@ NMT 与其他传统方法相比的一些优点如下:
# 处理输入数据
文本数据不能直接输入任何神经网络,因为神经网络只能理解数字。 我们将每个单词视为一个单编码的矢量,其长度等于每个语料库中出现的单词的数量。 如果英语语料库包含 1,000 个单词,则一键编码的矢量
`v[e]`
的尺寸为 1,000,即
*v <sub>e</sub> ∈R <sup>1000 x 1</sup>*
。
文本数据不能直接输入任何神经网络,因为神经网络只能理解数字。 我们将每个单词视为一个单编码的矢量,其长度等于每个语料库中出现的单词的数量。 如果英语语料库包含 1,000 个单词,则一键编码的矢量
`v[e]`
的尺寸为 1,000,即
`v[e] ∈ R^(1000 x 1)`
。
我们将通读英语和法语语料库,并确定它们各自中唯一词的数量。 我们还将通过索引来表示单词,对于该单词的单编码向量,该单词对应的索引将设置为 1,而其余索引将设置为 0。 例如,假设在英语语料库中,我们有四个词:
*全球变暖是真实的*
。 我们可以如下定义每个单词的索引:
我们将通读英语和法语语料库,并确定它们各自中唯一词的数量。 我们还将通过索引来表示单词,对于该单词的单编码向量,该单词对应的索引将设置为 1,而其余索引将设置为 0。 例如,假设在英语语料库中,我们有四个词:
`Global warming is real`
。 我们可以如下定义每个单词的索引:
|
**字**
|
**索引**
|
|
全球
| 0 |
|
变暖
| 1 |
|
是
| 2 |
|
真实
| 3 |
|
`global`
| 0 |
|
`warming`
| 1 |
|
`is`
| 2 |
|
`real`
| 3 |
在这种情况下,我们可以将单词
*全局*
的单热编码向量定义为
*[1,0,0,0] <sup>T</sup>*
。 类似地,
*实数*
的一键编码矢量可以表示为
*[1,0,0,0] <sup>T</sup>*
。
在这种情况下,我们可以将单词
`global`
的单热编码向量定义为
`[1,0,0,0]^T`
。 类似地,
`real`
的一键编码矢量可以表示为
`[1,0,0,0]^T`
。
现在,转到每个句子或记录的源语言输入,我们将有一系列单词表示为一个单编码的矢量序列。 下一个明显的问题是如何管理序列长度,因为这可能会有所不同。 最普遍接受的方法是使固定序列长度等于语料库中句子的最大序列长度,或者达到预定的合理长度。 我们将使用目标语句两次:一次作为解码器的翻译输出序列,一次作为解码器的输入序列,唯一的区别是输出序列比输入序列提前一个时间步长。 因此,输入目标序列中的第一个单词将是伪单词
`[START]`
,而输出目标序列中的最后一个单词将是伪单词
`[END]`
,标记句子序列的结尾。
如果目标法语句子是
`Je m'appelle Santanu`
*,*
则解码器中的输入目标和输出目标序列如下:
如果目标法语句子是
`Je m'appelle Santanu`
,
则解码器中的输入目标和输出目标序列如下:
```
py
[
START
],[
Je
],[
m
’
appelle
]
[
Santanu
]
...
...
@@ -415,9 +415,9 @@ NMT 与其他传统方法相比的一些优点如下:
# 定义神经机器翻译的模型
如前所述,编码器将通过 LSTM 处理源输入序列,并将源文本编码为有意义的摘要。 有意义的摘要将存储在最后的序列步骤中,即隐藏和单元状态
`h[f]`
和
`c[f]`
。 这些向量在一起(即
*[h <sub>f</sub> ; c <sub>f</sub> ]*
)提供了有关源文本的有意义上下文,并且训练了解码器以产生其 具有隐藏和细胞状态向量的目标序列
*[h <sub>f</sub> ; c <sub>f</sub> ]*
。
如前所述,编码器将通过 LSTM 处理源输入序列,并将源文本编码为有意义的摘要。 有意义的摘要将存储在最后的序列步骤中,即隐藏和单元状态
`h[f]`
和
`c[f]`
。 这些向量在一起(即
`[h[f]; c[f]]`
)提供了有关源文本的有意义上下文,并且训练了解码器以产生其 具有隐藏和细胞状态向量的目标序列
`[h[f]; c[f]]`
。
下图所示“图 3.5”是英语到法语翻译的训练过程的详细图。 英文句子
*这是美好的一天*
通过 LSTM 转换为含义摘要,然后存储在隐藏和单元格状态向量
*[h <sub>f</sub> 中; c <sub>f</sub> ]*
。 然后使解码器根据嵌入在
*[h <sub>f</sub> 中的信息,以输入源语句为条件,生成自己的目标序列; c <sub>f</sub> ]*
。 给定源句,使在时间步
`t`
的解码器预测下一个目标单词,即在时间步
*t +1*
的单词。 这就是为什么目标输入字和目标输出字之间有一个时间步长的滞后的原因。 对于第一步,解码器在目标文本序列中没有任何先前的单词,因此可用于预测目标单词的唯一信息是以
*[h <sub>f</sub> ; c <sub>f</sub> ]*
,作为初始隐藏和单元状态向量提供。 像编码器一样,解码器也使用 LSTM,并且如上所述,输出目标序列比输入目标序列提前一个时间步长:
下图所示“图 3.5”是英语到法语翻译的训练过程的详细图。 英文句子
`It's a beautiful day`
通过 LSTM 转换为含义摘要,然后存储在隐藏和单元格状态向量
`[h[f]; c[f]]`
中。 然后使解码器根据嵌入在
`[h[f]; c[f]]`
中的信息,以输入源语句为条件,生成自己的目标序列。 给定源句,使在时间步
`t`
的解码器预测下一个目标单词,即在时间步
`t + 1`
的单词。 这就是为什么目标输入字和目标输出字之间有一个时间步长的滞后的原因。 对于第一步,解码器在目标文本序列中没有任何先前的单词,因此可用于预测目标单词的唯一信息是以
`[h[f]; c[f]]`
,作为初始隐藏和单元状态向量提供。 像编码器一样,解码器也使用 LSTM,并且如上所述,输出目标序列比输入目标序列提前一个时间步长:
![](
img/421b234c-10f6-4cbe-9233-97a33233b2ca.png
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录