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
22b2990f
Commit
22b2990f
authored
Aug 22, 2020
by
曹润柘
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新 chapter5.tex
parent
85c008e6
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
5 行增加
和
5 行删除
+5
-5
Chapter5/chapter5.tex
+5
-5
没有找到文件。
Chapter5/chapter5.tex
查看文件 @
22b2990f
...
...
@@ -223,7 +223,7 @@ IBM模型由Peter F. Brown等人于上世纪九十年代初提出\cite{DBLP:jour
\subsubsection
{
如何从一个双语平行数据中学习?
}
\parinterval
假设有一定数量的双语对照的平行数据,是否可以从中自动获得两种语言单词之间的翻译概率呢?回忆一下
{
\c
olor
{
red
}{
第二章
}
}
中的掷骰子游戏,其中使用了相对频度估计方法来自动获得骰子不同面出现概率的估计值。其中,重复投掷骰子很多次,然后统计``1''到``6''各面出现的次数,再除以投掷的总次数,最后得到它们出现的概率的极大似然估计。这里,可以使用类似的方式计算单词翻译概率。但是,现在有的是句子一级对齐的数据,并不知道两种语言之间单词的对应关系。也就是,要从句子级对齐的平行数据中学习单词之间对齐的概率。这里,需要使用稍微``复杂''一些的模型来描述这个问题。
\parinterval
假设有一定数量的双语对照的平行数据,是否可以从中自动获得两种语言单词之间的翻译概率呢?回忆一下
{
\c
haptertwo
}
中的掷骰子游戏,其中使用了相对频度估计方法来自动获得骰子不同面出现概率的估计值。其中,重复投掷骰子很多次,然后统计``1''到``6''各面出现的次数,再除以投掷的总次数,最后得到它们出现的概率的极大似然估计。这里,可以使用类似的方式计算单词翻译概率。但是,现在有的是句子一级对齐的数据,并不知道两种语言之间单词的对应关系。也就是,要从句子级对齐的平行数据中学习单词之间对齐的概率。这里,需要使用稍微``复杂''一些的模型来描述这个问题。
令
$
X
$
和
$
Y
$
分别表示源语言和目标语言的词汇表。对于任意源语言单词
$
x
\in
X
$
,所有的目标语单词
$
y
\in
Y
$
都可能是它的译文。给定一个互译的句对
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
,可以把
$
\textrm
{
P
}
(
x
\leftrightarrow
y;
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
定义为:在观测到
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的前提下
$
x
$
和
$
y
$
互译的概率。其中
$
x
$
是属于句子
$
\mathbf
{
s
}$
中的词,而
$
y
$
是属于句子
$
\mathbf
{
t
}$
中的词。
$
\textrm
{
P
}
(
x
\leftrightarrow
y;
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的计算公式描述如下:
\vspace
{
-0.5em
}
...
...
@@ -259,7 +259,7 @@ $\mathbf{t}$ = machine\; {\color{red}translation}\; is\; a\; process\; of\; gene
\label
{
eq:5-3
}
\end{eqnarray}
\noindent
注意,由于``look''没有出现在数据中,因此
$
\textrm
{
P
}
(
\text
{
``机器''
}
,
\text
{
``look''
}
;
\mathbf
{
s
}
,
\mathbf
{
t
}
)=
0
$
。这时,可以使用
{
\c
olor
{
red
}{
第二章
}
}
介绍的平滑算法赋予它一个非零的值,以保证在后续的步骤中整个翻译模型不会出现零概率的情况。
\noindent
注意,由于``look''没有出现在数据中,因此
$
\textrm
{
P
}
(
\text
{
``机器''
}
,
\text
{
``look''
}
;
\mathbf
{
s
}
,
\mathbf
{
t
}
)=
0
$
。这时,可以使用
{
\c
haptertwo
}
介绍的平滑算法赋予它一个非零的值,以保证在后续的步骤中整个翻译模型不会出现零概率的情况。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -345,7 +345,7 @@ $\mathbf{t}^{[2]}$ = So\; ,\; what\; is\; human\; {\color{red}translation}\; ?
\parinterval
当然,这里最核心的问题还是函数
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的定义。而第二个问题其实不需要解决,因为机器翻译只关注于可能性最大的翻译结果,即
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的计算结果最大时对应的译文。这个问题会在后面进行讨论。
\parinterval
回到设计
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的问题上。这里,采用``大题小作''的方法,这个技巧在
{
\c
olor
{
red
}{
第二章
}
}
已经进行了充分的介绍。具体来说,直接建模句子之间的对应比较困难,但可以利用单词之间的对应来描述句子之间的对应关系。这就用到了上一小节所介绍的单词翻译概率。
\parinterval
回到设计
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的问题上。这里,采用``大题小作''的方法,这个技巧在
{
\c
haptertwo
}
已经进行了充分的介绍。具体来说,直接建模句子之间的对应比较困难,但可以利用单词之间的对应来描述句子之间的对应关系。这就用到了上一小节所介绍的单词翻译概率。
\parinterval
首先引入一个非常重要的概念
\ \dash
\
{
\small\sffamily\bfseries
{
词对齐
}}
\index
{
词对齐
}
(Word Alignment)
\index
{
Word Alignment
}
,它是统计机器翻译中最核心的概念之一。词对齐描述了平行句对中单词之间的对应关系,它体现了一种观点:本质上句子之间的对应是由单词之间的对应表示的。当然,这个观点在神经机器翻译或者其他模型中可能会有不同的理解,但是翻译句子的过程中考虑词级的对应关系是符合我们对语言的认知的。图
\ref
{
fig:5-7
}
展示了一个句对
$
\mathbf
{
s
}$
和
$
\mathbf
{
t
}$
,单词的右下标数字表示了该词在句中的位置,而虚线表示的是句子
$
\mathbf
{
s
}$
和
$
\mathbf
{
t
}$
中的词对齐关系。比如,``满意''的右下标数字5表示在句子
$
\mathbf
{
s
}$
中处于第5个位置,``satisfied''的右下标数字3表示在句子
$
\mathbf
{
t
}$
中处于第3个位置,``满意''和``satisfied''之间的虚线表示两个单词之间是对齐的。为方便描述,用二元组
$
(
j,i
)
$
来描述词对齐,它表示源语言句子的第
$
j
$
个单词对应目标语言句子的第
$
i
$
个单词,即单词
$
s
_
j
$
和
$
t
_
i
$
对应。通常,也会把
$
(
j,i
)
$
称作一条
{
\small\sffamily\bfseries
{
词对齐连接
}}
\index
{
词对齐连接
}
。图
\ref
{
fig:5-7
}
中共有5 条虚线,表示有5组单词之间的词对齐连接。可以把这些词对齐连接构成的集合作为词对齐的一种表示,记为
$
A
$
,即
$
A
=
{
\{
(
1
,
1
)
,
(
2
,
4
)
,
(
3
,
5
)
,
(
4
,
2
)(
5
,
3
)
}
\}
$
。
...
...
@@ -393,14 +393,14 @@ g(\mathbf{s},\mathbf{t}) = \prod_{(j,i)\in \widehat{A}}\textrm{P}(s_j,t_i)
\parinterval
如何在
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
引入词序信息呢?我们希望函数
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
对符合自然语言表达习惯的翻译结果给出更高的分数,对于不符合的或不通顺的句子给出更低的分数。这里很自然想到使用语言模型,因为语言模型可以度量一个句子出现的可能性。流畅的句子语言模型得分越高,反之越低。
\parinterval
这里可以使用
{
\c
olor
{
red
}{
第二章
}
}
介绍的
$
n
$
-gram语言模型,它也是统计机器翻译中确保流畅翻译结果的重要手段之一。
$
n
$
-gram语言模型用概率化方法描述了句子的生成过程。以2-gram语言模型为例,可以使用如下公式计算一个词串的概率:
\parinterval
这里可以使用
{
\c
haptertwo
}
介绍的
$
n
$
-gram语言模型,它也是统计机器翻译中确保流畅翻译结果的重要手段之一。
$
n
$
-gram语言模型用概率化方法描述了句子的生成过程。以2-gram语言模型为例,可以使用如下公式计算一个词串的概率:
\begin{eqnarray}
\textrm
{
P
}_{
\textrm
{
lm
}}
(
\mathbf
{
t
}
)
&
=
&
\textrm
{
P
}_{
\textrm
{
lm
}}
(t
_
1...t
_
l)
\nonumber
\\
&
=
&
\textrm
{
P
}
(t
_
1)
\times
\textrm
{
P
}
(t
_
2|t
_
1)
\times
\textrm
{
P
}
(t
_
3|t
_
2)
\times
...
\times
\textrm
{
P
}
(t
_
l|t
_{
l-1
}
)
\label
{
eq:5-9
}
\end{eqnarray}
\noindent
其中,
$
\mathbf
{
t
}
=
t
_
1
...t
_
l
$
表示由
$
l
$
个单词组成的句子,
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
\mathbf
{
t
}
)
$
表示语言模型给句子
$
\mathbf
{
t
}$
的打分。具体而言,
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
\mathbf
{
t
}
)
$
被定义为
$
\textrm
{
P
}
(
t
_
i|t
_{
i
-
1
}
)(
i
=
1
,
2
,...,l
)
$
的连乘
\footnote
{
为了确保数学表达的准确性,这书中定义
$
\textrm
{
P
}
(
t
_
1
|t
_
0
)
\equiv
\textrm
{
P
}
(
t
_
1
)
$}
,其中
$
\textrm
{
P
}
(
t
_
i|t
_{
i
-
1
}
)(
i
=
1
,
2
,...,l
)
$
表示前面一个单词为
$
t
_{
i
-
1
}$
时,当前单词为
$
t
_
i
$
的概率。语言模型的训练方法可以参看
{
\c
olor
{
red
}{
第二章
}
}
相关内容。
\noindent
其中,
$
\mathbf
{
t
}
=
t
_
1
...t
_
l
$
表示由
$
l
$
个单词组成的句子,
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
\mathbf
{
t
}
)
$
表示语言模型给句子
$
\mathbf
{
t
}$
的打分。具体而言,
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
\mathbf
{
t
}
)
$
被定义为
$
\textrm
{
P
}
(
t
_
i|t
_{
i
-
1
}
)(
i
=
1
,
2
,...,l
)
$
的连乘
\footnote
{
为了确保数学表达的准确性,这书中定义
$
\textrm
{
P
}
(
t
_
1
|t
_
0
)
\equiv
\textrm
{
P
}
(
t
_
1
)
$}
,其中
$
\textrm
{
P
}
(
t
_
i|t
_{
i
-
1
}
)(
i
=
1
,
2
,...,l
)
$
表示前面一个单词为
$
t
_{
i
-
1
}$
时,当前单词为
$
t
_
i
$
的概率。语言模型的训练方法可以参看
{
\c
haptertwo
}
相关内容。
\parinterval
回到建模问题上来。既然语言模型可以帮助系统度量每个译文的流畅度,那么可以使用它对翻译进行打分。一种简单的方法是把语言模型
$
\textrm
{
P
}_{
\textrm
{
lm
}}{
(
\mathbf
{
t
}
)
}$
和公式
\ref
{
eq:5-7
}
中的
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
相乘,这样就得到了一个新的
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
,它同时考虑了翻译准确性(
$
\prod
_{
j,i
\in
\widehat
{
A
}}{
\textrm
{
P
}
(
s
_
j,t
_
i
)
}$
)和流畅度(
$
\textrm
{
P
}_{
\textrm
{
lm
}}
(
\mathbf
{
t
}
)
$
):
\begin{eqnarray}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论