Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
d2l-zh
提交
eb68761f
D
d2l-zh
项目概览
OpenDocCN
/
d2l-zh
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
d2l-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
eb68761f
编写于
6月 27, 2018
作者:
A
Aston Zhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
revise nlp
上级
0f2a4eb5
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
14 deletion
+14
-14
chapter_natural-language-processing/seq2seq.md
chapter_natural-language-processing/seq2seq.md
+4
-4
chapter_natural-language-processing/word2vec.md
chapter_natural-language-processing/word2vec.md
+10
-10
未找到文件。
chapter_natural-language-processing/seq2seq.md
浏览文件 @
eb68761f
...
...
@@ -2,9 +2,9 @@
在很多应用中,输入和输出都可以是不定长序列。以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如
>
输入(英语)
:“They”、“are”、“watching”、“.”
>
英语输入
:“They”、“are”、“watching”、“.”
>
输出(法语)
:“Ils”、“regardent”、“.”
>
法语输出
:“Ils”、“regardent”、“.”
当输入输出都是不定长序列时,我们可以使用编码器—解码器(encoder-decoder)[1] 或者seq2seq模型 [2]。这两个模型本质上都用到了两个循环神经网络,分别叫做编码器和解码器。编码器对应输入序列,解码器对应输出序列。下面我们来介绍编码器—解码器的设计。
...
...
@@ -45,14 +45,14 @@ $$
并得到该输出序列的损失
$$-
\l
og
\m
athbb{P}(y_1,
\l
dots, y_{T^
\p
rime}) = -
\s
um_{t^
\p
rime=1}^{T^
\p
rime}
\l
og
\m
athbb{P}(y_{t^
\p
rime}
\m
id y_1,
\l
dots, y_{t^
\p
rime-1},
\b
oldsymbol{c}).$$
$$-
\l
og
\m
athbb{P}(y_1,
\l
dots, y_{T^
\p
rime}
\m
id x_1,
\l
dots, x_T
) = -
\s
um_{t^
\p
rime=1}^{T^
\p
rime}
\l
og
\m
athbb{P}(y_{t^
\p
rime}
\m
id y_1,
\l
dots, y_{t^
\p
rime-1},
\b
oldsymbol{c}).$$
为此,我们可以使用另一个循环神经网络作为解码器。
在输出序列的时间步$t^
\p
rime$,解码器将上一时间步的输出$y_{t^
\p
rime-1}$以及背景变量$
\b
oldsymbol{c}$作为输入,并将它们与上一时间步的隐藏状态$
\b
oldsymbol{s}_{t^
\p
rime-1}$变换为当前时间步的隐藏状态$
\b
oldsymbol{s}_{t^
\p
rime}$。因此,我们可以用函数$g$表达解码器隐藏层的变换:
$$
\b
oldsymbol{s}_{t^
\p
rime} = g(y_{t^
\p
rime-1},
\b
oldsymbol{c},
\b
oldsymbol{s}_{t^
\p
rime-1}).$$
有了解码器的隐藏状态后,我们可以自定义输出层来计算损失中的$
\m
athbb{P}(y_{t^
\p
rime}
\m
id y_1,
\l
dots, y_{t^
\p
rime-1},
\b
oldsymbol{c})$,例如基于当前时间步的解码器隐藏状态 $
\b
oldsymbol{s}_{t^
\p
rime}$、上一时间步的输出$y_{t^
\p
rime-1}$以及背景变量$
\b
oldsymbol{c}$来计算当前时间步输出$y_{t^
\p
rime}$的概率分布
(例如:softmax)
。
有了解码器的隐藏状态后,我们可以自定义输出层来计算损失中的$
\m
athbb{P}(y_{t^
\p
rime}
\m
id y_1,
\l
dots, y_{t^
\p
rime-1},
\b
oldsymbol{c})$,例如基于当前时间步的解码器隐藏状态 $
\b
oldsymbol{s}_{t^
\p
rime}$、上一时间步的输出$y_{t^
\p
rime-1}$以及背景变量$
\b
oldsymbol{c}$来计算当前时间步输出$y_{t^
\p
rime}$的概率分布。
在实际中,我们常使用深度循环神经网络作为编码器和解码器。我们将在本章稍后的
[
“机器翻译”
](
nmt.md
)
一节中实现含深度循环神经网络的编码器和解码器。
...
...
chapter_natural-language-processing/word2vec.md
浏览文件 @
eb68761f
...
...
@@ -6,7 +6,7 @@
## 为何不采用one-hot向量
我们在
[
“循环神经网络——从零开始”
](
../chapter_recurrent-neural-networks/rnn-scratch.md
)
一节中使用one-hot向量表示词。回忆一下,假设词典中不同词的数量(词典大小)为$N$,每个词可以和从0到$N-1$的连续整数一一对应。这些与词对应的整数也叫词的索引。
我们在
[
“循环神经网络——从零开始”
](
../chapter_recurrent-neural-networks/rnn-scratch.md
)
一节中使用one-hot向量表示词
(字符为词)
。回忆一下,假设词典中不同词的数量(词典大小)为$N$,每个词可以和从0到$N-1$的连续整数一一对应。这些与词对应的整数也叫词的索引。
假设一个词的索引为$i$,为了得到该词的one-hot向量表示,我们创建一个全0的长为$N$的向量,并将其第$i$位设成1。
然而,使用one-hot词向量通常并不是一个好选择。一个主要的原因是,one-hot词向量无法表达不同词之间的相似度,例如余弦相似度。由于任意一对向量$
\b
oldsymbol{x},
\b
oldsymbol{y}
\i
n
\m
athbb{R}^d$的余弦相似度为
...
...
@@ -32,8 +32,7 @@ word2vec工具主要包含跳字模型和连续词袋模型。下面将分别介
### 跳字模型
在跳字模型中,我们用一个词来预测它在文本序列周围的词。举个例子,假设文本序列是“the”、“man”、“love”、“his”和“son”。跳字模型所关心的是,给定“love”生成邻近词“the”、“man”、“his”和“son”的条件概率。在这个例子中,“love”叫中心词,“the”、“man”、“his”和“son”叫背景词。这里我们设定时间窗口的大小为2,所以“love”只生成与它距离不超过2的背景词。
在跳字模型中,我们用一个词来预测它在文本序列周围的词。举个例子,假设文本序列是“the”、“man”、“loves”、“his”和“son”。以“loves”作为中心词,设时间窗口大小为2。跳字模型所关心的是,给定中心词“loves”生成与它距离不超过2个词的背景词“the”、“man”、“his”和“son”的条件概率。
我们来描述一下跳字模型。
...
...
@@ -66,7 +65,8 @@ $$\frac{\partial \text{log} \mathbb{P}(w_o \mid w_c)}{\partial \mathbf{v}_c} = \
### 连续词袋模型
连续词袋模型与跳字模型类似。与跳字模型最大的不同是,连续词袋模型用一个中心词在文本序列周围的词来预测该中心词。举个例子,假设文本序列为“the”、 “man”、“love”、“his”和“son”。连续词袋模型所关心的是,邻近词“the”、“man”、“his”和“son”一起生成中心词“love”的概率。
连续词袋模型与跳字模型类似。与跳字模型最大的不同是,连续词袋模型用一个中心词在文本序列前后的背景词来预测该中心词。举个例子,假设文本序列为“the”、 “man”、“loves”、“his”和“son”。以“loves”作为中心词,设时间窗口大小为2。连续词袋模型所关心的是,给定与中心词距离不超过2个词的背景词“the”、“man”、“his”和“son”生成中心词“loves”的条件概率。
假设词典索引集$
\m
athcal{V}$的大小为$|
\m
athcal{V}|$,且$
\m
athcal{V} =
\{
0, 1,
\l
dots, |
\m
athcal{V}|-1
\}
$。给定一个长度为$T$的文本序列中,时间步$t$的词为$w^{(t)}$。当时间窗口大小为$m$时,连续词袋模型需要最大化由背景词生成任一中心词的概率
...
...
@@ -99,7 +99,7 @@ $$\frac{\partial \text{log} \mathbb{P}(w_c \mid w_{o_1}, \ldots, w_{o_{2m}})}{\p
## 近似训练法
我们可以看到,无论是跳字模型还是连续词袋模型,每一步梯度计算的开销与词典$
\m
athcal{V}$的大小相关
.。当词典较大时,例如几十万到上百万,这种训练方法的计算开销会较大。因此,我们将使用近似的方法来计算这些梯度,从而减小计算开销。常用的近似训练法包括负采样(negative sampling)
和层序softmax。
我们可以看到,无论是跳字模型还是连续词袋模型,每一步梯度计算的开销与词典$
\m
athcal{V}$的大小相关
。当词典较大时,例如几十万到上百万,这种训练方法的计算开销会较大。因此,我们将使用近似的方法来计算这些梯度,从而减小计算开销。常用的近似训练法包括负采样
和层序softmax。
...
...
@@ -109,7 +109,7 @@ $$\frac{\partial \text{log} \mathbb{P}(w_c \mid w_{o_1}, \ldots, w_{o_{2m}})}{\p
实际上,词典$
\m
athcal{V}$的大小之所以会在损失中出现,是因为给定中心词$w_c$生成背景词$w_o$的条件概率$
\m
athbb{P}(w_o
\m
id w_c)$使用了softmax运算,而softmax运算正是考虑了背景词可能是词典中的任一词,并体现在分母上。
不妨换个角度考虑给定中心词生成背景词的条件概率。我们先定义噪声词分布$
\m
athbb{P}(w)$,接着假设中心词$w_c$生成背景词$w_o$由以下相互独立事件联合组成来近似:
不妨换个角度考虑给定中心词生成背景词的条件概率。我们先定义噪声词分布$
\m
athbb{P}(w)$,接着假设
给定
中心词$w_c$生成背景词$w_o$由以下相互独立事件联合组成来近似:
*
中心词$w_c$和背景词$w_o$同时出现时间窗口。
*
中心词$w_c$和第1个噪声词$w_1$不同时出现在该时间窗口(噪声词$w_1$按噪声词分布$
\m
athbb{P}(w)$随机生成,且假设一定和$w_c$不同时出现在该时间窗口)。
...
...
@@ -144,7 +144,7 @@ $$-\text{log} \mathbb{P}(w^{(t)} \mid w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}
$$-
\t
ext{log}
\f
rac{1}{1+
\t
ext{exp}
\l
eft(-
\m
athbf{u}_c^
\t
op (
\m
athbf{v}_{o_1} +
\l
dots +
\m
athbf{v}_{o_{2m}}) /(2m)
\r
ight)} -
\s
um_{k=1, w_k
\s
im
\m
athbb{P}(w)}^K
\t
ext{log}
\f
rac{1}{1+
\t
ext{exp}
\l
eft((
\m
athbf{u}_{i_k}^
\t
op (
\m
athbf{v}_{o_1} +
\l
dots +
\m
athbf{v}_{o_{2m}}) /(2m)
\r
ight)}.$$
同样,当我们把$K$取较小值时,负采样每次迭代的计算开销将较小。
另外,定义噪声词分布$
\m
athbb{P}(w)$为单元语言模型概率分布(unigram distribution)的3/4次方的时候,采样效果最佳。
同样,当我们把$K$取较小值时,负采样每次迭代的计算开销将较小。
## 层序softmax
...
...
@@ -157,14 +157,14 @@ $$-\text{log} \frac{1}{1+\text{exp}\left(-\mathbf{u}_c^\top (\mathbf{v}_{o_1} +
假设$L(w)$为从二叉树的根节点到词$w$的叶子节点的路径(包括根和叶子节点)上的节点数。设$n(w,j)$为该路径上第$j$个节点,并设该节点的向量为$
\m
athbf{u}_{n(w,j)}$。以图10.1为例,$L(w_3) = 4$。设词典中的词$w_i$的词向量为$
\m
athbf{v}_i$。那么,跳字模型和连续词袋模型所需要计算的给定词$w_i$生成词$w$的条件概率为:
$$
\m
athbb{P}(w
\m
id w_i) =
\p
rod_{j=1}^{L(w)-1}
\s
igma
\l
eft(
\l
eft[[n(w, j+1) =
\t
ext{leftChild}(n(w,j))
\r
ight]
]
\c
dot
\m
athbf{u}_{n(w,j)}^
\t
op
\m
athbf{v}_i
\r
ight),$$
$$
\m
athbb{P}(w
\m
id w_i) =
\p
rod_{j=1}^{L(w)-1}
\s
igma
\l
eft(
[
\!
[ n(w, j+1) =
\t
ext{leftChild}(n(w,j)) ]
\!
]
\c
dot
\m
athbf{u}_{n(w,j)}^
\t
op
\m
athbf{v}_i
\r
ight),$$
其中$
\s
igma(x) = 1/(1+
\t
ext{exp}(-x))$,$
\t
ext{leftChild}(n)$是节点$n$的左孩子节点,如果判断$x$为真,$[
[x]] = 1$;反之$[[x]
] = -1$。由于$
\s
igma(x)+
\s
igma(-x) = 1$,给定词$w_i$生成词典$
\m
athcal{V}$中任一词的条件概率之和为1这一条件也将满足:
其中$
\s
igma(x) = 1/(1+
\t
ext{exp}(-x))$,$
\t
ext{leftChild}(n)$是节点$n$的左孩子节点,如果判断$x$为真,$[
\!
[x]
\!
] = 1$;反之$[
\!
[x]
\!
] = -1$。由于$
\s
igma(x)+
\s
igma(-x) = 1$,给定词$w_i$生成词典$
\m
athcal{V}$中任一词的条件概率之和为1这一条件也将满足:
$$
\s
um_{w
\i
n
\m
athcal{V}}
\m
athbb{P}(w
\m
id w_i) = 1.$$
让我们计算图10.1中给定词$w_i$生成词$w_3$的条件概率。我们需要将$w_i$的词向量$
\m
athbf{v}_i$和根节点到$w_3$路径上的非叶子节点向量一一求内积。由于在二叉树中由根节点到叶子节点$w_3$的路径上需要
中序遍历
,我们得到
让我们计算图10.1中给定词$w_i$生成词$w_3$的条件概率。我们需要将$w_i$的词向量$
\m
athbf{v}_i$和根节点到$w_3$路径上的非叶子节点向量一一求内积。由于在二叉树中由根节点到叶子节点$w_3$的路径上需要
向左、向右、再向左地遍历(图10.1中加粗的路径)
,我们得到
$$
\m
athbb{P}(w_3
\m
id w_i) =
\s
igma(
\m
athbf{u}_{n(w_3,1)}^
\t
op
\m
athbf{v}_i)
\c
dot
\s
igma(-
\m
athbf{u}_{n(w_3,2)}^
\t
op
\m
athbf{v}_i)
\c
dot
\s
igma(
\m
athbf{u}_{n(w_3,3)}^
\t
op
\m
athbf{v}_i).$$
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录