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
4d48767d
Commit
4d48767d
authored
Dec 20, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 15)
parent
d17f4b26
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
23 行增加
和
8 行删除
+23
-8
Chapter15/chapter15.tex
+23
-8
没有找到文件。
Chapter15/chapter15.tex
查看文件 @
4d48767d
...
...
@@ -879,11 +879,11 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\parinterval
显然,神经机器翻译系统并没有按照合理的句法结构生成译文。也就是说,模型并没有理解句子的结构
\upcite
{
DBLP:conf/acl/LiXTZZZ17
}
。甚至对于一些语言差异很大的语言对,会出现将介词短语翻译成一个词的情况。虽然可以通过不同的手段对上述问题进行求解,但是使用句法树是最直接的一种解决问题的方法
\upcite
{
DBLP:conf/acl/EriguchiHT16
}
。
\parinterval
那么在神经机器翻译中,如何将这种离散化的树结构融入到基于分布式表示的翻译模型中呢?
目前主流的神经机器翻译模型由编码器和解码器构成,
有以下两种策略:
\parinterval
那么在神经机器翻译中,如何将这种离散化的树结构融入到基于分布式表示的翻译模型中呢?有以下两种策略:
\begin{itemize}
\vspace
{
0.5em
}
\item
将句法树结构加入到编码端,使得编码端更加充分地表示源语言句子
;
\item
将句法树结构加入到编码端,使得编码端更加充分地表示源语言句子
。
\vspace
{
0.5em
}
\item
将句法树结构加入到解码端,使得翻译模型能生成更符合句法的译文。
\vspace
{
0.5em
}
...
...
@@ -895,13 +895,22 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\subsection
{
编码端使用句法信息
}
\parinterval
对基于循环神经网络的翻译模型来说,在源语言端引入树结构可以带来明显的性能提升
\upcite
{
DBLP:conf/acl/EriguchiHT16
}
。其基本思路是将源语言句子编码成一个二叉树结构
\footnote
[7]
{
所有句法树都可以通过二叉化转化为二叉树(见
{
\chaptereight
}
)。
}
,树节点的信息是由左子树和右子树变换而来,如公式
\eqref
{
eq:15-50
}
所示,式中
$
\mathbi
{
h
}_
l
$
和
$
\mathbi
{
h
}_
r
$
分别代表了左孩子节点和右孩子节点的隐藏状态,通过一个非线性函数
$
f
_
\textrm
{
tree
}$
得到父节点的隐藏状态
$
\mathbi
{
h
}_
p
$
。
\parinterval
编码器中使用句法信息有两种思路,一种是在解码器中显性使用树结构进行建模,另一种是把句法信息作为特征输入到序列编码器中。这两种思路与统计机器翻译中基于句法树结构的模型和基于句法特征的模型十分相似(见
{
\chaptereight
}
)。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\subsubsection
{
1. 基于句法树结构的编码
}
\parinterval
在编码端使用树结构的一种思路是将源语言句子编码成一个二叉树结构
\footnote
[7]
{
所有句法树都可以通过二叉化转化为二叉树(见
{
\chaptereight
}
)。
}
,树节点的信息是由左子树和右子树变换而来,如下所示:
\begin{eqnarray}
\mathbi
{
h
}_
p
&
=
&
f
_
\textrm
{
tree
}
(
\mathbi
{
h
}_
l,
\mathbi
{
h
}_
r)
\label
{
eq:15-50
}
\end{eqnarray}
\parinterval
图
\ref
{
fig:15-20
}
展示了一个基于树结构的神经机器翻译编码器,这些编码器由下自上组成了一个树型结构,这种树结构的具体连接形式由句法分析决定。其中
$
\mathbi
{
h
}_
1
,
\mathbi
{
h
}_
2
,
\ldots
,
\mathbi
{
h
}_
n
$
相当于原始RNN中隐藏节点,
$
\mathbi
{
h
}_{
n
+
1
}
,
\mathbi
{
h
}_{
n
+
2
}
,
\ldots
,
\mathbi
{
h
}_{
2
n
-
1
}$
由其左右子节点通过公式
\eqref
{
eq:15-50
}
计算得到。在计算注意力的时候,不同于
{
\chapterten
}
的计算方式,基于树结构的编码器模型利用编码端树结构中的所有节点计算上下文向量
$
\mathbi
{
C
}$
,如公式
\eqref
{
eq:15-51
}
。
\noindent
其中,
$
\mathbi
{
h
}_
l
$
和
$
\mathbi
{
h
}_
r
$
分别代表了左孩子节点和右孩子节点的隐藏状态,通过一个非线性函数
$
f
_
\textrm
{
tree
}$
得到父节点的隐藏状态
$
\mathbi
{
h
}_
p
$
。图
\ref
{
fig:15-20
}
展示了一个基于树结构的循环神经网络编码器
\upcite
{
DBLP:conf/acl/EriguchiHT16
}
。这些编码器由下自上组成了一个树型结构,这种树结构的具体连接形式由句法分析决定。其中
$
\{\mathbi
{
h
}_
1
,
\mathbi
{
h
}_
2
,
\ldots
,
\mathbi
{
h
}_
n
\}
$
是输入序列所对应的循环神经单元,
$
\{\mathbi
{
h
}_{
n
+
1
}
,
\mathbi
{
h
}_{
n
+
2
}
,
\ldots
,
\mathbi
{
h
}_{
2
n
-
1
}
\}
$
对应着树中的节点,它的输出由其左右子节点通过公式
\eqref
{
eq:15-50
}
计算得到。对于注意力模型,图中所有的节点都会参与上下文向量的计算,因此仅需要对
{
\chapterten
}
所描述的计算方式稍加修改,如下:
\begin{eqnarray}
\mathbi
{
C
}_
j
&
=
&
\sum
_{
i=1
}^{
n
}
\alpha
_{
i,j
}
\mathbi
{
h
}_
i +
\sum
_{
i=n+1
}^{
2n-1
}
\alpha
_{
i,j
}
\mathbi
{
h
}_
i
\label
{
eq:15-51
}
...
...
@@ -916,7 +925,7 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\end{figure}
%-------------------------------------------s
\
parinterval
$
\mathbi
{
C
}_
j
$
代表生成第
$
j
$
个目标语言单词所需的源语言信息
{
\red
{
(见10.4.1)
}}
,这样的好处是编码端能更加方便地将一个短语结构表示成一个单元,进而在解码端映射成一个整体。比如,对于英文
句子:
\
noindent
其中,
$
\mathbi
{
C
}_
j
$
代表生成第
$
j
$
个目标语言单词所需的源语言信息。这样做的好处是编码器更容易将一个短语结构表示成一个单元,进而在解码器中映射成一个整体。比如,对于英语
句子:
\begin{equation}
\textrm
{
“ I am having a cup of green tea. ”
}
\nonumber
\end{equation}
...
...
@@ -926,19 +935,25 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\textrm
{
“私は緑茶を飲んでいます”
}
\nonumber
\end{equation}
\noindent
其中,“a cup of green tea”实际上只对应
目标语言“緑茶”一个词
。使用句法树后,“a cup of green tea”会作为树中一个节点,这样可以更好地把它作为一个整体进行翻译。
\noindent
其中,“a cup of green tea”实际上只对应
“緑茶”一个词(
{
\color
{
red
}
怎么看出来只对应一个词???
}
)
。使用句法树后,“a cup of green tea”会作为树中一个节点,这样可以更好地把它作为一个整体进行翻译。
\parinterval
虽然这种自底向上的单向树结构取得了一定的效果,证明了句法信息能够帮助源语言端学到更好的表示结果,但是每个树节点的状态里并不能包含树中其它位置的信息。也就是说,从每个节点上看,其表示结果没有很好的利用上下文。因此,有研究者提出了双向树编码器
\upcite
{
Yang2017TowardsBH,DBLP:conf/acl/ChenHCC17
}
,将自下而上和自上而下的信息传递方式应用于句法树的表示,这样增加了树中每个节点对其覆盖的子树以及周围上下文的建模能力。如图
\ref
{
fig:15-21
}
所示,图中
$
\mathbi
{
h
}^
\textrm
{
up
}$
和
$
\mathbi
{
h
}^
\textrm
{
down
}$
分别代表向上传输节点和向下传输节点的隐藏状态,虚线框代表了
$
\mathbi
{
h
}^
\textrm
{
up
}$
和
$
\mathbi
{
h
}^
\textrm
{
down
}$
会拼接到一起,并作为这个节点的整体表示参与注意力计算。此外,这种方法也有利于改进覆盖度模型
\upcite
{
TuModeling
}{
\red
{
(见14.2.2)
}}
。
\parinterval
但是,这种自底向上的树结构表示方法也存在问题:每个树节点的状态并不能包含树中其它位置的信息。也就是说,从每个节点上看,其表示结果没有很好的利用上下文。因此,可以同时使用自下而上和自上而下的信息传递进行句法树的表示
\upcite
{
Yang2017TowardsBH,DBLP:conf/acl/ChenHCC17
}
,这样增加了树中每个节点对其覆盖的子树以及周围上下文的建模能力。如图
\ref
{
fig:15-21
}
所示,图中
$
\mathbi
{
h
}^
\textrm
{
up
}$
和
$
\mathbi
{
h
}^
\textrm
{
down
}$
分别代表向上传输节点和向下传输节点的状态,虚线框代表了
$
\mathbi
{
h
}^
\textrm
{
up
}$
和
$
\mathbi
{
h
}^
\textrm
{
down
}$
会拼接到一起,并作为这个节点的整体表示参与注意力模型的计算
。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\includegraphics
[scale=0.4]
{
./Chapter15/Figures/figure-encoder-of-bidirectional-tree-structure.png
}
\caption
{
双向树结构编码
端
}
\caption
{
双向树结构编码
模型
}
\label
{
fig:15-21
}
\end{figure}
%-------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\subsubsection
{
2. 基于句法特征的编码
}
\parinterval
不同于直接对树结构进行编码,另一种方法是将词语、句法信息等信息直接转换为特征向量拼接到一起,作为机器翻译系统的输入
\upcite
{
DBLP:conf/wmt/SennrichH16
}
。这种方法的优点在于,句法信息可以无缝融入到现有神经机器翻译框架,对系统结构的修改很小。以基于循环神经网络的翻译模型为例,对于输入序列的
$
i
$
个单词,可以用公式
\eqref
{
eq:15-52
}
计算其表示向量
$
\mathbi
{
h
}_
i
$
时添加特征向量:
\begin{eqnarray}
\mathbi
{
h
}_
i
&
=
&
\textrm
{
tanh
}
(
\mathbi
{
W
}
(
\|
_{
k=1
}^{
|F|
}
\mathbi
{
E
}_
h x
_{
ik
}
) +
\mathbi
{
U
}
\mathbi
{
h
}_{
i-1
}
)
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论