Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mtbookv2
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
mtbookv2
Commits
ba1cb466
Commit
ba1cb466
authored
Oct 09, 2020
by
zengxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chapter 10 12 章节内图公式序号统一
parent
ce3686f8
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
35 行增加
和
35 行删除
+35
-35
Chapter10/chapter10.tex
+35
-35
没有找到文件。
Chapter10/chapter10.tex
查看文件 @
ba1cb466
...
@@ -662,14 +662,14 @@ $\funp{P}({y_j | \vectorn{\emph{s}}_{j-1} ,y_{j-1},\vectorn{\emph{C}}})$由Softm
...
@@ -662,14 +662,14 @@ $\funp{P}({y_j | \vectorn{\emph{s}}_{j-1} ,y_{j-1},\vectorn{\emph{C}}})$由Softm
\noindent
之所以能想到在横线处填“吃饭”、“吃东西”很有可能是因为看到了“没/吃饭”、 “很/饿”等关键信息。也就是这些关键的片段对预测缺失的单词起着关键性作用。而预测“吃饭”与前文中的“ 中午”、“又”之间的联系似乎不那么紧密。也就是说,在形成 “吃饭”的逻辑时,在潜意识里会更注意“没/吃饭”、“很饿”等关键信息。也就是我们的关注度并不是均匀地分布在整个句子上的。
\noindent
之所以能想到在横线处填“吃饭”、“吃东西”很有可能是因为看到了“没/吃饭”、 “很/饿”等关键信息。也就是这些关键的片段对预测缺失的单词起着关键性作用。而预测“吃饭”与前文中的“ 中午”、“又”之间的联系似乎不那么紧密。也就是说,在形成 “吃饭”的逻辑时,在潜意识里会更注意“没/吃饭”、“很饿”等关键信息。也就是我们的关注度并不是均匀地分布在整个句子上的。
\parinterval
这个现象可以用注意力机制进行解释。注意力机制的概念来源于生物学的一些现象:当待接收的信息过多时,人类会选择性地关注部分信息而忽略其他信息。它在人类的视觉、听觉、嗅觉等方面均有体现,当我们在感受事物时,大脑会自动过滤或衰减部分信息,仅关注其中少数几个部分。例如,当看到图
\ref
{
fig:1
2
-20
}
时,往往不是“均匀地”看图像中的所有区域,可能最先注意到的是小狗的嘴,然后才会关注图片中其他的部分。那注意力机制是如何解决神经机器翻译的问题呢?下面就一起来看一看。
\parinterval
这个现象可以用注意力机制进行解释。注意力机制的概念来源于生物学的一些现象:当待接收的信息过多时,人类会选择性地关注部分信息而忽略其他信息。它在人类的视觉、听觉、嗅觉等方面均有体现,当我们在感受事物时,大脑会自动过滤或衰减部分信息,仅关注其中少数几个部分。例如,当看到图
\ref
{
fig:1
0
-20
}
时,往往不是“均匀地”看图像中的所有区域,可能最先注意到的是小狗的嘴,然后才会关注图片中其他的部分。那注意力机制是如何解决神经机器翻译的问题呢?下面就一起来看一看。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\includegraphics
[scale=0.05]
{
./Chapter10/Figures/dog-hat-new.jpg
}
\includegraphics
[scale=0.05]
{
./Chapter10/Figures/dog-hat-new.jpg
}
\caption
{
戴帽子的狗
}
\caption
{
戴帽子的狗
}
\label
{
fig:1
2
-20
}
\label
{
fig:1
0
-20
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
...
@@ -688,27 +688,27 @@ $\funp{P}({y_j | \vectorn{\emph{s}}_{j-1} ,y_{j-1},\vectorn{\emph{C}}})$由Softm
...
@@ -688,27 +688,27 @@ $\funp{P}({y_j | \vectorn{\emph{s}}_{j-1} ,y_{j-1},\vectorn{\emph{C}}})$由Softm
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
\parinterval
更直观的,如图
\ref
{
fig:1
2
-21
}
,目标语言中的“very long”仅依赖于源语言中的“很长”。这时如果将所有源语言编码成一个固定的实数向量,“很长”的信息就很可能被其他词的信息淹没掉。
\parinterval
更直观的,如图
\ref
{
fig:1
0
-21
}
,目标语言中的“very long”仅依赖于源语言中的“很长”。这时如果将所有源语言编码成一个固定的实数向量,“很长”的信息就很可能被其他词的信息淹没掉。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter10/Figures/figure-attention-of-source-and-target-words
}
\input
{
./Chapter10/Figures/figure-attention-of-source-and-target-words
}
\caption
{
源语言词和目标语言词的关注度
}
\caption
{
源语言词和目标语言词的关注度
}
\label
{
fig:1
2
-21
}
\label
{
fig:1
0
-21
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\parinterval
显然,以上问题的根本原因在于所使用的表示模型还比较“弱”。因此需要一个更强大的表示模型,在生成目标语言单词时能够有选择地获取源语言句子中更有用的部分。更准确的说,对于要生成的目标语单词,相关性更高的源语言片段应该在源语言句子的表示中体现出来,而不是将所有的源语言单词一视同仁。在神经机器翻译中引入注意力机制正是为了达到这个目的
\upcite
{
bahdanau2014neural,DBLP:journals/corr/LuongPM15
}
。实际上,除了机器翻译,注意力机制也被成功地应用于图像处理、语音识别、自然语言处理等其他任务。而正是注意力机制的引入,使得包括机器翻译在内很多自然语言处理系统得到了飞跃发展。
\parinterval
显然,以上问题的根本原因在于所使用的表示模型还比较“弱”。因此需要一个更强大的表示模型,在生成目标语言单词时能够有选择地获取源语言句子中更有用的部分。更准确的说,对于要生成的目标语单词,相关性更高的源语言片段应该在源语言句子的表示中体现出来,而不是将所有的源语言单词一视同仁。在神经机器翻译中引入注意力机制正是为了达到这个目的
\upcite
{
bahdanau2014neural,DBLP:journals/corr/LuongPM15
}
。实际上,除了机器翻译,注意力机制也被成功地应用于图像处理、语音识别、自然语言处理等其他任务。而正是注意力机制的引入,使得包括机器翻译在内很多自然语言处理系统得到了飞跃发展。
\parinterval
神经机器翻译中的注意力机制并不复杂。对于每个目标语言单词
$
y
_
j
$
,系统生成一个源语言表示向量
$
\vectorn
{
\emph
{{
C
}}}_
j
$
与之对应,
$
\vectorn
{
\emph
{
C
}}_
j
$
会包含生成
$
y
_
j
$
所需的源语言的信息,或者说
$
\vectorn
{
\emph
{
C
}}_
j
$
是一种包含目标语言单词与源语言单词对应关系的源语言表示。相比用一个静态的表示
$
\vectorn
{
\emph
{
C
}}$
,注意机制使用的是动态的表示
$
\vectorn
{
\emph
{
C
}}_
j
$
。
$
\vectorn
{
\emph
{
C
}}_
j
$
也被称作对于目标语言位置
$
j
$
的
{
\small\bfnew
{
上下文向量
}}
\index
{
上下文向量
}
(Context Vector
\index
{
Context Vector
}
)。图
\ref
{
fig:1
2
-22
}
对比了未引入注意力机制和引入了注意力机制的编码器- 解码器结构。可以看出,在注意力模型中,对于每一个目标单词的生成,都会额外引入一个单独的上下文向量参与运算。
\parinterval
神经机器翻译中的注意力机制并不复杂。对于每个目标语言单词
$
y
_
j
$
,系统生成一个源语言表示向量
$
\vectorn
{
\emph
{{
C
}}}_
j
$
与之对应,
$
\vectorn
{
\emph
{
C
}}_
j
$
会包含生成
$
y
_
j
$
所需的源语言的信息,或者说
$
\vectorn
{
\emph
{
C
}}_
j
$
是一种包含目标语言单词与源语言单词对应关系的源语言表示。相比用一个静态的表示
$
\vectorn
{
\emph
{
C
}}$
,注意机制使用的是动态的表示
$
\vectorn
{
\emph
{
C
}}_
j
$
。
$
\vectorn
{
\emph
{
C
}}_
j
$
也被称作对于目标语言位置
$
j
$
的
{
\small\bfnew
{
上下文向量
}}
\index
{
上下文向量
}
(Context Vector
\index
{
Context Vector
}
)。图
\ref
{
fig:1
0
-22
}
对比了未引入注意力机制和引入了注意力机制的编码器- 解码器结构。可以看出,在注意力模型中,对于每一个目标单词的生成,都会额外引入一个单独的上下文向量参与运算。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter1
2
/Figures/figure-encoder-decoder-with-attention
}
\input
{
./Chapter1
0
/Figures/figure-encoder-decoder-with-attention
}
\caption
{
不使用(a)和使用(b)注意力机制的翻译模型对比
}
\caption
{
不使用(a)和使用(b)注意力机制的翻译模型对比
}
\label
{
fig:1
2
-22
}
\label
{
fig:1
0
-22
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
...
@@ -723,28 +723,28 @@ $\funp{P}({y_j | \vectorn{\emph{s}}_{j-1} ,y_{j-1},\vectorn{\emph{C}}})$由Softm
...
@@ -723,28 +723,28 @@ $\funp{P}({y_j | \vectorn{\emph{s}}_{j-1} ,y_{j-1},\vectorn{\emph{C}}})$由Softm
\parinterval
根据这种思想,上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
被定义为对不同时间步编码器输出的状态序列
$
\{
\vectorn
{
\emph
{
h
}}_
1
,
\vectorn
{
\emph
{
h
}}_
2
,...,
\vectorn
{
\emph
{
h
}}_
m
\}
$
进行加权求和,如下:
\parinterval
根据这种思想,上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
被定义为对不同时间步编码器输出的状态序列
$
\{
\vectorn
{
\emph
{
h
}}_
1
,
\vectorn
{
\emph
{
h
}}_
2
,...,
\vectorn
{
\emph
{
h
}}_
m
\}
$
进行加权求和,如下:
\begin{eqnarray}
\begin{eqnarray}
\vectorn
{
\emph
{
C
}}_
j=
\sum
_{
i
}
\alpha
_{
i,j
}
\vectorn
{
\emph
{
h
}}_
i
\vectorn
{
\emph
{
C
}}_
j=
\sum
_{
i
}
\alpha
_{
i,j
}
\vectorn
{
\emph
{
h
}}_
i
\label
{
eq:1
2
-22
}
\label
{
eq:1
0
-22
}
\end{eqnarray}
\end{eqnarray}
\noindent
其中,
$
\alpha
_{
i,j
}$
是
{
\small\sffamily\bfseries
{
注意力权重
}}
\index
{
注意力权重
}
(Attention Weight)
\index
{
Attention Weight
}
,它表示目标语言第
$
j
$
个位置与源语言第
$
i
$
个位置之间的相关性大小。这里,将每个时间步编码器的输出
$
\vectorn
{
\emph
{
h
}}_
i
$
看作源语言位置
$
i
$
的表示结果。进行翻译时,解码端可以根据当前的位置
$
j
$
,通过控制不同
$
\vectorn
{
\emph
{
h
}}_
i
$
的权重得到
$
\vectorn
{
\emph
{
C
}}_
j
$
,使得对目标语言位置
$
j
$
贡献大的
$
\vectorn
{
\emph
{
h
}}_
i
$
对
$
\vectorn
{
\emph
{
C
}}_
j
$
的影响增大。也就是说,
$
\vectorn
{
\emph
{
C
}}_
j
$
实际上就是
\{
${
\vectorn
{
\emph
{
h
}}_
1
,
\vectorn
{
\emph
{
h
}}_
2
,...,
\vectorn
{
\emph
{
h
}}_
m
}$
\}
的一种组合,只不过不同的
$
\vectorn
{
\emph
{
h
}}_
i
$
会根据对目标端的贡献给予不同的权重。图
\ref
{
fig:1
2
-23
}
展示了上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
的计算过程。
\noindent
其中,
$
\alpha
_{
i,j
}$
是
{
\small\sffamily\bfseries
{
注意力权重
}}
\index
{
注意力权重
}
(Attention Weight)
\index
{
Attention Weight
}
,它表示目标语言第
$
j
$
个位置与源语言第
$
i
$
个位置之间的相关性大小。这里,将每个时间步编码器的输出
$
\vectorn
{
\emph
{
h
}}_
i
$
看作源语言位置
$
i
$
的表示结果。进行翻译时,解码端可以根据当前的位置
$
j
$
,通过控制不同
$
\vectorn
{
\emph
{
h
}}_
i
$
的权重得到
$
\vectorn
{
\emph
{
C
}}_
j
$
,使得对目标语言位置
$
j
$
贡献大的
$
\vectorn
{
\emph
{
h
}}_
i
$
对
$
\vectorn
{
\emph
{
C
}}_
j
$
的影响增大。也就是说,
$
\vectorn
{
\emph
{
C
}}_
j
$
实际上就是
\{
${
\vectorn
{
\emph
{
h
}}_
1
,
\vectorn
{
\emph
{
h
}}_
2
,...,
\vectorn
{
\emph
{
h
}}_
m
}$
\}
的一种组合,只不过不同的
$
\vectorn
{
\emph
{
h
}}_
i
$
会根据对目标端的贡献给予不同的权重。图
\ref
{
fig:1
0
-23
}
展示了上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
的计算过程。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter1
2
/Figures/figure-calculation-process-of-context-vector-c
}
\input
{
./Chapter1
0
/Figures/figure-calculation-process-of-context-vector-c
}
\caption
{
上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
的计算过程
}
\caption
{
上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
的计算过程
}
\label
{
fig:1
2
-23
}
\label
{
fig:1
0
-23
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\parinterval
如图
\ref
{
fig:1
2
-23
}
所示,注意力权重
$
\alpha
_{
i,j
}$
的计算分为两步:
\parinterval
如图
\ref
{
fig:1
0
-23
}
所示,注意力权重
$
\alpha
_{
i,j
}$
的计算分为两步:
\begin{itemize}
\begin{itemize}
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\item
使用目标语言上一时刻循环单元的输出
$
\vectorn
{
\emph
{
s
}}_{
j
-
1
}$
与源语言第
$
i
$
个位置的表示
$
\vectorn
{
\emph
{
h
}}_
i
$
之间的相关性,其用来表示目标语言位置
$
j
$
对源语言位置
$
i
$
的关注程度,记为
$
\beta
_{
i,j
}$
,由函数
$
a
(
\cdot
)
$
实现:
\item
使用目标语言上一时刻循环单元的输出
$
\vectorn
{
\emph
{
s
}}_{
j
-
1
}$
与源语言第
$
i
$
个位置的表示
$
\vectorn
{
\emph
{
h
}}_
i
$
之间的相关性,其用来表示目标语言位置
$
j
$
对源语言位置
$
i
$
的关注程度,记为
$
\beta
_{
i,j
}$
,由函数
$
a
(
\cdot
)
$
实现:
\begin{eqnarray}
\begin{eqnarray}
\beta
_{
i,j
}
= a(
\vectorn
{
\emph
{
s
}}_{
j-1
}
,
\vectorn
{
\emph
{
h
}}_
i)
\beta
_{
i,j
}
= a(
\vectorn
{
\emph
{
s
}}_{
j-1
}
,
\vectorn
{
\emph
{
h
}}_
i)
\label
{
eq:1
2
-23
}
\label
{
eq:1
0
-23
}
\end{eqnarray}
\end{eqnarray}
$
a
(
\cdot
)
$
可以被看作是目标语言表示和源语言表示的一种“统一化”,即把源语言和目标语言表示映射在同一个语义空间,进而语义相近的内容有更大的相似性。该函数有多种计算方式,比如,向量乘、向量夹角、单层神经网络等,数学表达如下:
$
a
(
\cdot
)
$
可以被看作是目标语言表示和源语言表示的一种“统一化”,即把源语言和目标语言表示映射在同一个语义空间,进而语义相近的内容有更大的相似性。该函数有多种计算方式,比如,向量乘、向量夹角、单层神经网络等,数学表达如下:
...
@@ -756,7 +756,7 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
...
@@ -756,7 +756,7 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
\textrm
{
TanH
}
(
\vectorn
{
\emph
{
W
}}
[
\vectorn
{
\emph
{
s
}}
,
\vectorn
{
\emph
{
h
}}
])
\vectorn
{
\emph
{
v
}}^{
\textrm
{
T
}}
&
\textrm
{
拼接
}
[
\vectorn
{
\emph
{
s
}}
,
\vectorn
{
\emph
{
h
}}
]+
\textrm
{
单层网络
}
\textrm
{
TanH
}
(
\vectorn
{
\emph
{
W
}}
[
\vectorn
{
\emph
{
s
}}
,
\vectorn
{
\emph
{
h
}}
])
\vectorn
{
\emph
{
v
}}^{
\textrm
{
T
}}
&
\textrm
{
拼接
}
[
\vectorn
{
\emph
{
s
}}
,
\vectorn
{
\emph
{
h
}}
]+
\textrm
{
单层网络
}
\end{array}
\end{array}
\right
.
\right
.
\label
{
eq:1
2
-24
}
\label
{
eq:1
0
-24
}
\end{eqnarray}
\end{eqnarray}
其中
$
\vectorn
{
\emph
{
W
}}$
和
$
\vectorn
{
\emph
{
v
}}$
是可学习的参数。
其中
$
\vectorn
{
\emph
{
W
}}$
和
$
\vectorn
{
\emph
{
v
}}$
是可学习的参数。
...
@@ -765,49 +765,49 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
...
@@ -765,49 +765,49 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\begin{eqnarray}
\begin{eqnarray}
\alpha
_{
i,j
}
=
\frac
{
\textrm
{
exp
}
(
\beta
_{
i,j
}
)
}
{
\sum
_{
i'
}
\textrm
{
exp
}
(
\beta
_{
i',j
}
)
}
\alpha
_{
i,j
}
=
\frac
{
\textrm
{
exp
}
(
\beta
_{
i,j
}
)
}
{
\sum
_{
i'
}
\textrm
{
exp
}
(
\beta
_{
i',j
}
)
}
\label
{
eq:1
2
-25
}
\label
{
eq:1
0
-25
}
\end{eqnarray}
\end{eqnarray}
\vspace
{
0.5em
}
\vspace
{
0.5em
}
最终,
\{
$
\alpha
_{
i,j
}$
\}
可以被看作是一个矩阵,它的长为目标语言句子长度,宽为源语言句子长度,矩阵中的每一项对应一个
$
\alpha
_{
i,j
}$
。图
\ref
{
fig:1
2
-24
}
给出了
\{
$
\alpha
_{
i,j
}$
\}
的一个矩阵表示。图中蓝色方框的大小表示不同的注意力权重
$
\alpha
_{
i,j
}$
的大小,方框越大,源语言位置
$
i
$
和目标语言位置
$
j
$
的相关性越高。能够看到,对于互译的中英文句子,
\{
$
\alpha
_{
i,j
}$
\}
可以较好的反应两种语言之间不同位置的对应关系。
最终,
\{
$
\alpha
_{
i,j
}$
\}
可以被看作是一个矩阵,它的长为目标语言句子长度,宽为源语言句子长度,矩阵中的每一项对应一个
$
\alpha
_{
i,j
}$
。图
\ref
{
fig:1
0
-24
}
给出了
\{
$
\alpha
_{
i,j
}$
\}
的一个矩阵表示。图中蓝色方框的大小表示不同的注意力权重
$
\alpha
_{
i,j
}$
的大小,方框越大,源语言位置
$
i
$
和目标语言位置
$
j
$
的相关性越高。能够看到,对于互译的中英文句子,
\{
$
\alpha
_{
i,j
}$
\}
可以较好的反应两种语言之间不同位置的对应关系。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter1
2
/Figures/figure-matrix-representation-of-attention-weights-between-chinese-english-sentence-pairs
}
\input
{
./Chapter1
0
/Figures/figure-matrix-representation-of-attention-weights-between-chinese-english-sentence-pairs
}
\caption
{
一个汉英句对之间的注意力权重
{$
\alpha
_{
i,j
}$}
的矩阵表示
}
\caption
{
一个汉英句对之间的注意力权重
{$
\alpha
_{
i,j
}$}
的矩阵表示
}
\label
{
fig:1
2
-24
}
\label
{
fig:1
0
-24
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
\parinterval
图
\ref
{
fig:1
2
-25
}
展示了一个上下文向量的计算过程实例。首先,计算目标语言第一个单词“Have”与源语言中的所有单词的相关性,即注意力权重,对应图中第一列
$
\alpha
_{
i,
1
}$
,则当前时刻所使用的上下文向量
$
\vectorn
{
\emph
{
C
}}_
1
=
\sum
_{
i
=
1
}^
8
\alpha
_{
i,
1
}
\vectorn
{
\emph
{
h
}}_
i
$
;然后,计算第二个单词“you”的注意力权重对应第二列
$
\alpha
_{
i,
2
}$
,其上下文向量
$
\vectorn
{
\emph
{
C
}}_
2
=
\sum
_{
i
=
1
}^
8
\alpha
_{
i,
2
}
\vectorn
{
\emph
{
h
}}_
i
$
,以此类推,可以得到任意目标语言位置
$
j
$
的上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
。很容易看出,不同目标语言单词的上下文向量对应的源语言词的权重
$
\alpha
_{
i,j
}$
是不同的,不同的注意力权重为不同位置赋予了不同的重要性。
\parinterval
图
\ref
{
fig:1
0
-25
}
展示了一个上下文向量的计算过程实例。首先,计算目标语言第一个单词“Have”与源语言中的所有单词的相关性,即注意力权重,对应图中第一列
$
\alpha
_{
i,
1
}$
,则当前时刻所使用的上下文向量
$
\vectorn
{
\emph
{
C
}}_
1
=
\sum
_{
i
=
1
}^
8
\alpha
_{
i,
1
}
\vectorn
{
\emph
{
h
}}_
i
$
;然后,计算第二个单词“you”的注意力权重对应第二列
$
\alpha
_{
i,
2
}$
,其上下文向量
$
\vectorn
{
\emph
{
C
}}_
2
=
\sum
_{
i
=
1
}^
8
\alpha
_{
i,
2
}
\vectorn
{
\emph
{
h
}}_
i
$
,以此类推,可以得到任意目标语言位置
$
j
$
的上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
。很容易看出,不同目标语言单词的上下文向量对应的源语言词的权重
$
\alpha
_{
i,j
}$
是不同的,不同的注意力权重为不同位置赋予了不同的重要性。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter1
2
/Figures/figure-example-of-context-vector-calculation-process
}
\input
{
./Chapter1
0
/Figures/figure-example-of-context-vector-calculation-process
}
\caption
{
上下文向量计算过程实例
}
\caption
{
上下文向量计算过程实例
}
\label
{
fig:1
2
-25
}
\label
{
fig:1
0
-25
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\parinterval
在
\ref
{
sec:10.3.1
}
节中,公式
\ref
{
eq:10-5
}
描述了目标语言单词生成概率
$
\funp
{
P
}
(
y
_
j |
\vectorn
{
\emph
{
y
}}_{
<j
}
,
\vectorn
{
\emph
{
x
}}
)
$
。在引入注意力机制后,不同时刻的上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
替换了传统模型中固定的句子表示
$
\vectorn
{
\emph
{
C
}}$
。描述如下:
\parinterval
在
\ref
{
sec:10.3.1
}
节中,公式
\ref
{
eq:10-5
}
描述了目标语言单词生成概率
$
\funp
{
P
}
(
y
_
j |
\vectorn
{
\emph
{
y
}}_{
<j
}
,
\vectorn
{
\emph
{
x
}}
)
$
。在引入注意力机制后,不同时刻的上下文向量
$
\vectorn
{
\emph
{
C
}}_
j
$
替换了传统模型中固定的句子表示
$
\vectorn
{
\emph
{
C
}}$
。描述如下:
\begin{eqnarray}
\begin{eqnarray}
\funp
{
P
}
(y
_
j |
\vectorn
{
\emph
{
y
}}_{
<j
}
,
\vectorn
{
\emph
{
x
}}
)
\equiv
\funp
{
P
}
(y
_
j |
\vectorn
{
\emph
{
s
}}_{
j-1
}
,y
_{
j-1
}
,
\vectorn
{
\emph
{
C
}}_
j )
\funp
{
P
}
(y
_
j |
\vectorn
{
\emph
{
y
}}_{
<j
}
,
\vectorn
{
\emph
{
x
}}
)
\equiv
\funp
{
P
}
(y
_
j |
\vectorn
{
\emph
{
s
}}_{
j-1
}
,y
_{
j-1
}
,
\vectorn
{
\emph
{
C
}}_
j )
\label
{
eq:1
2
-26
}
\label
{
eq:1
0
-26
}
\end{eqnarray}
\end{eqnarray}
\parinterval
这样,可以在生成每个
$
y
_
j
$
时动态的使用不同的源语言表示
$
\vectorn
{
\emph
{
C
}}_
j
$
,并更准确地捕捉源语言和目标语言不同位置之间的相关性。表
\ref
{
tab:1
2
-7
}
展示了引入注意力机制前后译文单词生成公式的对比。
\parinterval
这样,可以在生成每个
$
y
_
j
$
时动态的使用不同的源语言表示
$
\vectorn
{
\emph
{
C
}}_
j
$
,并更准确地捕捉源语言和目标语言不同位置之间的相关性。表
\ref
{
tab:1
0
-7
}
展示了引入注意力机制前后译文单词生成公式的对比。
\vspace
{
0.5em
}
\vspace
{
0.5em
}
%----------------------------------------------
%----------------------------------------------
\begin{table}
[htp]
\begin{table}
[htp]
\centering
\centering
\caption
{
引入注意力机制前后译文单词生成公式
}
\caption
{
引入注意力机制前后译文单词生成公式
}
\label
{
tab:1
2
-7
}
\label
{
tab:1
0
-7
}
\begin{tabular}
{
l | l
}
\begin{tabular}
{
l | l
}
\rule
{
0pt
}{
13pt
}
引入注意力之前
&
引入注意力之后
\\
\hline
\rule
{
0pt
}{
13pt
}
引入注意力之前
&
引入注意力之后
\\
\hline
\rule
{
0pt
}{
16pt
}
$
\textrm
{
have
}
=
\argmax
_{
y
_
1
}
\funp
{
P
}
(
y
_
1
|
\vectorn
{
\emph
{
C
}}
, y
_
0
)
$
&$
\textrm
{
have
}
=
\argmax
_{
y
_
1
}
\funp
{
P
}
(
y
_
1
|
\vectorn
{
\emph
{
C
}}_
1
, y
_
0
)
$
\\
\rule
{
0pt
}{
16pt
}
$
\textrm
{
have
}
=
\argmax
_{
y
_
1
}
\funp
{
P
}
(
y
_
1
|
\vectorn
{
\emph
{
C
}}
, y
_
0
)
$
&$
\textrm
{
have
}
=
\argmax
_{
y
_
1
}
\funp
{
P
}
(
y
_
1
|
\vectorn
{
\emph
{
C
}}_
1
, y
_
0
)
$
\\
...
@@ -820,54 +820,54 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
...
@@ -820,54 +820,54 @@ a (\vectorn{\emph{s}},\vectorn{\emph{h}}) = \left\{ \begin{array}{ll}
% NEW SUB-SECTION
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
\subsection
{
注意力机制的解读
}
\subsection
{
注意力机制的解读
}
\label
{
sec:1
2
.1.4
}
\label
{
sec:1
0
.1.4
}
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\parinterval
从前面的描述可以看出,注意力机制在机器翻译中就是要回答一个问题:给定一个目标语言位置
$
j
$
和一系列源语言的不同位置上的表示
\{
${
\vectorn
{
\emph
{
h
}}_
i
}$
\}
,如何得到一个新的表示
$
\hat
{
\vectorn
{
\emph
{
h
}}}$
,使得它与目标语言位置
$
j
$
对应得最好?
\parinterval
从前面的描述可以看出,注意力机制在机器翻译中就是要回答一个问题:给定一个目标语言位置
$
j
$
和一系列源语言的不同位置上的表示
\{
${
\vectorn
{
\emph
{
h
}}_
i
}$
\}
,如何得到一个新的表示
$
\hat
{
\vectorn
{
\emph
{
h
}}}$
,使得它与目标语言位置
$
j
$
对应得最好?
\parinterval
那么,如何理解这个过程?注意力机制的本质又是什么呢?换一个角度来看,实际上,目标语言位置
$
j
$
可以被看作是一个查询,我们希望从源语言端找到与之最匹配的源语言位置,并返回相应的表示结果。为了描述这个问题,可以建立一个查询系统。假设有一个库,里面包含若干个
$
\mathrm
{
key
}$
-
$
\mathrm
{
value
}$
单元,其中
$
\mathrm
{
key
}$
代表这个单元的索引关键字,
$
\mathrm
{
value
}$
代表这个单元的值。比如,对于学生信息系统,
$
\mathrm
{
key
}$
可以是学号,
$
\mathrm
{
value
}$
可以是学生的身高。当输入一个查询
$
\mathrm
{
query
}$
,我们希望这个系统返回与之最匹配的结果。也就是,希望找到匹配的
$
\mathrm
{
key
}$
,并输出其对应的
$
\mathrm
{
value
}$
。比如,当查询某个学生的身高信息时,可以输入学生的学号,之后在库中查询与这个学号相匹配的记录,并把这个记录中的
$
\mathrm
{
value
}$
(即身高)作为结果返回。
\parinterval
那么,如何理解这个过程?注意力机制的本质又是什么呢?换一个角度来看,实际上,目标语言位置
$
j
$
可以被看作是一个查询,我们希望从源语言端找到与之最匹配的源语言位置,并返回相应的表示结果。为了描述这个问题,可以建立一个查询系统。假设有一个库,里面包含若干个
$
\mathrm
{
key
}$
-
$
\mathrm
{
value
}$
单元,其中
$
\mathrm
{
key
}$
代表这个单元的索引关键字,
$
\mathrm
{
value
}$
代表这个单元的值。比如,对于学生信息系统,
$
\mathrm
{
key
}$
可以是学号,
$
\mathrm
{
value
}$
可以是学生的身高。当输入一个查询
$
\mathrm
{
query
}$
,我们希望这个系统返回与之最匹配的结果。也就是,希望找到匹配的
$
\mathrm
{
key
}$
,并输出其对应的
$
\mathrm
{
value
}$
。比如,当查询某个学生的身高信息时,可以输入学生的学号,之后在库中查询与这个学号相匹配的记录,并把这个记录中的
$
\mathrm
{
value
}$
(即身高)作为结果返回。
\parinterval
图
\ref
{
fig:1
2
-26
}
展示了一个这样的查询系统。里面包含四个
$
\mathrm
{
key
}$
-
$
\mathrm
{
value
}$
单元,当输入查询
$
\mathrm
{
query
}$
,就把
$
\mathrm
{
query
}$
与这四个
$
\mathrm
{
key
}$
逐个进行匹配,如果完全匹配就返回相应的
$
\mathrm
{
value
}$
。在图中的例子中,
$
\mathrm
{
query
}$
和
$
\mathrm
{
key
}_
3
$
是完全匹配的(因为都是横纹),因此系统返回第三个单元的值,即
$
\mathrm
{
value
}_
3
$
。当然,如果库中没有与
$
\mathrm
{
query
}$
匹配的
$
\mathrm
{
key
}$
,则返回一个空结果。
\parinterval
图
\ref
{
fig:1
0
-26
}
展示了一个这样的查询系统。里面包含四个
$
\mathrm
{
key
}$
-
$
\mathrm
{
value
}$
单元,当输入查询
$
\mathrm
{
query
}$
,就把
$
\mathrm
{
query
}$
与这四个
$
\mathrm
{
key
}$
逐个进行匹配,如果完全匹配就返回相应的
$
\mathrm
{
value
}$
。在图中的例子中,
$
\mathrm
{
query
}$
和
$
\mathrm
{
key
}_
3
$
是完全匹配的(因为都是横纹),因此系统返回第三个单元的值,即
$
\mathrm
{
value
}_
3
$
。当然,如果库中没有与
$
\mathrm
{
query
}$
匹配的
$
\mathrm
{
key
}$
,则返回一个空结果。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter1
2
/Figures/figure-query-model-corresponding-to-traditional-query-model-vs-attention-mechanism
}
\input
{
./Chapter1
0
/Figures/figure-query-model-corresponding-to-traditional-query-model-vs-attention-mechanism
}
\caption
{
传统查询模型
}
\caption
{
传统查询模型
}
\label
{
fig:1
2
-26
}
\label
{
fig:1
0
-26
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\parinterval
也可以用这个系统描述翻译中的注意力问题,其中,
$
\mathrm
{
query
}$
即目标语言位置
$
j
$
的某种表示,
$
\mathrm
{
key
}$
和
$
\mathrm
{
value
}$
即源语言每个位置
$
i
$
上的
${
\vectorn
{
\emph
{
h
}}_
i
}$
(这里
$
\mathrm
{
key
}$
和
$
\mathrm
{
value
}$
是相同的)。但是,这样的系统在机器翻译问题上并不好用,因为目标语言的表示和源语言的表示都在多维实数空间上,所以无法要求两个实数向量像字符串一样进行严格匹配,或者说这种严格匹配的模型可能会导致
$
\mathrm
{
query
}$
几乎不会命中任何的
$
\mathrm
{
key
}$
。既然无法严格精确匹配,注意力机制就采用了一个“模糊”匹配的方法。这里定义每个
$
\mathrm
{
key
}_
i
$
和
$
\mathrm
{
query
}$
都有一个0~1之间的匹配度,这个匹配度描述了
$
\mathrm
{
key
}_
i
$
和
$
\mathrm
{
query
}$
之间的相关程度,记为
$
\alpha
_
i
$
。而查询的结果(记为
$
\overline
{
\mathrm
{
value
}}$
)也不再是某一个单元的
$
\mathrm
{
value
}$
,而是所有单元
$
\mathrm
{
value
}$
用
$
\alpha
_
i
$
的加权和:
\parinterval
也可以用这个系统描述翻译中的注意力问题,其中,
$
\mathrm
{
query
}$
即目标语言位置
$
j
$
的某种表示,
$
\mathrm
{
key
}$
和
$
\mathrm
{
value
}$
即源语言每个位置
$
i
$
上的
${
\vectorn
{
\emph
{
h
}}_
i
}$
(这里
$
\mathrm
{
key
}$
和
$
\mathrm
{
value
}$
是相同的)。但是,这样的系统在机器翻译问题上并不好用,因为目标语言的表示和源语言的表示都在多维实数空间上,所以无法要求两个实数向量像字符串一样进行严格匹配,或者说这种严格匹配的模型可能会导致
$
\mathrm
{
query
}$
几乎不会命中任何的
$
\mathrm
{
key
}$
。既然无法严格精确匹配,注意力机制就采用了一个“模糊”匹配的方法。这里定义每个
$
\mathrm
{
key
}_
i
$
和
$
\mathrm
{
query
}$
都有一个0~1之间的匹配度,这个匹配度描述了
$
\mathrm
{
key
}_
i
$
和
$
\mathrm
{
query
}$
之间的相关程度,记为
$
\alpha
_
i
$
。而查询的结果(记为
$
\overline
{
\mathrm
{
value
}}$
)也不再是某一个单元的
$
\mathrm
{
value
}$
,而是所有单元
$
\mathrm
{
value
}$
用
$
\alpha
_
i
$
的加权和:
\begin{eqnarray}
\begin{eqnarray}
\overline
{
\mathrm
{
value
}}
=
\sum
_
i
\alpha
_
i
\cdot
{
\mathrm
{
value
}}_
i
\overline
{
\mathrm
{
value
}}
=
\sum
_
i
\alpha
_
i
\cdot
{
\mathrm
{
value
}}_
i
\label
{
eq:1
2
-27
}
\label
{
eq:1
0
-27
}
\end{eqnarray}
\end{eqnarray}
\noindent
也就是说所有的
$
\mathrm
{
value
}_
i
$
都会对查询结果有贡献,只是贡献度不同罢了。可以通过设计
$
\alpha
_
i
$
来捕捉
$
\mathrm
{
key
}$
和
$
\mathrm
{
query
}$
之间的相关性,以达到相关度越大的
$
\mathrm
{
key
}$
所对应的
$
\mathrm
{
value
}$
对结果的贡献越大。
\noindent
也就是说所有的
$
\mathrm
{
value
}_
i
$
都会对查询结果有贡献,只是贡献度不同罢了。可以通过设计
$
\alpha
_
i
$
来捕捉
$
\mathrm
{
key
}$
和
$
\mathrm
{
query
}$
之间的相关性,以达到相关度越大的
$
\mathrm
{
key
}$
所对应的
$
\mathrm
{
value
}$
对结果的贡献越大。
\parinterval
重新回到神经机器翻译问题上来。这种基于模糊匹配的查询模型可以很好的满足对注意力建模的要求。实际上,公式
\ref
{
eq:1
2-27
}
中的
$
\alpha
_
i
$
就是前面提到的注意力权重,它可以由注意力函数
$
a
(
\cdot
)
$
计算得到。这样,
$
\overline
{
\mathrm
{
value
}}$
就是得到的上下文向量,它包含了所有
\{
$
\vectorn
{
\emph
{
h
}}_
i
$
\}
的信息,只是不同
$
\vectorn
{
\emph
{
h
}}_
i
$
的贡献度不同罢了。图
\ref
{
fig:12
-27
}
展示了将基于模糊匹配的查询模型应用于注意力机制的实例。
\parinterval
重新回到神经机器翻译问题上来。这种基于模糊匹配的查询模型可以很好的满足对注意力建模的要求。实际上,公式
\ref
{
eq:1
0-27
}
中的
$
\alpha
_
i
$
就是前面提到的注意力权重,它可以由注意力函数
$
a
(
\cdot
)
$
计算得到。这样,
$
\overline
{
\mathrm
{
value
}}$
就是得到的上下文向量,它包含了所有
\{
$
\vectorn
{
\emph
{
h
}}_
i
$
\}
的信息,只是不同
$
\vectorn
{
\emph
{
h
}}_
i
$
的贡献度不同罢了。图
\ref
{
fig:10
-27
}
展示了将基于模糊匹配的查询模型应用于注意力机制的实例。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
\centering
\centering
\input
{
./Chapter1
2
/Figures/figure-query-model-corresponding-to-attention-mechanism
}
\input
{
./Chapter1
0
/Figures/figure-query-model-corresponding-to-attention-mechanism
}
\caption
{
注意力机制所对应的查询模型
}
\caption
{
注意力机制所对应的查询模型
}
\label
{
fig:1
2
-27
}
\label
{
fig:1
0
-27
}
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\parinterval
最后,从统计学的角度,如果把
$
\alpha
_
i
$
作为每个
$
\mathrm
{
value
}_
i
$
出现的概率的某种估计,即:
$
\funp
{
P
}
(
\mathrm
{
value
}_
i
$
)
$
=
\alpha
_
i
$
,于是可以把公式
\ref
{
eq:1
2
-27
}
重写为:
\parinterval
最后,从统计学的角度,如果把
$
\alpha
_
i
$
作为每个
$
\mathrm
{
value
}_
i
$
出现的概率的某种估计,即:
$
\funp
{
P
}
(
\mathrm
{
value
}_
i
$
)
$
=
\alpha
_
i
$
,于是可以把公式
\ref
{
eq:1
0
-27
}
重写为:
\begin{eqnarray}
\begin{eqnarray}
\overline
{
\mathrm
{
value
}}
=
\sum
_
i
\funp
{
P
}
(
{
\mathrm
{
value
}}_
i)
\cdot
{
\mathrm
{
value
}}_
i
\overline
{
\mathrm
{
value
}}
=
\sum
_
i
\funp
{
P
}
(
{
\mathrm
{
value
}}_
i)
\cdot
{
\mathrm
{
value
}}_
i
\label
{
eq:1
2
-28
}
\label
{
eq:1
0
-28
}
\end{eqnarray}
\end{eqnarray}
\noindent
显然,
$
\overline
{
\mathrm
{
value
}}$
就是
$
\mathrm
{
value
}_
i
$
在分布
$
\funp
{
P
}
(
\mathrm
{
value
}_
i
$
)下的期望,即
\noindent
显然,
$
\overline
{
\mathrm
{
value
}}$
就是
$
\mathrm
{
value
}_
i
$
在分布
$
\funp
{
P
}
(
\mathrm
{
value
}_
i
$
)下的期望,即
\begin{equation}
\begin{equation}
\mathbb
{
E
}_{
\sim
\\
\funp
{
P
}
(
{
\mathrm
{
\mathrm
{
value
}}}_
i )
}
(
{
\mathrm
{
value
}}_
i) =
\sum
_
i
\funp
{
P
}
(
{
\mathrm
{
value
}}_
i)
\cdot
{
\mathrm
{
value
}}_
i
\mathbb
{
E
}_{
\sim
\\
\funp
{
P
}
(
{
\mathrm
{
\mathrm
{
value
}}}_
i )
}
(
{
\mathrm
{
value
}}_
i) =
\sum
_
i
\funp
{
P
}
(
{
\mathrm
{
value
}}_
i)
\cdot
{
\mathrm
{
value
}}_
i
\label
{
eq:1
2
-29
}
\label
{
eq:1
0
-29
}
\end{equation}
\end{equation}
从这个观点看,注意力机制实际上是得到了一个变量(
$
\mathrm
{
value
}$
)的期望。当然,严格意义上说,
$
\alpha
_
i
$
并不是从概率角度定义的,在实际应用中也并不必须追求严格的统计学意义。
从这个观点看,注意力机制实际上是得到了一个变量(
$
\mathrm
{
value
}$
)的期望。当然,严格意义上说,
$
\alpha
_
i
$
并不是从概率角度定义的,在实际应用中也并不必须追求严格的统计学意义。
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论