Commit aa6c2d09 by 曹润柘

updates

parent e31fccc6
......@@ -10,14 +10,14 @@
\begin{scope}
{
{\footnotesize
\node [anchor=north west] (rule1) at (0,0) {\textbf{1: If} 源=`我', \textbf{then} 译=`I'};
\node [anchor=north west] (rule2) at ([yshift=0.1em]rule1.south west) {\textbf{2: If} 源=`你', \textbf{then} 译=`you'};
\node [anchor=north west] (rule3) at ([yshift=0.1em]rule2.south west) {\textbf{3: If} 源=`感到 满意',};
\node [anchor=north west] (rule3part2) at ([yshift=0.5em]rule3.south west) {\textbf{\hspace{0.95em} then} 译=`be satisfied with'};
\node [anchor=north west] (rule4) at ([yshift=0.1em]rule3part2.south west) {\textbf{4: If} 源=`对 ... 动词[表态度]'};
\node [anchor=north west] (rule1) at (0,0) {\textbf{1: If} 源=``我'', \textbf{then} 译=``I''};
\node [anchor=north west] (rule2) at ([yshift=0.1em]rule1.south west) {\textbf{2: If} 源=``你'', \textbf{then} 译=``you''};
\node [anchor=north west] (rule3) at ([yshift=0.1em]rule2.south west) {\textbf{3: If} 源=``感到 满意'',};
\node [anchor=north west] (rule3part2) at ([yshift=0.5em]rule3.south west) {\textbf{\hspace{0.95em} then} 译=``be satisfied with''};
\node [anchor=north west] (rule4) at ([yshift=0.1em]rule3part2.south west) {\textbf{4: If} 源=``对 ... 动词[表态度]''};
\node [anchor=north west] (rule4part2) at ([yshift=0.5em]rule4.south west) {\textbf{\hspace{0.95em} then} 调序[动词 + 对象]};
\node [anchor=north west] (rule5) at ([yshift=0.1em]rule4part2.south west) {\textbf{5: If} 译文主语是`I'};
\node [anchor=north west] (rule5part2) at ([yshift=0.5em]rule5.south west) {\textbf{\hspace{0.95em} then} be动词为`am/was'};
\node [anchor=north west] (rule5) at ([yshift=0.1em]rule4part2.south west) {\textbf{5: If} 译文主语是``I''};
\node [anchor=north west] (rule5part2) at ([yshift=0.5em]rule5.south west) {\textbf{\hspace{0.95em} then} be动词为``am/was''};
\node [anchor=north west] (rule6) at ([yshift=0.1em]rule5part2.south west) {\textbf{6: If} 源语是主谓结构};
\node [anchor=north west] (rule6part2) at ([yshift=0.5em]rule6.south west) {\textbf{\hspace{0.95em} then} 译文为主谓结构};
\node [anchor=south west] (rulebaselabel) at (rule1.north west) {{\color{ublue} 资源:规则库}};
......
......@@ -10,12 +10,12 @@
{
\begin{scope}
{\scriptsize
\node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=`他 在 哪 ?'};
\node [anchor=north west] (example1part2) at ([yshift=0.2em]example1.south west) {\hspace{1em} 译=`Where is he ?'};
\node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=`我 真高兴'};
\node [anchor=north west] (example2part2) at ([yshift=0.2em]example2.south west) {\hspace{1em} 译=`I'm so happy'};
\node [anchor=north west] (example3) at ([yshift=0.1em]example2part2.south west) {\textbf{3:} 源=`出发 !'};
\node [anchor=north west] (example3part2) at ([yshift=0.2em]example3.south west) {\hspace{1em} 译=`Let's go!'};
\node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=``他 在 哪 ?''};
\node [anchor=north west] (example1part2) at ([yshift=0.2em]example1.south west) {\hspace{1em} 译=``Where is he ?''};
\node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=``我 真高兴''};
\node [anchor=north west] (example2part2) at ([yshift=0.2em]example2.south west) {\hspace{1em} 译=``I'm so happy''};
\node [anchor=north west] (example3) at ([yshift=0.1em]example2part2.south west) {\textbf{3:} 源=``出发 !''};
\node [anchor=north west] (example3part2) at ([yshift=0.2em]example3.south west) {\hspace{1em} 译=``Let's go!''};
\node [anchor=north west] (example4) at ([yshift=0.1em]example3part2.south west) {\hspace{1em} ...};
\node [anchor=north west] (example5) at ([yshift=0.1em]example4.south west) {\hspace{1em}\quad};
\node [anchor=north west] (example6) at ([yshift=0.1em]example5.south west) {\hspace{1em}\quad};
......
......@@ -10,10 +10,10 @@
\begin{scope}
{
{\footnotesize
\node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=`什么 时候 开始 ?'};
\node [anchor=north west] (example1part2) at ([yshift=0.5em]example1.south west) {\hspace{1em} 译=`When will it start ?'};
\node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=`我 对 他 感到 高兴'};
\node [anchor=north west] (example2part2) at ([yshift=0.5em]example2.south west) {\hspace{1em} 译=`I am happy with him'};
\node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=``什么 时候 开始 ?''};
\node [anchor=north west] (example1part2) at ([yshift=0.5em]example1.south west) {\hspace{1em} 译=``When will it start ?''};
\node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=``我 对 他 感到 高兴''};
\node [anchor=north west] (example2part2) at ([yshift=0.5em]example2.south west) {\hspace{1em} 译=``I am happy with him''};
\node [anchor=north west] (example3) at ([yshift=0.1em]example2part2.south west) {\hspace{1em} ...};
\node [anchor=south west] (examplebaselabel) at (example1.north west) {{\color{ublue} 资源1:翻译实例库}};
}
......
......@@ -12,7 +12,7 @@
\section{机器翻译的概念}\index{Chapter1.1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\parinterval 广义上来讲,``翻译''是指把一个事物转化为另一个事物的过程。这个概念多使用在对可序列化符号串的转化上,比如计算机程序的编译、文字翻译和蛋白质生物合成等。在程序编译中,高级语言编写的程序经过一系列的处理后转化为可执行目标程序,这是一种从高级程序语言到低级程序语言的``翻译''。在人类语言的翻译中,一种语言的文字通过某种方式转化为另一种语言的表达,这是一种自然语言的``翻译''。在蛋白质生成合成的第一步,RNA分子序列转化到特定氨基酸序列,这是一种生物学遗传信息的``翻译''。甚至说,给上联对出下联、给一幅图片写出图片的主题等都可以被看作是``翻译''的过程。
\vspace{0.5em}
%----------------------------------------------
% 图1.1
\begin{figure}[htp]
......@@ -160,8 +160,7 @@
\end{figure}
%-------------------------------------------
\vspace{-0.5em}
\parinterval\ref{fig:comparison-mt-ht}展示了一个真实的汉语到英语翻译实例。对比发现,机器翻译与人工翻译还是存在差距的,特别是在翻译一些具有感情色彩的词语时,机器翻译的译文缺一些味道。那么,机器翻译一点用都没有吗 -显然不是。实际上,如果考虑翻译速度与翻译代价,机器翻译的价值是无可比拟的。还是同一个例子,如果人工翻译需要30分钟甚至更长时间,而机器翻译仅仅需要两秒,换种情况思考,如果有100万篇这样的文档,其人工翻译的成本根本无法想象,消耗的时间更是难以计算,而计算机集群仅仅需要一天,而且只有电力的消耗。
\parinterval\ref{fig:comparison-mt-ht}展示了一个真实的汉语到英语翻译实例。对比发现,机器翻译与人工翻译还是存在差距的,特别是在翻译一些具有感情色彩的词语时,机器翻译的译文缺一些味道。那么,机器翻译一点用都没有吗?显然不是。实际上,如果考虑翻译速度与翻译代价,机器翻译的价值是无可比拟的。还是同一个例子,如果人工翻译需要30分钟甚至更长时间,而机器翻译仅仅需要两秒,换种情况思考,如果有100万篇这样的文档,其人工翻译的成本根本无法想象,消耗的时间更是难以计算,而计算机集群仅仅需要一天,而且只有电力的消耗。
%\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\
%----------------------------------------------
% 图1.9
......@@ -198,12 +197,6 @@
\subsection{基于实例的机器翻译}\index{Chapter1.4.2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\parinterval 基于规则的方法更多的被使用在受限翻译场景的中,比如受限词汇集的翻译。针对基于规则的方法的问题,基于实例的机器翻译于上世纪80年代中期被提出\cite{nagao1984framework}该方法的基本思想是在双语句库中找到与待翻译句子相似的实例,之后对实例的译文进行必要修改,如替换、增加、删除等一系列操作,从而得到最终译文。这个过程可以类比人类学习并运用语言的过程:人会先学习一些翻译实例或者模板,当遇到新的句子时,会用以前的实例和模板作对比,之后得到新的句子的翻译结果。这也是一种举一反三的思想。
\parinterval\ref{fig:zh-sentences-into-en-sentences}展示了一个基于实例的机器翻译过程。它利用简单的翻译实例库与翻译词典完成对句子``我对你感到满意''的翻译。首先,使用待翻译源于句子在翻译实例库进行比较,根据相似度大小找到相似的实例``我对他感到高兴''。然后,标记实例中不匹配的部分,即``你''和``他'',``满意''和``高兴''。再查询翻译词典得到词``你''和``满意''对应的翻译结果``you''和``satisfied'',用这两个词分别替换实例中的``him''和``happy'',从而得到最终译文。
\parinterval 当然,基于实例的机器翻译也并不完美。首先,这种方法对翻译实例的精确度要求非常高,一个实例的错误可能会导致一个句型都无法翻译正确;其次,实例维护较为困难,实例库的构建通常需要单词一级对齐的标注,而保证词对齐的质量是非常困难的工作,这也大大增加了实例库维护的难度;再有,尽管可以通过实例或者模板进行翻译,但是其覆盖度仍然有限。在实际应用中,很多句子无法找到可以匹配的实例或者模板。
%----------------------------------------------
% 图1.10
\begin{figure}[htp]
......@@ -214,11 +207,13 @@
\end{figure}
%-------------------------------------------
\parinterval\ref{fig:zh-sentences-into-en-sentences}展示了一个基于实例的机器翻译过程。它利用简单的翻译实例库与翻译词典完成对句子``我对你感到满意''的翻译。首先,使用待翻译源于句子在翻译实例库进行比较,根据相似度大小找到相似的实例``我对他感到高兴''。然后,标记实例中不匹配的部分,即``你''和``他'',``满意''和``高兴''。再查询翻译词典得到词``你''和``满意''对应的翻译结果``you''和``satisfied'',用这两个词分别替换实例中的``him''和``happy'',从而得到最终译文。
\parinterval 当然,基于实例的机器翻译也并不完美。首先,这种方法对翻译实例的精确度要求非常高,一个实例的错误可能会导致一个句型都无法翻译正确;其次,实例维护较为困难,实例库的构建通常需要单词一级对齐的标注,而保证词对齐的质量是非常困难的工作,这也大大增加了实例库维护的难度;再有,尽管可以通过实例或者模板进行翻译,但是其覆盖度仍然有限。在实际应用中,很多句子无法找到可以匹配的实例或者模板。
\subsection{统计机器翻译}\index{Chapter1.4.3}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\parinterval 统计机器翻译兴起于上世纪90年代\cite{brown1990statistical}\cite{koehn2003statistical}它利用统计模型从单/双语语料中自动学习翻译知识。具体来说,可以使用单语语料学习语言模型,使用双语平行语料学习翻译模型,并使用这些统计模型完成对翻译过程的建模。整个过程不需要人工编写规则,也不需要从实例中构建翻译模板。无论是词、短语,甚至句法结构,统计机器翻译系统都可以自动学习,人更多的是参与定义翻译所需的特征和基本翻译单元的形式。而翻译知识都保存在模型的参数中。
%----------------------------------------------
% 图1.11
\begin{figure}[htp]
......@@ -301,9 +296,9 @@
\subsection{人工评价}\index{Chapter1.5.1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\parinterval 顾名思义,人工评价是指专家根据翻译结果好坏对译文进行评价。一般会根据句子的准确度和流利度对其进行打分,这样能够准确评定出句子是否准确翻译出原文的意思句子是否通顺。在对一个句子进行评定时,一般由多个专家匿名打分后进行综合评定。人工评价是最能准确反映句子翻译质量的评价方式,但是其缺点也十分明显:需要耗费人力物力,而且评价的周期长,不能及时得到有效的反馈。因此在实际系统开发中,纯人工评价不会过于频繁的被使用,它往往和自动评价一起配合,帮助系统研发人员准确的了解当前系统的状态。
\parinterval 顾名思义,人工评价是指专家根据翻译结果好坏对译文进行评价。一般会根据句子的准确度和流利度对其进行打分,这样能够准确评定出句子是否准确翻译出原文的意思以及句子是否通顺。在对一个句子进行评定时,一般由多个专家匿名打分后进行综合评定。人工评价是最能准确反映句子翻译质量的评价方式,但是其缺点也十分明显:需要耗费人力物力,而且评价的周期长,不能及时得到有效的反馈。因此在实际系统开发中,纯人工评价不会过于频繁的被使用,它往往和自动评价一起配合,帮助系统研发人员准确的了解当前系统的状态。
\parinterval 人工评价的策略非常多。考虑不同的因素,往往会导致不同的评价方案,比如:
\parinterval 人工评价的策略非常多。考虑不同的因素,往往会使用不同的评价方案,比如:
\vspace{0.5em}
\begin{itemize}
......@@ -314,17 +309,15 @@
\vspace{0.5em}
\item 评价者选择:理想情况下,评价者应同时具有源语言和目标语言的语言能力。但是,很多场景下双语能力的评价者很难招募,因此这时会考虑使用目标语为母语的评价者。配合参考译文,单语评价者也可以准确的进行评价。
\vspace{0.5em}
\item 多个系统评价:如果多个不同系统的译文,可以直接使用每个系统单独打分的方法。但是,如果仅仅是想了解不同译文之间的相对好坏,也可以采用竞评的方式,即对于每个句子,对不同系统根据译文质量进行排序,这样做的效率会高于直接打分,而且评价准确性也能够得到保证。
\item 多个系统评价:如果多个不同系统的译文,可以直接使用每个系统单独打分的方法。但是,如果仅仅是想了解不同译文之间的相对好坏,也可以采用竞评的方式,即对于每个句子,对不同系统根据译文质量进行排序,这样做的效率会高于直接打分,而且评价准确性也能够得到保证。
\vspace{0.5em}
\item 数据选择:评价数据一般需要根据目标任务进行采集,为了避免和系统训练数据重复,往往会搜集最新的数据。而且,评价数据的规模越大,评价结果越科学。常用的做法是搜集一定量的评价数据,之后从中采样出所需的数据。由于不同的采样会得到不同的评价集合,这样的方法可以复用多次,得到不同的测试集。
\vspace{0.5em}
\item 面向应用的评价:除了人工直接打分,一种更有效的方法是把机器翻译的译文嵌入的下游应用中,通过机器翻译对下游应用的改善效果评估机器翻译译文质量。比如,可以把机器翻译放入人工译文后编辑流程中,通过观察人工编辑效率的提升来评价译文质量。再比如,把机器翻译放入线上应用中,通过点击率或者用户反馈来评价机器翻译的品质。
\vspace{0.5em}
\end{itemize}
\vspace{0.5em}
\parinterval 简而言之,研究者可以根据实际情况选择不同的人工评价方案,人工评价也没有统一的标准。WMT和CCMT机器翻译评测都有配套的人工评价方案,可以作为业界的参考标准。
\subsection{自动评价}\index{Chapter1.5.2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\parinterval 由于人工评价费事费力,同时具有一定的主观性,甚至同一篇文章不同人在不同时刻的理解都会不同,因此自动评价是也是机器翻译系统研发人员所青睐的方法。自动评价的方式虽然不如人工评价准确,但是具有速度快,成本低、一致性高的优点。而且随着评价技术的不断发展,自动评价方式已经具有了比较好的指导性,可以帮助我们快速了解当前机器翻译译文的质量。在机器翻译领域,自动评价已经成为了一个重要的分支,提出的自动评价方法不下几十种。在这里我们无法对这些方法一一列举,为了便于后续章节的描述,这里仅对代表性的一些方法进行简要介绍。
......@@ -355,7 +348,7 @@ Candidate:the the the the
\label{eq:weighted-average}
\end{eqnarray}
\parinterval 但是,该方法更倾向于对短句子打出更高的分数,一个极端的例子译文只有很少的几个词,但是都命中答案,准确率很可显然不是好的译文。因此,BLEU引入惩罚因子(Brevity Penalty, BP)的概念,对短句进行惩罚,
\parinterval 但是,该方法更倾向于对短句子打出更高的分数,一个极端的例子译文只有很少的几个词,但是都命中答案,准确率很可显然不是好的译文。因此,BLEU引入惩罚因子(Brevity Penalty, BP)的概念,对短句进行惩罚,
\begin{eqnarray}
\textrm{BP}=
\begin{cases}
......@@ -481,7 +474,7 @@ His house is on the south bank of the river.
\parinterval (十)社交
\parinterval 社交是人们的重要社会活动,在当今的互联网时代中,数量繁多的社交软件在极大地方便了人们的同时,也改变了人们的生活方式。人们可以通过各种各样的社交软件做到即时通讯,进行协作或者分享自己的观点。然而受限于语言问题,人们的社交范围往往不会超出自己所掌握的语种范围,很难方便地进行跨语言社交。随着机器翻译技术的发展,越来越多的社交软件开始支持自动翻译,用户可以轻易地将各种语言的内容翻译成自己的母语,方便了人们的交流,让语言问题不再是社交的障碍。
\parinterval 社交是人们的重要社会活动,在当今的互联网时代中,数量繁多的社交软件在极大地方便了人们的同时,也改变了人们的生活方式。人们可以通过各种各样的社交软件做到即时通讯,进行协作或者分享自己的观点。然而受限于语言问题,人们的社交范围往往不会超出自己所掌握的语种范围,很难方便地进行跨语言社交。随着机器翻译技术的发展,越来越多的社交软件开始支持自动翻译,用户可以轻易地将各种语言的内容翻译成自己的母语,方便了人们的交流,让语言问题不再是社交的障碍。\\ \\ \\ \\
\section{开源项目与评测}\index{Chapter1.7}
\subsection{开源机器翻译系统}\index{Chapter1.7.1}
......@@ -500,9 +493,9 @@ His house is on the south bank of the river.
\vspace{0.5em}
\item SilkRoad:SilkRoad是由中国五个大学(CAS-ICT,CAS-IA,CAS-IS,XMU 和HIT)联合开发的,基于短语的SMT 系统。该系统是亚洲地区第一个开源的SMT系统,其主旨为支持中文-外文的翻译。它有几个有用的部分,比如分词模块(可使使用者更容易的搭建中文-外文的机器翻译系统)。此外,SilkRoad还支持多解码器和规则提取并为不同组合的子系统提供了不同的实验选择。\url{http://www.nlp.org.cn/project/project.php?projid=14}
\vspace{0.5em}
\item SAMT:SAMT是由卡内基梅隆大学MT小组开发的语法增强的SMT系统(syn\\tax-augmented SMT system)。SAMT在解码的时候使用目标树来生成翻译规则,而不严格遵守目标语言的语法。SAMT的一个亮点是它提供了简单但高效的方式来利用在SMT中句法信息,并且在一些任务中这样做有很好的结果甚至超过了基于层次短语的系统。由于SAMT在hadoop中实现,它可受益于跨计算机群的大数据集的分布式处理。\url{http://www.cs.cmu.edu/zollmann/samt/}
\item SAMT:SAMT是由卡内基梅隆大学MT小组开发的语法增强的SMT系统(syn\\tax-augmented SMT system)。SAMT在解码的时候使用目标树来生成翻译规则,而不严格遵守目标语言的语法。SAMT的一个亮点是它提供了简单但高效的方式来利用在SMT中句法信息,并且在一些任务中这样做有很好的结果,其效果甚至超过了基于层次短语的系统。由于SAMT在hadoop中实现,它可受益于跨计算机群的大数据集的分布式处理。\url{http://www.cs.cmu.edu/zollmann/samt/}
\vspace{0.5em}
\item cdec:cdec是一个强大的解码器,是由Chris Dyer 和他的合作者们一起开发。cdec的主要的功能是它使用了翻译模型的一个统一的内部表示,并为实验结构预测问题的各种模型和算法提供了框架。所以,cdec也可以在SMT中被用来做一个对齐器或者一个更通用的学习框架。此外,cdec由于高效的使用C++语言编写,所以非常快。\url{http://cdec-decoder.org/index.php?title=MainPage}
\item cdec:cdec是一个强大的解码器,是由Chris Dyer 和他的合作者们一起开发。cdec的主要的功能是它使用了翻译模型的一个统一的内部表示,并为实验结构预测问题的各种模型和算法提供了框架。所以,cdec也可以在SMT中被用来做一个对齐器或者一个更通用的学习框架。此外,cdec由于使用高效的C++语言编写,所以非常快。\url{http://cdec-decoder.org/index.php?title=MainPage}
\vspace{0.5em}
\item Phrasal:Phrasal是由斯坦福自然语言处理小组开发的系统。除了传统的基于短语的模型,Phrasal还支持了基于非层次短语的模型,这种模型将基于短语的翻译延伸到短语中断翻译(phrasal discontinues translation)。通过这种方式,它可以在未见的数据集上得到更好的泛化甚至可以处理在层次结构模型中丢失的信息。\url{http://nlp.stanford.edu/phrasal/}
\vspace{0.5em}
......@@ -548,7 +541,7 @@ His house is on the south bank of the river.
\vspace{0.5em}
\item Nmtpytorch:由勒芒大学语言实验室发布的基于序列到序列框架的神经网络翻译模型,Nmtpytorch的核心部分依赖于Numpy,Pytorch和tqdm。其允许训练各种端到端神经体系结构,包括但不限于神经机器翻译,图像字幕和自动语音识别系统。\url{https://github.com/lium-lst/nmtpytorch}
\vspace{0.5em}
\item DL4MT:由Cho Lab at NYU CS and CDS团队构建的多编码器、多解码器或多路NMT模型。项目主要使用Theano 构建计算图,吸取了其他NMT系统搭建的经验,构建了调度器来管理调度多个数据流从而训练多个计算图,从而加快训练速度。同时该团队还提供了对应的学习材料,进一步讲解整个项目的细节。\url{https://github.com/nyu-dl/dl4mt-multi}
\item DL4MT:由Cho Lab at NYU CS and CDS团队构建的多编码器、多解码器或多路NMT模型。项目主要使用Theano 构建计算图,吸取了其他NMT系统搭建的经验,构建了调度器来管理调度多个数据流从而训练多个计算图,从而加快训练速度。同时该团队还提供了对应的学习材料,进一步讲解整个项目的细节。\url{https://github.com/nyu-dl/dl4mt-multi}
\vspace{0.5em}
\item ModerNMT:由modernmt团队搭建的基于Fairseq Tranformer模型的上下文感知、增量和分布式通用的神经机器翻译技术,易于使用和扩展。它通过将所有可用的项目/客户数据和翻译记忆库集中在一个文件夹中进行训练,通过提供要翻译的句子和可选的一些上下文文本来查询。\url{https://github.com/ModernMT/MMT}
\end{itemize}
......@@ -570,7 +563,7 @@ His house is on the south bank of the river.
\vspace{0.5em}
\item 日本举办的机器翻译评测WAT是亚洲范围内的重要评测之一,由日本科学振兴机构(JST)、情报通信研究机构(NICT)等多家机构共同组织,旨在为亚洲各国之间交流融合提供便宜之处。语言方向主要包括亚洲主流语言(汉语、韩语、印地语等)以及英语对日语的翻译,领域丰富多样,包括学术论文、专利、新闻、食谱等。评价方式包括自动评价(BLEU、RIBES以及AMFM 等)以及人工评价,其特点在于对于测试语料以段落为单位进行评价,考察其上下文关联的翻译效果。更多WAT的机器翻译评测相关信息可参考官网:\url{http://lotus.kuee.kyoto-u.ac.jp/WAT/}
\vspace{0.5em}
\item NTCIR计划是由日本国家科学咨询系统中心策划主办的,旨在建立一个用在自然语言处理以及信息检索相关任务上的日文标准测试集。从1999年至今,NTCIR评测任务已举办13届,每届可能涉及不同的评测任务。在NTCIR-9的和NTCIR-10中开设的Patent Machine Translation(PatentMT)任务主要针对专利领域进行翻译测试,其目的在于促进机器翻译在专利领域的发展和应用。在NTCIR-9中,评测方式采取人工评价与自动评价相结合,以人工评价为主导。人工评价主要根据忠实度和流畅度进行评估,自动评价采用BLEU、NIST的方式进行。NTCIR-10评价方式在此基础上增加了专利审查评估、时间评估以及多语种评估,分别考察机器翻译系统在专利领域翻译的实用性、耗时情况以及不同语种的翻译效果等。更多NTCIR评测相关信息可参考官网:\url{http://research.nii.ac.jp/ntcir/index-en.html}
\item NTCIR计划是由日本国家科学咨询系统中心策划主办的,旨在建立一个用在自然语言处理以及信息检索相关任务上的日文标准测试集。从1999年至今,NTCIR评测任务已举办13届,每届可能涉及不同的评测任务。在NTCIR-9的和NTCIR-10中开设的Patent Machine Translation(PatentMT)任务主要针对专利领域进行翻译测试,其目的在于促进机器翻译在专利领域的发展和应用。在NTCIR-9中,评测方式采取人工评价与自动评价相结合,以人工评价为主导。人工评价主要根据准确度和流畅度进行评估,自动评价采用BLEU、NIST的方式进行。NTCIR-10评价方式在此基础上增加了专利审查评估、时间评估以及多语种评估,分别考察机器翻译系统在专利领域翻译的实用性、耗时情况以及不同语种的翻译效果等。更多NTCIR评测相关信息可参考官网:\url{http://research.nii.ac.jp/ntcir/index-en.html}
\end{itemize}
\vspace{0.5em}
......@@ -591,7 +584,7 @@ His house is on the south bank of the river.
\parinterval Ian Goodfellow、Yoshua Bengio,Aaron Courville三位机器学习领域的学者所写的《深度学习》也是值得一读的参考书。其讲解了有关深度学习常用的方法,其中很多都会在深度学习模型设计和使用中用到。同时在《深度学习》应用一章中也简单讲解了神经机器翻译的任务定义和发展过程。
\parinterval 《机器学习》由南京大学教授周志华教授所著,作为机器学习领域入门教材,该书尽可能地涵盖了机器学习基础知识的各个方面,试图尽可能少地使用数学知识接受机器学习方法与思想。在机器翻译中使用的很多机器学习概念和方法可以从该书中进行学习。
\parinterval 《机器学习》由南京大学教授周志华教授所著,作为机器学习领域入门教材,该书尽可能地涵盖了机器学习基础知识的各个方面,试图尽可能少地使用数学知识介绍机器学习方法与思想。在机器翻译中使用的很多机器学习概念和方法可以从该书中进行学习。
\parinterval TensorFlow官网提供了一个有关神经机器翻译的教程,介绍了从数据处理开始如何利用TensorFlow工具从零搭建一个神经机器翻译系统以及如何解码,其地址为\url{https://www.tensorflow.org/tutorials/text/nmt\_with\_attention}。此外谷歌和Facebook也分别提供了基于序列到序列机器翻译模型的高级教程。谷歌的版本是基于TensorFlow实现,网址为:\url{https://github.com/tensorflow/nmt},Facebook的教程主要是基于PyTorch实现--\url{https://pytorch.org/tutorials/intermediate/seq2seq\_translation\_tutorial.html}。网站上也包含一些综述论文详细的介绍了神经机器翻译的发展历程,问题定义以及目前遇到的问题。
......@@ -605,7 +598,7 @@ His house is on the south bank of the river.
\vspace{0.5em}
\item EMNLP,全称Conference on Empirical Methods in Natural Language Processing ,自然语言处理另一个顶级会议之一,由ACL当中对语言数据和经验方法有特殊兴趣的团体主办,始于1996年。会议比较偏重于方法和经验性结果。
\vspace{0.5em}
\item COLING,全称Int'l Committee on Computational Linguistics (ICCL) Conf.,自然语言处理老牌顶级会议之一。该会议始于1965年,是由ICCL国际计算语言学委员会主办,自从第三届会议在斯德哥尔摩举办之后,会议简称为COLING,是谐音瑞典著名作家 Albert Engstr$\ddot{\textrm{o}}$m小说中的虚构人物Kolingen。COLING每两年举一次。
\item COLING,全称Int'l Committee on Computational Linguistics (ICCL) Conf.,自然语言处理老牌顶级会议之一。该会议始于1965年,是由ICCL国际计算语言学委员会主办,自从第三届会议在斯德哥尔摩举办之后,会议简称为COLING,是谐音瑞典著名作家 Albert Engstr$\ddot{\textrm{o}}$m小说中的虚构人物Kolingen。COLING每两年举一次。
\vspace{0.5em}
\item WMT,全称Conference on Machine Translation。机器翻译领域一年一度研讨会,是国际公认的顶级机器翻译赛事之一。
\vspace{0.5em}
......@@ -619,13 +612,7 @@ His house is on the south bank of the river.
\vspace{0.5em}
\end{itemize}
\vspace{0.5em}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{appendices}
\chapter{附录A}
\label{appendix-A}
\end{appendices}
......
......@@ -3,11 +3,14 @@
\begin{axis}[
width=12cm,
height=4cm,
xlabel={$\textrm{P}(x)$},
ylabel={$\textrm{I}(x)$},
ylabel style={yshift=-0.5cm},
xlabel={{$\textrm{P}(x)$}},
ylabel={{$\textrm{I}(x)$}},
ylabel style={yshift=-1.5em,font=\footnotesize},
xlabel style={yshift=0.3em,font=\footnotesize},
xtick={0,0.2,...,1.0},
ytick={0,1,2},
y tick style={opacity=0},
x tick style={opacity=0},
domain=0:1,
enlarge x limits=true,
enlarge y limits={upper},
......@@ -15,10 +18,12 @@
xmin=0,
xmax=1,
ymin=0,
ymax=2
ymax=2,
xticklabel style={font=\small}, %坐标轴字体大小
yticklabel style={font=\small}
]
\addplot[draw=ublue,thick] {170*exp(-x-4)-1};
\legend{$\textrm{I}(x) \cdot \textrm{P}(x)$}
\addplot[draw=blue!40,thick] {170*exp(-x-4)-1};
\legend{\footnotesize{$\textrm{I}(x) \cdot \textrm{P}(x)$}}
\end{axis}
\end{tikzpicture}
......
......@@ -56,18 +56,18 @@
\node[rectangle,draw=ublue, inner sep=0.2em] [fit = (treebanklabel) (t1n1) (t2w1) (t2wn)] (treebank) {};
\end{pgfonlayer}
\node [anchor=north west] (math1) at ([xshift=2em]treebank.north east) {P('VP $\to$ VV NN')};
\node [anchor=north west] (math1part2) at ([xshift=-1em,yshift=0.2em]math1.south west) {$=\frac{\textrm{'VP'和'VV NN'同时出现的次数=1}}{\textrm{'VP'出现的次数}=4}$};
\node [anchor=north west] (math1) at ([xshift=2em]treebank.north east) {P(``VP $\to$ VV NN'')};
\node [anchor=north west] (math1part2) at ([xshift=-1em,yshift=0.2em]math1.south west) {$=\frac{\textrm{``VP''和``VV NN''同时出现的次数=1}}{\textrm{``VP''出现的次数}=4}$};
\node [anchor=north west] (math1part3) at ([yshift=0.2em]math1part2.south west){$=\frac{1}{4}$};
\node [anchor=north west] (math2) at ([yshift=-6em]math1.north west) {P('NP $\to$ NN')};
\node [anchor=north west] (math2part2) at ([xshift=-1em,yshift=0.2em]math2.south west) {$=\frac{\textrm{'NP'和'NN'同时出现的次数=2}}{\textrm{'NP'出现的次数}=3}$};
\node [anchor=north west] (math2) at ([yshift=-6em]math1.north west) {P(``NP $\to$ NN'')};
\node [anchor=north west] (math2part2) at ([xshift=-1em,yshift=0.2em]math2.south west) {$=\frac{\textrm{``NP''和``NN''同时出现的次数=2}}{\textrm{``NP''出现的次数}=3}$};
\node [anchor=north west] (math2part3) at ([yshift=0.2em]math2part2.south west){$=\frac{2}{3}$};
\node [anchor=north west] (math3) at ([yshift=-6em]math2.north west) {P('IP $\to$ NP NP')};
\node [anchor=north west] (math3part2) at ([xshift=-1em,yshift=0.2em]math3.south west) {$=\frac{\textrm{'IP'和'NP NP'同时出现的次数=0}}{\textrm{'IP'出现的次数}=3}$};
\node [anchor=north west] (math3) at ([yshift=-6em]math2.north west) {P(``IP $\to$ NP NP'')};
\node [anchor=north west] (math3part2) at ([xshift=-1em,yshift=0.2em]math3.south west) {$=\frac{\textrm{``IP''和``NP NP''同时出现的次数=0}}{\textrm{``IP''出现的次数}=3}$};
\begin{pgfonlayer}{background}
......
......@@ -64,7 +64,7 @@
\node [anchor=west] (label1) at (0,-6.8em) {\textbf{自动分词系统}:对任意的数据句子$S$,找到最佳的分词结果$W^{*}$输出};
}
{
\node [anchor=north west] (label2) at (label1.south west) {假设输入$S$='确实现在数据很多'};
\node [anchor=north west] (label2) at (label1.south west) {假设输入$S$=“确实现在数据很多”};
}
{
\node [anchor=north west,draw,thick,inner sep=2pt] (data11) at (label2.south west) {枚举所有可能的切分};
......@@ -87,12 +87,12 @@
\node [anchor=north west] (data21) at (data11.south west) {确/实现/在/数/据很/多};
}
{
\node [anchor=north west] (data22) at (data12.south west) {$\textrm{P}(\textrm{'确'}) \cdot \textrm{P}(\textrm{'实现'}) \cdot \textrm{P}(\textrm{'在'}) \cdot \textrm{P}(\textrm{'数'}) \cdot $};
\node [anchor=north west] (data22) at (data12.south west) {$\textrm{P}(\textrm{“确”}) \cdot \textrm{P}(\textrm{“实现”}) \cdot \textrm{P}(\textrm{“在”}) \cdot \textrm{P}(\textrm{“数”}) \cdot $};
}
\node [anchor=north west,minimum height=1.6em] (data23) at (data13.south west) {};
\node [anchor=north west,minimum height=1.6em] (data31) at ([yshift=0.3em]data21.south west) {};
{
\node [anchor=north west] (data32) at ([yshift=0.3em]data22.south west) {$\textrm{P}(\textrm{'据很'}) \cdot \textrm{P}(\textrm{'多'}) = 2.13 \times 10^{-45}$};
\node [anchor=north west] (data32) at ([yshift=0.3em]data22.south west) {$\textrm{P}(\textrm{“据很”}) \cdot \textrm{P}(\textrm{“多”}) = 2.13 \times 10^{-45}$};
}
\node [anchor=north west,minimum height=1.6em] (data33) at ([yshift=0.3em]data23.south west) {};
......@@ -100,7 +100,7 @@
\node [anchor=north west] (data41) at (data31.south west) {确实/现在/数据/很多};
}
{
\node [anchor=north west] (data42) at (data32.south west) {$\textrm{P}(\textrm{'确实'}) \cdot \textrm{P}(\textrm{'现在'}) \cdot \textrm{P}(\textrm{'数据'}) \cdot $};
\node [anchor=north west] (data42) at (data32.south west) {$\textrm{P}(\textrm{“确实”}) \cdot \textrm{P}(\textrm{“现在”}) \cdot \textrm{P}(\textrm{“数据”}) \cdot $};
}
{
\node [anchor=north west] (data43) at ([yshift=-0.2em]data33.south west) {\color{red}{\textbf{输出}}};
......@@ -110,7 +110,7 @@
\node [anchor=north west] (data51) at (data41.south west) {...};
}
{
\node [anchor=north west] (data52) at ([yshift=0.3em]data42.south west) {$\textrm{P}(\textrm{'很'}) \cdot \textrm{P}(\textrm{'多'}) = 1.54 \times 10^{-25}$};
\node [anchor=north west] (data52) at ([yshift=0.3em]data42.south west) {$\textrm{P}(\textrm{“很”}) \cdot \textrm{P}(\textrm{“多”}) = 1.54 \times 10^{-25}$};
}
\node [anchor=north west] (data53) at ([yshift=0.3em]data43.south west) {};
}
......
......@@ -11,16 +11,16 @@
\begin{tikzpicture}
\node [anchor=west] (label1) at (0,0) {总词数:$6 + 8 + 5 = 20$};
\node [anchor=north west] (p1) at (label1.south west) {$\textrm{P}('\textrm{}')=1/20=0.05$};
\node [anchor=north west] (p2) at (p1.south west) {$\textrm{P}('\textrm{}')=3/20=0.15$};
\node [anchor=north west] (p3) at (p2.south west) {$\textrm{P}('\textrm{确实}')=1/20=0.05$};
\node [anchor=north west] (p1) at (label1.south west) {$\textrm{P}(\textrm{“很”})=1/20=0.05$};
\node [anchor=north west] (p2) at (p1.south west) {$\textrm{P}(\textrm{“。”})=3/20=0.15$};
\node [anchor=north west] (p3) at (p2.south west) {$\textrm{P}(\textrm{“确实”})=1/20=0.05$};
\node [anchor=north west] (label11) at ([xshift=18.0em,yshift=1.63em]label1.south west) {更多数据-总词数:100K $\sim$ 1M};
\node [anchor=north west] (p12) at (label11.south west) {$\textrm{P}('\textrm{}')=0.000010$};
\node [anchor=north west] (p22) at (p12.south west) {$\textrm{P}('\textrm{}')=0.001812$};
\node [anchor=north west] (p32) at (p22.south west) {$\textrm{P}('\textrm{确实}')=0.000001$};
\node [anchor=north west] (p12) at (label11.south west) {$\textrm{P}(\textrm{“很”})=0.000010$};
\node [anchor=north west] (p22) at (p12.south west) {$\textrm{P}(\textrm{“。”})=0.001812$};
\node [anchor=north west] (p32) at (p22.south west) {$\textrm{P}(\textrm{“确实”})=0.000001$};
......
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\begin{tikzpicture}
\begin{tikzpicture}%画图中的属性如xshift应该是通用的,前面的关键字如xlabel规定了修改的部分
\begin{axis}[
%align=left,
%axis x line=right,
%axis y line=left,
width=12cm, height=5.5cm,
width=10cm, height=4.5cm,
symbolic x coords={未抽取词,do,want,what,am,people,look},%自定义x坐标
%enlargelimits=0.15,%x轴移动
xtick=data,%自定义x坐标
ytick={0,0.05,0.1,0.15,0.2,0.25},
xlabel={低概率词汇},
ylabel={词汇概率},
legend pos=outer north east,%图标位置
xlabel style={align=right,xshift=6.5cm,yshift=1cm},
ylabel style={rotate=-90,yshift=3cm,xshift=1cm},
y tick label style={/pgf/number format/.cd,fixed,precision=2},%y轴精度,不用科学表示
xlabel style={align=right,xshift=5.3cm,yshift=0.8cm,font=\footnotesize},
ylabel style={rotate=-90,yshift=2cm,xshift=1cm,font=\footnotesize},
y tick style={opacity=0},%隐藏y轴刻度线
x tick style={opacity=0},%隐藏x轴刻度线
x tick label style={anchor=base,font=\footnotesize,yshift=-0.5cm},
y tick label style={font=\footnotesize,/pgf/number format/.cd,fixed,precision=2},%y轴精度,不用科学表示
y axis line style={opacity=0},%隐藏y轴
tick align=inside,%原本的横行线
ymajorgrids,%显示横行线
axis x line*=bottom,%显示汉字
%legend entries={未平滑,平滑后},%右上图标
%clip=false,%不剪切
%xlabel shift=5cm,%整体右移
ymajorgrids,%显示横行网格线
axis x line*=bottom,%显示x轴坐标汉字(应该是对齐)
major grid style={dotted,draw=ublue},%横行线颜色
%enlarge x limits=true,%扩展x轴长度,防止边缘bar部分显示
axis on top,%网格线位于顶层
legend style={anchor=north west},%图标格式
legend style={anchor=north west,font=\footnotesize},%图标格式
ymin=0,
ymax=0.25]
\addplot [ybar,bar shift=-3mm,bar width=6mm,fill=blue!20,draw=blue!20,area legend] coordinates{(未抽取词,0) (do,0.05) (want,0.05) (what,0.05) (am,0.1) (people,0.15) (look,0.2)};
\addplot [ybar,bar shift=3mm,bar width=6mm,fill=red!20,draw=blue!20,area legend] coordinates{(未抽取词,0.03) (do,0.062) (want,0.062) (what,0.062) (am,0.09) (people,0.122) (look,0.138)};
\legend{未平滑,平滑后}
\addplot [ybar,bar shift=-2mm,bar width=4mm,fill=blue!40,draw=blue!40,area legend] coordinates{(未抽取词,0) (do,0.05) (want,0.05) (what,0.05) (am,0.1) (people,0.15) (look,0.2)};%area legend图例显示长方形颜色
\addplot [ybar,bar shift=2mm,bar width=4mm,fill=red!40,draw=red!40,area legend] coordinates{(未抽取词,0.03) (do,0.062) (want,0.062) (what,0.062) (am,0.09) (people,0.122) (look,0.138)};
\legend{未平滑,平滑后}%右上图例
\end{axis}
\end{tikzpicture}
%---------------------------------------------------------------------
......@@ -13,7 +13,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {1};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}("1") = 5/30$};
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{1}) = 5/30$};
\end{scope}
\begin{scope}[yshift=-2.5em]
......@@ -22,7 +22,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{red} 2}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}("2") = 4/30$};
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{2}) = 4/30$};
\end{scope}
\begin{scope}[yshift=-5.0em]
......@@ -31,7 +31,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{ublue} 3}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}("3") = 6/30$};
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{3}) = 6/30$};
\end{scope}
\begin{scope}[yshift=-7.5em]
......@@ -40,7 +40,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{ugreen} 4}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}("4") = 12/30$};
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{4}) = 12/30$};
\end{scope}
\begin{scope}[yshift=-10.0em]
......@@ -49,7 +49,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{purple} 5}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}("5") = 2/30$};
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{5}) = 2/30$};
\end{scope}
\begin{scope}[yshift=-12.5em]
......@@ -58,7 +58,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{orange} 6}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}("6") = 1/30$};
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{6}) = 1/30$};
\end{scope}
\end{tikzpicture}
......
\definecolor{ublue}{rgb}{0.152,0.250,0.545}
\begin{tikzpicture}
\begin{axis}[
width=12cm,
height=6cm,
xlabel={某语料中的词汇},
width=11cm,
height=5.5cm,
xlabel={某语料中的词汇},
ylabel={词汇出现总次数},
xlabel style={xshift=6.6cm,yshift=1cm},
ylabel style={rotate=-90,yshift=3cm,xshift=1.2cm},
xlabel style={xshift=6.2cm,yshift=0.8cm,font=\footnotesize},
ylabel style={rotate=-90,yshift=2.8cm,xshift=1.2cm,font=\footnotesize},
xticklabel style={opacity=0},
ytick={0,10000000,20000000,30000000,40000000,50000000,60000000},
tick align=inside,
y tick style={opacity=0},
x tick style={opacity=0},
y axis line style={opacity=0},
ymajorgrids,
major grid style={dotted,draw=ublue},
ybar,
bar width=0.5,
axis x line*=bottom,
xmin=0,
xmax=105,
ymin=0,
ymax=60000000
]
\addplot[fill=blue!20,draw=ublue] coordinates{(1,56000000)
\addplot[fill=blue!40,draw=blue!40] coordinates{(1,56000000)
(2,34000000)
(3,30000000)
(4,27000000)
......@@ -128,3 +131,40 @@
\end{tikzpicture}
%---------------------------------------------------------------------
......@@ -66,11 +66,12 @@
\parinterval 本章将会对上述问题及方法进行介绍。首先,会用一个例子给出统计建模的基本思路,之后会应用这种方法进行中文分词、语言建模和句法分析。
%--概率论基础-----------------------------------------
\vspace{-1.5em}
\section{概率论基础}\index{Chapter2.2}
\parinterval 为了便于后续内容的介绍,首先对本书中使用的概率和统计学概念和符号与定理进行说明。
%--随机变量和概率---------------------
\subsection{随机变量和概率}\index{Chapter2.2.1}
\parinterval 在自然界中,有这样一类具有偶然性的事件,它在一定条件下是否会发生是不确定的。例如,明天会下雨、掷一枚硬币是正面朝上、扔一个骰子的点数是5……这类可能会发生也可能不会发生,通过大量的重复试验,能发现其发生具有某种规律性的事件叫做\textbf{随机事件}
\parinterval 在自然界中,有这样一类具有偶然性的事件,它在一定条件下是否会发生是不确定的。例如,明天会下雨、掷一枚硬币是正面朝上、扔一个骰子的点数是5$\cdots\cdots$这类可能会发生也可能不会发生,通过大量的重复试验,能发现其发生具有某种规律性的事件叫做\textbf{随机事件}
\parinterval \textbf{随机变量(random variable)}是对随机事件发生可能状态的描述,是随机事件的数量表征。设$\Omega = \{ \omega \}$为一个随机试验的样本空间,$X=X(\omega)$就是定义在样本空间$\omega$上的、取值为实数的单值函数,即$X=X(\omega)$为随机变量,记为$X$。随机变量是一种能随机选取数值的变量,常用大写的英文字母或希腊字母表示,其取值通常用小写字母来表示。例如,用$A$表示一个随机变量,用$a$表示变量$A$的一个取值。根据随机变量可以选取的值,可以将其划分为离散变量和连续变量。
......@@ -211,7 +212,7 @@
\parinterval 由此可以看出使用链式法则可以大大减小求解概率表达式时的计算量。
\subsection{贝叶斯法则(Bayes’Rule)}\index{Chapter2.2.4}
\subsection{贝叶斯法则}\index{Chapter2.2.4}
\parinterval 首先介绍一下全概率公式:全概率公式(Law of total probability)是概率论中重要的公式,它可以将一个复杂事件发生的概率分解成不同情况的小事件发生概率的和。这里我们先介绍一个概念——划分。
......@@ -277,7 +278,7 @@
\label{eqC2.14-new}
\end{eqnarray}
\parinterval 由上式,我们也可以得到贝叶斯公式的另外两种写法
\parinterval 由上式,我们也可以得到贝叶斯公式的另外两种写法:
\begin{eqnarray}
\textrm{P}(A \mid B)=\frac { \textrm{P}(A \mid B)\textrm{P}(B) } {\textrm{P}(A)}
\label{eqC2.15-new}
......@@ -314,14 +315,13 @@
\end{eqnarray}
\parinterval 其中,$\textrm{P}(x)$表示概率,自信息用来衡量单一事件发生时所包含的信息多少,当底数为e时,单位为$nats$,其中1$nats$是通过观察概率为$\frac{1}{e}$的事件而获得的信息量;当底数为2时,单位为$bits$$shannons$,我们通常使用前者。$\textrm{I}(x)$$\textrm{P}(x)$的函数关系如图\ref{fig:Self-information-function} 所示:
%----------------------------------------------
% 图2.5
% 图2.6
\begin{figure}[htp]
\centering
\input{./Chapter2/Figures/figure-Self-information-function}
\setlength{\belowcaptionskip}{-1.5em}
\caption{\red{自信息函数图像}}
\setlength{\belowcaptionskip}{-1.0em}
\caption{自信息函数图像}
\label{fig:Self-information-function}
\end{figure}
%-------------------------------------------
......@@ -361,10 +361,10 @@
\end{eqnarray}
\parinterval 结合相对熵公式可知,交叉熵是KL距离公式中的右半部分。因此,求关于Q的交叉熵的最小值等价于求KL距离的最小值。交叉熵与KL距离的意义相同:都是用来描述两个分布的差异,由于交叉熵计算上更加直观方便,因此在机器翻译中被广泛应用。
\vspace{-1.0em}
\section{中文分词}\index{Chapter2.3}
\parinterval 对于机器翻译系统而言,输入的是已经切分好的单词序列,而不是原始的字符串。比如,对于一个中文句子,单词之间是没有间隔的,因此我们需要把一个个的单词切分出来,这样机器翻译系统可以区分不同单元。甚至,我们可以对语言学上的单词进行进一步切分,得到词片段序列(比如:中国人=>中国 人)。我们可以把上述过程看作是一种\textbf{分词(segmentation)}过程,即:将一个输入的自然语言字符串切割成单元序列(token序列),每个单元都对应可以处理的最小单位。
\parinterval 对于机器翻译系统而言,输入的是已经切分好的单词序列,而不是原始的字符串。比如,对于一个中文句子,单词之间是没有间隔的,因此我们需要把一个个的单词切分出来,这样机器翻译系统可以区分不同单元。甚至,我们可以对语言学上的单词进行进一步切分,得到词片段序列(比如:中国人$\Rightarrow$中国 人)。我们可以把上述过程看作是一种\textbf{分词(segmentation)}过程,即:将一个输入的自然语言字符串切割成单元序列(token序列),每个单元都对应可以处理的最小单位。
%----------------------------------------------
% 图2.7
......@@ -375,6 +375,7 @@
\label{fig:a-simple-pre-processing-process}
\end{figure}
%-------------------------------------------
\vspace{-0.5em}
\parinterval 分词得到的单元序列可以是语言学上的词序列,也可以是根据其它定义的单元。在本章中,我们把分词得到的一个个单元称为单词,尽管这些单元可以不是语言学上的完整单词。而这个过程也被称作词法分析。除了汉语,词法分析在日语、泰语等单词之间无明确分割符的语言中有着广泛的应用,芬兰语、维吾尔语等一些形态学十分丰富的语言,也需要使用词法分析来解决复杂的词尾、词缀变化等形态学变化。
\parinterval 在机器翻译中,分词系统的好坏往往会决定机器翻译的质量。分词的目的是定义系统处理的基本单元,那么什么叫做``词''呢?关于词的定义有很多,比如:\\
......@@ -395,7 +396,7 @@
\parinterval 从语言学的角度,普遍认为词是可以单独运用的、包含意义的基本单位。我们使用有限的词可以组合出无限的句子,这也正体现出自然语言的奇妙之处。
\parinterval 不过,机器翻译并不仅仅局限在语言学定义的单词,因此机器翻译系统所使用的分词也不仅仅把句子按照词切开,比如,神经机器翻译中广泛使用的BPE子词切分方法,可以被理解为将词的一部分也进行切开,也就是得到词片段送给机器翻译系统使用。比如,对如下英文字符串,可以得到如下切分结果\\
\parinterval 不过,机器翻译并不仅仅局限在语言学定义的单词,因此机器翻译系统所使用的分词也不仅仅把句子按照词切开,比如,神经机器翻译中广泛使用的BPE子词切分方法,可以被理解为将词的一部分也进行切开,也就是得到词片段送给机器翻译系统使用。比如,对如下英文字符串,可以得到如下切分结果
\parinterval Interesting \; -> \; Interest/ing selection \;->\;se/lect/ion procession \hspace{0.23em} -> \; pro/cess/ion
......@@ -468,11 +469,11 @@
%-------------------------------------------
\parinterval\ref{fig:word-segmentation-based-on-statistics} 给出了一个基于统计建模的汉语分词实例。左侧是标注数据,其中的每个句子已经经过人工标注分词结果(单词用斜杠分开)。之后,建立一个统计模型,记为P(·)。模型通过在标注数据上的学习达到能够很好描述问题的状态。最后,对于新的未分词的句子,使用模型P(·)对每个可能的分切进行概率估计,之后选择概率最高的切分结果输出。
\vspace{-0.5em}
\subsubsection{掷骰子游戏}\index{Chapter2.3.2.2}
\parinterval 上述过程的核心在于从数据中学习一种对分词现象的统计描述,即学习函数P(·)。如何让计算机利用分词好的数据学习到分词结果呢?可以先看一个有趣的实例,用我们生活中比较常见的掷骰子来说,掷一个骰子,玩家猜一个数字,猜中就算赢,按照一般的常识,随便选一个数字,获胜的概率是一样的,即我们所有选择的获胜概率仅是1/6。因此这个游戏玩家很难获胜,除非运气很好。假如,我们进行一次游戏,玩家随便选了一个数字,比如是1,投掷30骰子,得到命中7/30 > 1/6,还不错。
\vspace{-0.5em}
%----------------------------------------------
% 图2.11
\begin{figure}[htp]
......@@ -483,13 +484,17 @@
\label{fig:the-dice-game}
\end{figure}
%-------------------------------------------
\vspace{-0.5em}
\parinterval 似乎玩家的胜利只能来源于运气。不过,请注意,这里的假设``随便选一个数字''这本身就是一个概率模型,它对骰子的六个面的出现做了均匀分布假设。
\begin{eqnarray}
\textrm{P(``1'')}=\textrm{P(``2'')}=...=\textrm{P(``5'')}=\textrm{P(``6'')}=1/6
\label{eqC2.21-new}
\end{eqnarray}
\vspace{-0.5em}
\parinterval 但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。但是如果骰子的六个面不均匀呢?我们可以用一种更加``聪明''的方式定义一个新模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。这里,为了保证概率的归一性,我们只需定义$\theta_1 \sim \theta_5$,最后一个面的概率用1减去前几个面的概率之和进行表示,即
\vspace{-1.0em}
\begin{eqnarray}
\textrm{P(``1'')} &=&\theta_1 \nonumber \\
\textrm{P(``2'')} &=&\theta_2 \nonumber \\
......@@ -595,7 +600,7 @@
\parinterval 通过这个学习过程,我们得到了每个词出现的概率,即模型的参数。而我们原始的问题是如何计算这个整句分词结果的概率,比如
\begin{equation}
\textrm{P}\textrm{(`确实/现在/数据/很/多')}=?
\textrm{P}\textrm{(``确实/现在/数据/很/多'')}=?
\label{eqC2.24-new}
\end{equation}
......@@ -607,8 +612,8 @@
\end{eqnarray}
}
\begin{eqnarray}
&\textrm{P}&\textrm{(`确实/现在/数据/很/多')} \nonumber \\
& = &\textrm{P}\textrm{(`确实')} \cdot \textrm{P}\textrm{(`现在')} \cdot \textrm{P}\textrm{(`数据')} \cdot \textrm{P}\textrm{(`很')} \cdot \textrm{P}\textrm{(`多')} \nonumber \\
&\textrm{P}&\textrm{(``确实/现在/数据/很/多'')} \nonumber \\
& = &\textrm{P}\textrm{(``确实'')} \cdot \textrm{P}\textrm{(``现在'')} \cdot \textrm{P}\textrm{(``数据'')} \cdot \textrm{P}\textrm{(``很'')} \cdot \textrm{P}\textrm{(``多'')} \nonumber \\
& = &0.000001 \times 0.000022 \times 0.000009 \times 0.000010 \times 0.000078 \nonumber \\
& = &1.5444 \times 10^{-25}
\label{eqC2.26-new}
......@@ -706,9 +711,9 @@
\parinterval 使用$n$-gram语言模型非常简单。我们可以像2.3.2节中一样,直接用它来对词序列出现的概率进行计算。比如,可以使用一个2-gram语言模型计算一个分词序列的概率
\begin{eqnarray}
& &\textrm{P}_{2-gram}{(\textrm{`确实}/\textrm{现在}/\textrm{数据}/\textrm{}/\textrm{'})} \nonumber \\
&= & \textrm{P}(\textrm{`确实'}) \times\textrm{P}(\textrm{`现在'}|\textrm{`确实'})\times\textrm{P}(\textrm{`数据'}|\textrm{`现在'}) \nonumber \\
& \times & \textrm{P}(\textrm{`很'}|\textrm{`数据'})\times\textrm{P}(\textrm{`多'}|\textrm{`很'})
& &\textrm{P}_{2-gram}{(\textrm{``确实}/\textrm{现在}/\textrm{数据}/\textrm{}/\textrm{多''})} \nonumber \\
&= & \textrm{P}(\textrm{``确实''}) \times\textrm{P}(\textrm{``现在''}|\textrm{``确实''})\times\textrm{P}(\textrm{``数据''}|\textrm{``现在''}) \nonumber \\
& \times & \textrm{P}(\textrm{``很''}|\textrm{``数据''})\times\textrm{P}(\textrm{``多''}|\textrm{``很''})
\label{eqC2.30-new}
\end{eqnarray}
......@@ -717,28 +722,27 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{未登录词和平滑算法}\index{Chapter2.4.2}
\parinterval 在式\ref{eqC2.30-new}的例子中,如果语料中从没有``确实''和``现在''两个词连续出现的情况,那么使用2-gram计算 ``确实/现在/数据/很/多''的切分方式的概率时,会出现如下情况
\parinterval 在式\ref{eqC2.30-new}的例子中,如果语料中从没有``确实''和``现在''两个词连续出现的情况,那么使用2-gram计算``确实/现在/数据/很/多''的切分方式的概率时,会出现如下情况
\begin{eqnarray}
\textrm{P}(\textrm{`现在'}|\textrm{`确实'}) = \frac{\textrm{count}(\textrm{`确实}\,\textrm{现在'})}{\textrm{count}(\textrm{`确实'})} = \frac{0}{\textrm{count}(\textrm{`确实'})} = 0
\textrm{P}(\textrm{``现在''}|\textrm{``确实''}) = \frac{\textrm{count}(\textrm{``确实}\,\textrm{现在''})}{\textrm{count}(\textrm{``确实''})} = \frac{0}{\textrm{count}(\textrm{``确实''})} = 0
\label{eqC2.31-new}
\end{eqnarray}
\parinterval 显然,这个结果是不能接受的。因为即使语料中没有 ``确实''和``现在''两个词连续出现,但是这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个切分结果的概率为0。更常见的问题是那些根本没有出现在词表中的词,称为\textbf{未登录词(Out-of-Vocabulary, OOV)},比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0概率。图\ref{fig:word-frequency-distribution}展示了词语出现频度的分布,可以看到绝大多数词都是低频词。
%----------------------------------------------
% 图2.18
\begin{figure}[htp]
\centering
\input{./Chapter2/Figures/figure-word-frequency-distribution}
\caption{\red{词语频度分布}}
\caption{词语频度分布}
\label{fig:word-frequency-distribution}
\end{figure}
%---------------------------
\parinterval 为了解决未登录词引起的零概率问题,常用的做法是对模型进行平滑处理,也就是给可能出现的情况一个非零的概率,使得模型不会对整个序列给出零概率。平滑可以用``劫富济贫''这一思想理解,在保证所有情况的概率和为1的前提下,使极低概率的部分可以从高概率的部分分配一部分概率,从而达到平滑的目的。
\parinterval 语言模型使用的平滑算法有很多,比如加法平滑方法、古德-图灵估计法、Katz平滑法等。在本节中,主要介绍三种平滑方法:加法平滑法、古德-图灵估计法和Kneser-Ney平滑。这些方法也可以被使用到机器翻译中其它模型的概率平滑任务中。
\parinterval 语言模型使用的平滑算法有很多,比如:加法平滑方法、古德-图灵估计法、Katz平滑法等。在本节中,主要介绍三种平滑方法:加法平滑法、古德-图灵估计法和Kneser-Ney平滑。这些方法也可以被使用到机器翻译中其它模型的概率平滑任务中。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{加法平滑方法}\index{Chapter2.4.2.1}
......@@ -765,12 +769,12 @@
% 图2.19
\begin{figure}[htp]
\centering
\input{./Chapter2/Figures/figure-no-smoothing&smoothed-probability-distributions}
\caption{\red{无平滑和有平滑后的概率分布}}
\input{./Chapter2/Figures/figure-no-smoothing&smoothed-probability-distributions}
\caption{无平滑和有平滑后的概率分布}
\label{fig:no-smoothing&smoothed-probability-distributions}
\end{figure}
%-------------------------------------------
\vspace{-1.5em}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{古德-图灵估计法}\index{Chapter2.4.2.2}
......@@ -825,11 +829,12 @@ N = \sum_{r>0}{p_r n_r} = 1 - \frac{n_1}{N} < 1
}\end{table}
%------------------------------------------------------
\vspace{-1.5em}
\parinterval 很多时候会出现$n_{r+1}=0$的情况,这是对于当$r$很大的时候很常见的情况,而且通常情况下当$r$很大时,$n_r$也会有噪音的存在。这种简单的Good-Turing方法无法应对这些复杂的情况,随着更多的研究和发展,成为了一些其他平滑方法的基础。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Kneser-Ney平滑方法}\index{Chapter2.4.2.3}
\vspace{-1.0em}
\parinterval Kneser-Ney平滑方法由R.Kneser和H.Ney于1995年提出的用于计算$n$元语法概率分布的方法\cite{kneser1995improved}\cite{chen1999empirical}。基于absolute discounting,并被广泛认为是最有效的平滑方法。这种平滑方法改进了absolute discounting中与高阶分布相结合的低阶分布的计算方法,使不同阶分布得到充分的利用。这种算法综合利用了其他多种平滑算法的思想,是一种先进而且标准的平滑算法。
\parinterval 首先介绍一下absolute discounting平滑算法,公式如下所示:
......@@ -918,7 +923,7 @@ c_{\textrm{KN}}(\cdot) & = & \begin{cases} \textrm{count}(\cdot)\quad for\ the\
\parinterval 虽然短语结构树和依存树是两种不同的句法表现形式,但是它们在某种条件下能相互转化。比如,可以使用启发性规则将短语结构树自动转化为依存树。从应用的角度,依存分析由于形式更加简单,而且直接建模词语之间的依赖,因此在最近自然语言处理领域中关注较多。在机器翻译中,不过无论是哪种句法树结构,都已经被证明会对机器翻译系统产生正面效果。特别是短语结构树,在机器翻译中的应用历史更长,研究更加深入,因此本节将会里短语结构分析为例介绍相关概念。
\parinterval 而句法分析到底是什么呢?简单的理解,句法分析就是我们在小学语文课程中学习的句子中的主谓宾等句子成分的分析,以及对句子中各个成分内部、外部关系的判断。更规范一些的定义,可以参照维基百科和百度百科的句法分析的解释。
\vspace{-0.5em}
%-------------------------------------------
\begin{definition}
句法分析
......@@ -928,9 +933,7 @@ c_{\textrm{KN}}(\cdot) & = & \begin{cases} \textrm{count}(\cdot)\quad for\ the\
在自然语言或者计算机语言中,句法分析是利用形式化的文法规则对一个符号串进行分析的过程。——《维基百科(译文)》
\end{definition}
%-------------------------------------------
\parinterval 上面的定义中,句法分析包含三个重要的概念:
\vspace{0.5em}
\begin{itemize}
\item 形式化的文法:描述语言结构的定义,由文法规则组成
......@@ -939,8 +942,8 @@ c_{\textrm{KN}}(\cdot) & = & \begin{cases} \textrm{count}(\cdot)\quad for\ the\
\end{itemize}
\vspace{0.5em}
\parinterval 以上要素在实现一个句法分析器中都需要考虑。因此,本节的后半部分会对相关的概念和技术方法进行介绍
\parinterval 以上要素在实现一个句法分析器中都需要考虑。因此,本节的后半部分会对相关的概念和技术方法进行介绍
\vspace{-0.5em}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{上下文无关文法}\index{Chapter2.5.2}
......@@ -995,12 +998,13 @@ c_{\textrm{KN}}(\cdot) & = & \begin{cases} \textrm{count}(\cdot)\quad for\ the\
\parinterval 下文无关文法的规则是一种\textbf{产生式规则(production rule)},形如$\alpha \to \beta $,它表示把规则左端的非终结符$\alpha$替换为规则右端的符号序列$\beta$。通常,$\alpha$被称作规则的左部(left-hand side),$\beta$被称作规则的右部(right-hand side)。使用右边$\beta$替换左部$\alpha$的过程也被称作规则的使用,而这个过程的逆过程称为规约。规则的使用可以如下定义:
\vspace{0.5em}
%-------------------------------------------
\begin{definition}
一个符号序列$u$可以通过使用规则$r$替换其中的某个非终结符,并得到符号序列$v$,我们说$v$是在$u$上使用$r$的结果,如图\ref{fig:usage-of-regulation}所示:
\end{definition}
%-------------------------------------------
\vspace{-0.5em}
\begin{figure}[htp]
\centering
\input{./Chapter2/Figures/figure-usage-of-regulation}
......@@ -1008,8 +1012,10 @@ c_{\textrm{KN}}(\cdot) & = & \begin{cases} \textrm{count}(\cdot)\quad for\ the\
\label{fig:usage-of-regulation}
\end{figure}
\vspace{-0.5em}
\parinterval 给定义起始非终结符,我们可以不断地使用规则,最终生成一个终结符串,这个过程也被称为推导(derivation)。
\vspace{0.5em}
%-------------------------------------------
\begin{definition}
给定一个文法$G=<N,\Sigma,R,S>$,对于一个字符串序 \\
......@@ -1039,6 +1045,7 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\begin{figure}[htp]
\centering
\input{./Chapter2/Figures/figure-example-of-derivation}
\setlength{\abovecaptionskip}{-1.0em}
\caption{上下文无关文法推导实例}
\label{fig:example-of-derivation}
\end{figure}
......@@ -1046,22 +1053,28 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\parinterval 通常,可以把推导简记为$\textrm{d}=r_1 \circ r_2 \circ\circ r_n$,其中$ \circ $表示规则的组合。显然,$\textrm{d}$也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用和生成的字符串对应起来。一个推导所生成的字符串,也被称作文法的一个句子。而一个文法所能生成的所有句子是这个文法所对应的语言。
\parinterval 但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导与之对应,我们称为歧义。甚至同一棵句法树,也可以对应不同的推导。图\ref{fig:two-different-derivation-of-regulation}给出一个同一棵句法树所对应的两种不同的规则推导。
\parinterval 但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导与之对应,我们称为歧义。甚至同一棵句法树,也可以对应不同的推导。
\vspace{-1.0em}
\parinterval\ref{fig:two-different-derivation-of-regulation}给出一个同一棵句法树所对应的两种不同的规则推导。
%-------------------------------------------
%图2.5.2.4
\begin{figure}[htp]
\centering
\input{./Chapter2/Figures/figure-two-different-derivation-of-regulation}
\setlength{\abovecaptionskip}{-1.0em}
\caption{同一棵句法树对应的不同规则推导}
\label{fig:two-different-derivation-of-regulation}
\end{figure}
%-------------------------------------------
\vspace{-0.5em}
\parinterval 显然,这样使用不同的规则顺序进行树的生成会导致句法树的推导这一确定的过程变得不确定。因此,需要进行消歧。这里,我们可以使用启发式方法:要求规则使用都服从最左优先原则,这样得到的推导被称为最左优先推导。图中推导1就是符合最左优先原则的推导。
\parinterval 这样,对于一个上下文无关文法,每一棵句法树都有唯一的最左推导与之对应。这样,句法分析可以被描述为:对于一个句子找到能够生成它的最佳推导,这个推导所对应的句法树就是这个句子的句法分析结果。
\parinterval 不过问题又回来了,怎样才能知道什么样的推导或者句法树是``最佳''的呢?对于句法分析的语言学专来说,可以很确定的分辨出哪些树是正确的哪些树是错误的结果。甚至对于普通人,也通过经验可以得到一些模糊的结果。而计算机如何进行判别呢?沿着前面介绍的统计建模的思想,计算机可以得出不同句法树出现的概率,进而选择概率最高的句法树作为输出,而这正是统计句法分析所做的事情。%-------------------------------------------
\parinterval 不过问题又回来了,怎样才能知道什么样的推导或者句法树是``最佳''的呢?对于句法分析的语言学专来说,可以很确定的分辨出哪些树是正确的哪些树是错误的结果。甚至对于普通人,也通过经验可以得到一些模糊的结果。而计算机如何进行判别呢?沿着前面介绍的统计建模的思想,计算机可以得出不同句法树出现的概率,进而选择概率最高的句法树作为输出,而这正是统计句法分析所做的事情。\\
%-------------------------------------------
%图2.5.2.5
\begin{figure}[htp]
\centering
......@@ -1070,7 +1083,7 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\label{fig:perspectives-of-expert-ordinary-and-syntactic-parser}
\end{figure}
%-------------------------------------------
\vspace{-1.0em}
\parinterval 在统计句法分析中,我们需要对每个推导进行统计建模,于是我们得到一个模型$\textrm{P}( \cdot )$,对于任意的推导$d$,都可以用$\textrm{P}(d)$计算推导$d$的概率。这样,给定一个输入句子,我们可以对所有可能的推导用$\textrm{P}(d)$计算其概率值,并选择概率最大的结果作为句法分析的结果输出(图\ref{fig:probability-values-corresponding-to-different-derivations})。
%-------------------------------------------
%图2.5.2.6
......@@ -1081,21 +1094,21 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\label{fig:probability-values-corresponding-to-different-derivations}
\end{figure}
%-------------------------------------------
\vspace{-1.5em}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{规则和推导的概率}\index{Chapter2.5.3}
\parinterval 对句法树进行概率化,首先要对使用的规则和推导进行概率化。为了达到这个目的,可以使用概率上下文无关文法(probabilistic context-free grammar),它是上下文无关文法的扩展。
\vspace{0.5em}
%-------------------------------------------
\begin{definition} 概率上下文无关文法
一个上下文无关文法可以被视为一个系统$G=<N,\Sigma,R,S>$,其中
一个概率上下文无关文法可以被视为一个系统$G=<N,\Sigma,R,S>$,其中
\begin{itemize}
\item
\item $N$为一个非终结符集合
\item $\Sigma$为一个终结符集合
\item $R$为一个规则(产生式)集合,每条规则 $r \in R$的形式为$X \to Y_1Y_2...Y_n$,其中$X \in N$, $Y_i \in N \cup \Sigma$
\item $R$为一个规则(产生式)集合,每条规则 $r \in R$的形式为$X \to Y_1Y_2...Y_n$,其中$X \in N$, $Y_i \in N \cup \Sigma$,每个$r$都对应一个概率,表示其生成的可能性。
\item $S$为一个起始符号集合且$S \subseteq N$
\end{itemize}
\end{definition}
......
......@@ -53,7 +53,7 @@
\label{fig:3-2}
\end{figure}
%---------------------------
\parinterval 即使现在,``分析、转换和生成''依然是一个非常深刻的观点。包括机器翻译在内的很多自然语言处理任务都可以用这个过程来解释。比如,对于现在比较前沿的神经机器翻译方法,从大的框架来说,依然在做分析(编码器)、转换(编码-解码注意力)和生成(解码器),只不这些过程隐含在神经网络的设计中。当然,这里并不会对``分析、转换和生成''的架构展开过多的讨论,随着后面技术内容讨论的深入,这个观念会有进一步体现。
\parinterval 即使现在,``分析、转换和生成''依然是一个非常深刻的观点。包括机器翻译在内的很多自然语言处理任务都可以用这个过程来解释。比如,对于现在比较前沿的神经机器翻译方法,从大的框架来说,依然在做分析(编码器)、转换(编码-解码注意力)和生成(解码器),只不这些过程隐含在神经网络的设计中。当然,这里并不会对``分析、转换和生成''的架构展开过多的讨论,随着后面技术内容讨论的深入,这个观念会有进一步体现。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{构建一个简单的机器翻译系统}\index{Chapter3.2}%Index的作用,目前不清晰
\label{sec:simple-mt-example}
......@@ -79,10 +79,10 @@
\begin{itemize}
\vspace{0.5em}
\item 翻译知识的学习对于输入的源语言句子,我们首先需要知道每个单词可能的翻译有什么,这些翻译被称为\textbf{翻译候选}。比如,汉语单词``对''可能的译文有``to''、``with''和``for''等。对于人来说,可以通过阅读、背诵、做题或者老师教等途径获得翻译知识,这些知识就包含了源语言与目标语言单词之间的对应关系。我们也把这个过程称之为学习过程。
\item 翻译知识的学习对于输入的源语言句子,我们首先需要知道每个单词可能的翻译有什么,这些翻译被称为\textbf{翻译候选}。比如,汉语单词``对''可能的译文有``to''、``with''和``for''等。对于人来说,可以通过阅读、背诵、做题或者老师教等途径获得翻译知识,这些知识就包含了源语言与目标语言单词之间的对应关系。我们也把这个过程称之为学习过程。
\vspace{0.5em}
\item 运用知识生成译文当翻译一个从未见过的句子时,我们可以运用学习到的翻译知识,得到新的句子中每个单词的译文,并处理常见的单词搭配、主谓一致等问题,比如,我们知道``satisfied''后面常常使用介词``with''构成搭配,基于这些知识可以快速生成译文。
\item 运用知识生成译文当翻译一个从未见过的句子时,我们可以运用学习到的翻译知识,得到新的句子中每个单词的译文,并处理常见的单词搭配、主谓一致等问题,比如,我们知道``satisfied''后面常常使用介词``with''构成搭配,基于这些知识可以快速生成译文。
\vspace{0.5em}
\end{itemize}
......@@ -112,7 +112,8 @@
\end{figure}
%---------------------------
\parinterval 对于第二个问题,尽管机器能够找到很多这样的译文选择路径,但它并不知道哪些路径是好的。说的再直白一些,简单的枚举路径实际上就是一个体力活,没有什么智能。因此计算机还需要再聪明一些,运用它的能够``掌握''的知识判断翻译结果的好与坏。这一步是最具挑战的,当然也有很多思路。在统计机器翻译中,这个问题被定义为:设计一种统计模型,它可以给每个译文一个可能性,而这个可能性越高表明译文越接近人工翻译。如图\ref{fig:3-4}所示,每个单词翻译候选的右侧黑色框里的数字就是单词的翻译概率。使用这些单词的翻译概率,我们可以得到整句译文的概率(符号P表示)。这样,我们用概率化的模型描述了每个翻译候选的可能性。基于每个翻译候选的可能性,机器翻译系统可以对所有的翻译``路径''进行打分,比如,图\ref{fig:3-4}中第一条路径的分数为0.042,第二条是0.006,以此类推。最后,系统可以选择分数最高的路径作为源语言句子的最终译文。
\parinterval 对于第二个问题,尽管机器能够找到很多这样的译文选择路径,但它并不知道哪些路径是好的。说的再直白一些,简单的枚举路径实际上就是一个体力活,没有什么智能。因此计算机还需要再聪明一些,运用它的能够``掌握''的知识判断翻译结果的好与坏。这一步是最具挑战的,当然也有很多思路。在统计机器翻译中,这个问题被定义为:设计一种统计模型,它可以给每个译文一个可能性,而这个可能性越高表明译文越接近人工翻译。如图\ref{fig:3-4}所示,每个单词翻译候选的右侧黑色框里的数字就是单词的翻译概率,使用这些单词的翻译概率,我们可以得到整句译文的概率(符号P表示)。这样,我们用概率化的模型描述了每个翻译候选的可能性。基于每个翻译候选的可能性,机器翻译系统可以对所有的翻译``路径''进行打分,比如,图\ref{fig:3-4}中第一条路径的分数为0.042,第二条是0.006,以此类推。最后,系统可以选择分数最高的路径作为源语言句子的最终译文。
\vspace{-0.5em}
\subsubsection{(三)人工 vs. 机器}\index{Chapter3.2.1.3}
\parinterval 人在翻译时的决策是非常确定并且快速的,但计算机处理这个问题时却充满了概率化的思想。当然它们也有类似的地方。首先,计算机使用统计模型的目的是把翻译知识变得可计算,并把这些``知识''储存在相关的模型参数中,这个模型和我们大脑的作用是类似的\footnote{这里,并不是要把统计模型等同于生物学或者认知科学上的人脑,我们指的是他们处理翻译问题时发挥的作用类似。};其次,计算机对统计模型进行训练的过程相当于人类学习知识的过程,或者二者都可以称为学习;再有,计算机使用学习到的模型对新句子进行翻译的过程相当于人运用知识的过程。在统计机器翻译中,模型学习的过程被称为\textbf{训练},目的是从双语平行数据中自动学习翻译``知识'';而使用模型处理新句子的过程被称为\textbf{解码}\textbf{推断},目的是使用学习到的知识对新的句子进行翻译。这也反映了机器翻译的两个核心步骤:训练和解码。图\ref{fig:3-4}的右侧标注在翻译过程中训练和解码的位置。最终,统计机器翻译的核心由三部分构成 - 建模、训练和解码。本章后续内容会围绕这三个问题展开讨论。
......@@ -123,7 +124,7 @@
\vspace{0.5em}
\begin{itemize}
\item \textbf{训练}:从双语平行数据中学习翻译模型,记为$\textrm{P}(t|s)$,其中$s$表示源语言句子,$t$表示目标语句子。$\textrm{P}(t|s)$表示把$s$翻译为$t$的概率。简言之,这一步需要从大量的双语平行数据中学习到$\textrm{P}(t|s)$的计算方法。
\item \textbf{训练}:从双语平行数据中学习翻译模型,记为$\textrm{P}(\mathbf{t}|\mathbf{s})$,其中$\mathbf{s}$表示源语言句子,$\mathbf{t}$表示目标语句子。$\textrm{P}(\mathbf{t}|\mathbf{s})$表示把$\mathbf{s}$翻译为$\mathbf{t}$的概率。简言之,这一步需要从大量的双语平行数据中学习到$\textrm{P}(\mathbf{t}|\mathbf{s})$的计算方法。
\vspace{0.5em}
\item \textbf{解码}:当面对一个新的待翻译句子时,我们需要使用学习到的模型进行推断。推断可以被视为一个搜索和计算的过程,也就是,我们尽可能搜索更多的翻译结果,然后对每个翻译结果进行打分,最后选择得分最高的翻译结果作为输出。
\end{itemize}
......@@ -150,7 +151,7 @@
% 表
\begin{table}[htp]
\centering
\begin{tabular}{l | l l}
\begin{tabular}{c | c c}
源语言 & 目标语言 & 翻译概率 \\ \hline
& I & 0.50 \\
& me & 0.20 \\
......@@ -163,11 +164,13 @@
\label{tab:word-translation-examples}
\end{table}
%---------------------------
\vspace{-0.5em}
\subsubsection{(二)如何从一个双语平行数据中学习?}\index{Chapter3.2.3.2}
\parinterval 假设我们拥有一定数量的双语对照的平行数据,是否可以从中自动获得单词之间的翻译概率呢?回忆一下第二章中的掷骰子游戏,我们使用了相对频率估计来自动获得骰子不同面出现概率的估计值。其中,重复投掷骰子很多次,然后统计``1''到``6''各面出现的次数,再除以投掷的总次数,最后得到它们出现的概率的极大似然估计。这里,我们使用类似的方式计算单词翻译概率。但是,我们现在拥有的是句子一级对齐的数据,并不知道两种语言之间单词的对应关系。因此,我们要从句子级对齐的平行数据中学习单词之间对齐的概率。我们使用一种稍微``复杂''一些的模型来描述这个问题。
假设$x$表示任意源语言单词,所有的目标语单词$y \in Y$都可能是它的译文,这里$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}$中的词。计算公式描述如下:
\vspace{-0.5em}
\begin{eqnarray}
\textrm{P}(x \leftrightarrow y; \mathbf{s},\mathbf{t}) & \equiv & \textrm{P}(x,y;\mathbf{s},\mathbf{t}) \nonumber \\
& = & \frac{c(x,y;s,t)}{\sum_{x',y'} c(x',y';\mathbf{s},\mathbf{t})}
......@@ -185,10 +188,10 @@
\label{example3-1}
\end{example}
\parinterval 看一个具体的例子,如例\ref{example3-1}所示,有一个汉英互译的句对$(\mathbf{s},\mathbf{t})$。假设,$x=\textrm{``翻译''}$$y=\textrm{``translation''}$,现在要计算$x$$y$共现的总次数。``翻译''和``translation''分别在$\mathbf{s}$$\mathbf{t}$中出现了2次,因此$c(\textrm{``翻译''},\textrm{``translation''};\mathbf{s},\mathbf{t})$ 等于4。而对于$\sum_{x',y'} c(x',y';\mathbf{s},$ $\mathbf{t})$,因为$x'$$y'$分别表示的是$s$$t$中的任意词,所以$\sum_{x',y'} c(x',y';\mathbf{s},\mathbf{t})$表示所有单词对的数量 - 即$\mathbf{s}$的词数乘以$\mathbf{t}$的词数。最后,``翻译''和``translation''的单词翻译概率为:
\parinterval 看一个具体的例子,如例\ref{example3-1}所示,有一个汉英互译的句对$(\mathbf{s},\mathbf{t})$。假设,$x=\textrm{``翻译''}$$y=\textrm{``translation''}$,现在要计算$x$$y$共现的总次数。``翻译''和``translation''分别在$\mathbf{s}$$\mathbf{t}$中出现了2次,因此$c(\textrm{``翻译''},\textrm{``translation''};\mathbf{s},\mathbf{t})$ 等于4。而对于$\sum_{x',y'} c(x',y';\mathbf{s},$ $\mathbf{t})$,因为$x'$$y'$分别表示的是$\mathbf{s}$$\mathbf{t}$中的任意词,所以$\sum_{x',y'} c(x',y';\mathbf{s},\mathbf{t})$表示所有单词对的数量 - 即$\mathbf{s}$的词数乘以$\mathbf{t}$的词数。最后,``翻译''和``translation''的单词翻译概率为:
\begin{eqnarray}
\textrm{P}(\text{``翻译''},\text{``translation''}; \mathbf{s},\mathbf{t}) & = & \frac{c(\textrm{``翻译''},\textrm{``translation''};\mathbf{s},\mathbf{t})}{\sum_{x',y'} c(x',y';\mathbf{s},\mathbf{t})} \nonumber \\
& = & \frac{4}{|s|\times |t|} \nonumber \\
& = & \frac{4}{|\mathbf{s}|\times |\mathbf{t}|} \nonumber \\
& = & \frac{4}{63}
\label{eqC3.2-new}
\end{eqnarray}
......@@ -204,7 +207,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{(三)如何从大量的双语平行数据中学习?}\index{Chapter3.2.3.3}
\parinterval 上面提到的方法需要能在更多的句子上使用。假设,有$N$个互译句对$(\mathbf{s}^1,\mathbf{t}^1)$,...,\\$(\mathbf{s}^N,\mathbf{t}^N)$。这时,我们仍然可以使用基于相对频度的方法进行概率估计,具体方法如下
\parinterval 上面提到的方法需要能在更多的句子上使用。假设,有$N$个互译句对$(\mathbf{s}^1,\mathbf{t}^1)$,...,\\$(\mathbf{s}^N,\mathbf{t}^N)$。这时,我们仍然可以使用基于相对频度的方法进行概率估计,具体方法如下:
\begin{eqnarray}
\textrm{P}(x,y) = \frac{{\sum_{i=1}^{N} c(x,y;\mathbf{s}^i,\mathbf{t}^i)}}{\sum_{i=1}^{n}{{\sum_{x',y'} c(x',y';x^i,y^i)}}}
\label{eqC3.5-new}
......@@ -247,7 +250,7 @@
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figurerole-of-P-in-sentence-level-translation}
\caption{$\textrm{P}(t|s)$在句子级翻译中的作用}
\caption{$\textrm{P}(\mathbf{t}|\mathbf{s})$在句子级翻译中的作用}
\label{fig:3-6}
\end{figure}
%---------------------------
......@@ -257,7 +260,7 @@
\parinterval 计算句子级翻译概率并不简单。因为自然语言非常灵活,任何数据无法覆盖足够多的句子,因此我们也无法像公式\ref{eqC3.5-new}一样直接用简单计数的方式对句子的翻译概率进行估计。这里,我们采用一个退而求其次的方法:找到一个函数$g(\mathbf{s},\mathbf{t})\ge 0$来模拟翻译概率对译文可能性进行评价这种行为。我们假设:给定$\mathbf{s}$,翻译结果$\mathbf{t}$出现的可能性越大,$g(\mathbf{s},\mathbf{t})$的值越大;$\mathbf{t}$出现的可能性越小,$g(\mathbf{s},\mathbf{t})$的值越小。换句话说,$g(\mathbf{s},\mathbf{t})$的单调性和翻译概率呈正相关。如果存在这样的函数$g(\mathbf{s},\mathbf{t}
)$,可以利用$g(\mathbf{s},\mathbf{t})$近似表示句子级翻译概率,如下:
\begin{eqnarray}
\textrm{P}(t|s) \approx \frac{g(\mathbf{s},\mathbf{t})}{\sum_{\mathbf{t}'}g(\mathbf{s},\mathbf{t}')}
\textrm{P}(\mathbf{t}|\mathbf{s}) \approx \frac{g(\mathbf{s},\mathbf{t})}{\sum_{\mathbf{t}'}g(\mathbf{s},\mathbf{t}')}
\label{eqC3.7-new}
\end{eqnarray}
......@@ -276,7 +279,7 @@
\parinterval 回到设计$g(\mathbf{s},\mathbf{t})$的问题上。这里,我们采用``大题小作''的方法,这个技巧在第二章已经进行了充分的介绍。具体来说,直接建模句子之间的对应比较困难,但可以利用单词之间的对应来描述句子之间的对应关系。这就用到了上一小节所介绍的单词翻译概率。
\parinterval 我们首先引入一个非常重要的概念\ \ \textbf{词对齐},它是统计机器翻译中最核心的概念之一。词对齐描述了平行句对中单词之间的对应关系,它体现了一种观点:本质上句子之间的对应是由词之间的对应表示的。当然,这个观点在神经机器翻译或者其它模型中可能会有不同的理解,但是翻译句子的过程中我们考虑词级的对应关系是符合我们对语言的认知的。图\ref{fig:3-7}展示了一个句对$\mathbf{s}$$\mathbf{t}$,单词的右下标数字表示了该词在句中的位置,而虚线表示的是句子$s$$t$中的词对齐关系。比如,``满意''的右下标数字5表示在句子$s$中处于第5个位置,``satisfied''的右下标数字3表示在句子$t$中处于第3个位置,``满意''和``satisfied''之间的虚线表示两个单词之间是对齐的。为方便描述,我们用二元组$(j,i)$来描述词对齐,它表示源语言句子的第$j$个单词对应目标语言句子的第$i$个单词,即单词$s_j$$t_i$对应。通常,也会把$(j,i)$称作一条\textbf{词对齐连接}。图\ref{fig:3-7}中共有5条虚线,表示有5组单词之间的词对齐连接。我们把这些词对齐连接构成的集合作为词对齐的一种表示,记为$A$,即$A={\{(1,1),(2,4),(3,5),(4,2)(5,3)}\}$
\parinterval 我们首先引入一个非常重要的概念\ \ \textbf{词对齐},它是统计机器翻译中最核心的概念之一。词对齐描述了平行句对中单词之间的对应关系,它体现了一种观点:本质上句子之间的对应是由词之间的对应表示的。当然,这个观点在神经机器翻译或者其它模型中可能会有不同的理解,但是翻译句子的过程中我们考虑词级的对应关系是符合我们对语言的认知的。图\ref{fig:3-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)$称作一条\textbf{词对齐连接}。图\ref{fig:3-7}中共有5条虚线,表示有5组单词之间的词对齐连接。我们把这些词对齐连接构成的集合作为词对齐的一种表示,记为$\mathbf{a}$,即$A={\{(1,1),(2,4),(3,5),(4,2)(5,3)}\}$
%----------------------------------------------
% 图3.11
\begin{figure}[htp]
......@@ -324,11 +327,11 @@ g(\mathbf{s},\mathbf{t}) = \prod_{(j,i)\in \widehat{A}}\textrm{P}(s_j,t_i)
\label{eqC3.10-new}
\end{eqnarray}
\noindent 其中,$\mathbf{t}=t_1...t_l$表示由$l$个单词组成的句子,$\textrm{P}_{\textrm{lm}}(\mathbf{t})$表示语言模型给句子$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$的概率。语言模型的训练方法可以参看第二章相关内容,这里将不再对语言模型做过多的介绍。
\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$的概率。语言模型的训练方法可以参看第二章相关内容,这里将不再对语言模型做过多的介绍。
\parinterval 回到翻译问题的建模问题上来。我们已经有了语言模型可以帮助系统度量每个译文的流畅度,因此可以使用语言模型对翻译进行打分。一种简单的方法是把语言模型$\textrm{P}_{\textrm{lm}}{(\mathbf{t})}$和公式\ref{eqC3.8-new}中的$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}
g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P}_{\textrm{lm}}(t)
g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P}_{\textrm{lm}}(\mathbf{t})
\label{eqC3.11-new}
\end{eqnarray}
......@@ -348,7 +351,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\subsection{解码}\index{Chapter3.2.5}
\label{sec:simple-decoding}
\parinterval \textbf{解码}是指,在得到翻译模型后,对于新输入的句子生成最佳译文的过程。具体来说,当给定任意的源语言句子$s$,解码系统要找到翻译概率最大的目标语译文$\hat{\mathbf{t}}$。这个过程可以被形式化描述为:
\parinterval \textbf{解码}是指,在得到翻译模型后,对于新输入的句子生成最佳译文的过程。具体来说,当给定任意的源语言句子$\mathbf{s}$,解码系统要找到翻译概率最大的目标语译文$\hat{\mathbf{t}}$。这个过程可以被形式化描述为:
\begin{eqnarray}
\widehat{\mathbf{t}}=\argmax_{\mathbf{t}} \textrm{P}(\mathbf{t}|\mathbf{s})
\label{eqC3.12-new}
......@@ -458,7 +461,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\label{eqC3.16-new}
\end{eqnarray}
\parinterval 公式\ref{eqC3.16-new}$\mathbf{s}$$\mathbf{t}$的翻译概率转化为$\frac{\textrm{P}(\mathbf{s}|\mathbf{t})\textrm{P(t)}}{\textrm{P}(\mathbf{s})}$,它包括三个部分:第一部分是由译文$\mathbf{t}$到源语言句子$\mathbf{s}$的翻译概率$\textrm{P}(\mathbf{s}|\mathbf{t})$,也被称为翻译模型。它表示给定目标语句$\mathbf{t}$生成源语句$\mathbf{s}$的概率,需要注意是翻译的方向已经从$\textrm{P}(\mathbf{s}|\mathbf{t})$转向了$\textrm{P}(\mathbf{t}|\mathbf{s})$,但无须刻意的区分,可以简单地理解为翻译模型刻画了$s$$t$的翻译对应程度;第二部分是$\textrm{P}(\mathbf{t})$,也被称为语言模型。它表示的是目标语言句子$\mathbf{t}$出现的可能性;第三部分是$\textrm{P}(\mathbf{s})$,表示源语言句子$\mathbf{s}$出现的可能性。因为$s$是输入的不变量,而且$\textrm{P}(\mathbf{s}) \ge 0$,所以省略分母部分$\textrm{P}(\mathbf{s})$不会影响$\frac{\textrm{P}(\mathbf{s}|\mathbf{t})\textrm{P}(\mathbf{t})}{\textrm{P}(\mathbf{s})}$最大值的求解。于是,机器翻译的目标可以被重新定义为:给定源语言句子$\mathbf{s}$,寻找这样的目标语言译文$\mathbf{t}$,它使得翻译模型$\textrm{P}(\mathbf{s}|\mathbf{t})$和语言模型$\textrm{P}(\mathbf{t})$乘积最大:
\parinterval 公式\ref{eqC3.16-new}$\mathbf{s}$$\mathbf{t}$的翻译概率转化为$\frac{\textrm{P}(\mathbf{s}|\mathbf{t})\textrm{P(t)}}{\textrm{P}(\mathbf{s})}$,它包括三个部分:第一部分是由译文$\mathbf{t}$到源语言句子$\mathbf{s}$的翻译概率$\textrm{P}(\mathbf{s}|\mathbf{t})$,也被称为翻译模型。它表示给定目标语句$\mathbf{t}$生成源语句$\mathbf{s}$的概率,需要注意是翻译的方向已经从$\textrm{P}(\mathbf{s}|\mathbf{t})$转向了$\textrm{P}(\mathbf{t}|\mathbf{s})$,但无须刻意的区分,可以简单地理解为翻译模型刻画了$\mathbf{s}$$\mathbf{t}$的翻译对应程度;第二部分是$\textrm{P}(\mathbf{t})$,也被称为语言模型。它表示的是目标语言句子$\mathbf{t}$出现的可能性;第三部分是$\textrm{P}(\mathbf{s})$,表示源语言句子$\mathbf{s}$出现的可能性。因为$\mathbf{s}$是输入的不变量,而且$\textrm{P}(\mathbf{s}) \ge 0$,所以省略分母部分$\textrm{P}(\mathbf{s})$不会影响$\frac{\textrm{P}(\mathbf{s}|\mathbf{t})\textrm{P}(\mathbf{t})}{\textrm{P}(\mathbf{s})}$最大值的求解。于是,机器翻译的目标可以被重新定义为:给定源语言句子$\mathbf{s}$,寻找这样的目标语言译文$\mathbf{t}$,它使得翻译模型$\textrm{P}(\mathbf{s}|\mathbf{t})$和语言模型$\textrm{P}(\mathbf{t})$乘积最大:
\begin{eqnarray}
\widehat{\mathbf{t}} & = & \argmax_{\mathbf{t}} \textrm{P}(\mathbf{t}|\mathbf{s}) \nonumber \\
& = & \argmax_{\mathbf{t}} \frac{\textrm{P}(\mathbf{s}|\mathbf{t})\textrm{P}(\mathbf{t})}{\textrm{P}(\mathbf{s})} \nonumber \\
......@@ -466,7 +469,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\label{eqC3.17-new}
\end{eqnarray}
\parinterval 公式\ref{eqC3.17-new}展示了IBM模型最基础的建模方式,它把模型分解为两项:(反向)翻译模型$\textrm{P}(\mathbf{s}|\mathbf{t})$和语言模型$\textrm{P}(\mathbf{t})$。一个很自然的问题是:直接用$\textrm{P}(t|s)$定义翻译问题不就可以了吗,干嘛用$\textrm{P}(\mathbf{s}|\mathbf{t})$$\textrm{P}(\mathbf{t})$的联合模型?从理论上来说,正向翻译模型$\textrm{P}(t|s)$和反向翻译模型$\textrm{P}(\mathbf{s}|\mathbf{t})$的数学建模可以是一样的,因为我们只需要在建模的过程中把两个语言调换即可。使用$\textrm{P}(\mathbf{s}|\mathbf{t})$$\textrm{P}(\mathbf{t})$的联合模型的意义在于引入了语言模型,它可以很好的对译文的流畅度进行评价,确保结果是通顺的目标语言句子。可以回忆一下\ref{sec:sentence-level-translation}节中讨论的问题,如果只使用翻译模型可能会造成一个局面:译文的单词都和源语言单词对应的很好,但是由于语序的问题,读起来却不像人说的话。从这个角度说,引入语言模型是十分必要的。这个问题在Brown等人的论文中也有讨论\cite{brown1990statistical},他们提到单纯使用$\textrm{P}(\mathbf{s}|\mathbf{t})$会把概率分配给一些翻译对应比较好但是不合法的目标语句子,而且这部分概率可能会很大,影响模型的决策。这也正体现了IBM模型的创新之处,作者用数学技巧把$\textrm{P}(\mathbf{t})$引入进来,保证了系统的输出是通顺的译文。语言模型也被广泛使用在语音识别等领域以保证结果的流畅性,甚至应用的历史比机器翻译要长得多,这里的方法也有借鉴相关工作的味道。
\parinterval 公式\ref{eqC3.17-new}展示了IBM模型最基础的建模方式,它把模型分解为两项:(反向)翻译模型$\textrm{P}(\mathbf{s}|\mathbf{t})$和语言模型$\textrm{P}(\mathbf{t})$。一个很自然的问题是:直接用$\textrm{P}(\mathbf{t}|\mathbf{s})$定义翻译问题不就可以了吗,干嘛用$\textrm{P}(\mathbf{s}|\mathbf{t})$$\textrm{P}(\mathbf{t})$的联合模型?从理论上来说,正向翻译模型$\textrm{P}(\mathbf{t}|\mathbf{s})$和反向翻译模型$\textrm{P}(\mathbf{s}|\mathbf{t})$的数学建模可以是一样的,因为我们只需要在建模的过程中把两个语言调换即可。使用$\textrm{P}(\mathbf{s}|\mathbf{t})$$\textrm{P}(\mathbf{t})$的联合模型的意义在于引入了语言模型,它可以很好的对译文的流畅度进行评价,确保结果是通顺的目标语言句子。可以回忆一下\ref{sec:sentence-level-translation}节中讨论的问题,如果只使用翻译模型可能会造成一个局面:译文的单词都和源语言单词对应的很好,但是由于语序的问题,读起来却不像人说的话。从这个角度说,引入语言模型是十分必要的。这个问题在Brown等人的论文中也有讨论\cite{brown1990statistical},他们提到单纯使用$\textrm{P}(\mathbf{s}|\mathbf{t})$会把概率分配给一些翻译对应比较好但是不合法的目标语句子,而且这部分概率可能会很大,影响模型的决策。这也正体现了IBM模型的创新之处,作者用数学技巧把$\textrm{P}(\mathbf{t})$引入进来,保证了系统的输出是通顺的译文。语言模型也被广泛使用在语音识别等领域以保证结果的流畅性,甚至应用的历史比机器翻译要长得多,这里的方法也有借鉴相关工作的味道。
实际上,在机器翻译中引入语言模型是一个很深刻的概念。在IBM模型之后相当长的时间里,语言模型一直是机器翻译各个部件中最重要的部分。即使现在机器翻译模型已经更新换代,对译文连贯性的建模也是所有系统中需要包含的内容(即使隐形体现)。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......@@ -484,7 +487,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\vspace{0.5em}
\end{itemize}
\parinterval 为了理解以上的问题,可以先回忆一下\ref{chapter3.2.3}小节中的公式\ref{eqC3.13-new},即$g(\mathbf{s},\mathbf{t})$函数的定义,它用于评估一个译文的好与坏。如图\ref{fig:3-14}所示,$g(\mathbf{s},\mathbf{t})$函数与公式\ref{eqC3.17-new}的建模方式非常一致,即$g(\mathbf{s},\mathbf{t})$函数中红色部分描述译文$t$的可能性大小,对应翻译模型$\textrm{P}(\mathbf{s}|\mathbf{t})$;蓝色部分描述译文的平滑或流畅程度,对应语言模型$\textrm{P}(\mathbf{t})$。尽管这种对应并不十分严格的,但也可以看出在处理机器翻译问题上,很多想法的本质是一样的。
\parinterval 为了理解以上的问题,可以先回忆一下\ref{chapter3.2.3}小节中的公式\ref{eqC3.13-new},即$g(\mathbf{s},\mathbf{t})$函数的定义,它用于评估一个译文的好与坏。如图\ref{fig:3-14}所示,$g(\mathbf{s},\mathbf{t})$函数与公式\ref{eqC3.17-new}的建模方式非常一致,即$g(\mathbf{s},\mathbf{t})$函数中红色部分描述译文$\mathbf{t}$的可能性大小,对应翻译模型$\textrm{P}(\mathbf{s}|\mathbf{t})$;蓝色部分描述译文的平滑或流畅程度,对应语言模型$\textrm{P}(\mathbf{t})$。尽管这种对应并不十分严格的,但也可以看出在处理机器翻译问题上,很多想法的本质是一样的。
%----------------------------------------------
% 图3.14
\begin{figure}[htp]
......@@ -526,17 +529,17 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
%---------------------------
\end{itemize}
\parinterval 通常,我们把词对齐记为$a$,它由$a_1$$a_m$$m$个词对齐连接组成,即$a=a_1...a_m$,其中$m$表示源语言句子长度。$a_j$表示第$j$个源语单词$s_j$对应的目标语单词的位置。在图\ref{fig:3-16}的例子中,词对齐关系可以记为$a_1=0, a_2=3, a_3=1$。它表示第1个源语单词``在''对应到目标语译文的第0个位置,第2个源语单词``桌子''对应到目标语译文的第3个位置是,第3个源语单词``上''对应到目标语译文的第1个位置。 \\ \\
\parinterval 通常,我们把词对齐记为$\mathbf{a}$,它由$a_1$$a_m$$m$个词对齐连接组成,即$a=a_1...a_m$,其中$m$表示源语言句子长度。$a_j$表示第$j$个源语单词$s_j$对应的目标语单词的位置。在图\ref{fig:3-16}的例子中,词对齐关系可以记为$a_1=0, a_2=3, a_3=1$。它表示第1个源语单词``在''对应到目标语译文的第0个位置,第2个源语单词``桌子''对应到目标语译文的第3个位置是,第3个源语单词``上''对应到目标语译文的第1个位置。 \\ \\
\subsubsection{(二)基于词对齐的翻译模型}\index{Chapter3.3.2.2}
\parinterval 直接估计$\textrm{P}(\mathbf{s}|\mathbf{t})$很难,因为大部分句子即使在大规模的语料中也只出现过一次甚至没有出现过。为了解决这个问题,IBM模型假设:句子之间的对应可以由单词之间的对应进行表示。更具体的说,把句子之间对应的概率转换为所有可能的词对齐的生成概率,如下:
\begin{eqnarray}
\textrm{P}(\mathbf{s}|\mathbf{t})=\sum_a\textrm{P}(\mathbf{s},a|\mathbf{t})
\textrm{P}(\mathbf{s}|\mathbf{t})= \sum_{\mathbf{a}}\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})
\label{eqC3.18-new}
\end{eqnarray}
\parinterval 公式\ref{eqC3.18-new}使用了简单的全概率公式把$\textrm{P}(\mathbf{s}|\mathbf{t})$进行展开。通过访问$\mathbf{s}$$\mathbf{t}$之间所有可能的词对齐$a$,并把对应的对齐概率进行求和,得到了$\mathbf{t}$$\mathbf{s}$的翻译概率。这里,可以把词对齐看作翻译的隐含变量,这样从$\mathbf{t}$$\mathbf{s}$的生成就变为从$\mathbf{t}$同时生成$\mathbf{s}$和隐含变量$a$的问题。引入隐含变量是生成式模型常用的手段,通过使用隐含变量,可以把较为困难的端到端学习问题转化为分步学习问题。
\parinterval 公式\ref{eqC3.18-new}使用了简单的全概率公式把$\textrm{P}(\mathbf{s}|\mathbf{t})$进行展开。通过访问$\mathbf{s}$$\mathbf{t}$之间所有可能的词对齐$\mathbf{a}$,并把对应的对齐概率进行求和,得到了$\mathbf{t}$$\mathbf{s}$的翻译概率。这里,可以把词对齐看作翻译的隐含变量,这样从$\mathbf{t}$$\mathbf{s}$的生成就变为从$\mathbf{t}$同时生成$\mathbf{s}$和隐含变量$\mathbf{a}$的问题。引入隐含变量是生成式模型常用的手段,通过使用隐含变量,可以把较为困难的端到端学习问题转化为分步学习问题。
\parinterval 举个例子说明公式\ref{eqC3.18-new}的实际意义。如图\ref{fig:3-17}所示,可以把从``谢谢 你''到``thank you''的翻译分解为9种可能的词对齐。因为源语言句子$\mathbf{s}$有2个词,目标语言句子$\mathbf{t}$加上空标记$t_0$共3个词,因此每个源语言单词有3个可能对齐的位置,整个句子共有$3\times3=9$种可能的词对齐。
%----------------------------------------------
......@@ -549,16 +552,16 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\end{figure}
%---------------------------
\parinterval 接下来的问题是如何定义$\textrm{P}(\mathbf{s},a|\mathbf{t})$ - 即定义词对齐的生成概率。但是,隐含变量$a$仍然很复杂,因此直接定义$\textrm{P}(\mathbf{s},a|\mathbf{t})$也很困难,在IBM模型中,为了化简问题,$\textrm{P}(\mathbf{s},a|\mathbf{t})$被进一步分解。使用链式法则,可以得到:
\parinterval 接下来的问题是如何定义$\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})$ - 即定义词对齐的生成概率。但是,隐含变量$\mathbf{a}$仍然很复杂,因此直接定义$\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})$也很困难,在IBM模型中,为了化简问题,$\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})$被进一步分解。使用链式法则,可以得到:
\begin{eqnarray}
\textrm{P}(\mathbf{s},a|\mathbf{t})=\textrm{P}(m|\mathbf{t})\prod_{j=1}^{m}{\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t})\textrm{P}(s_j|a_1^{j},s_1^{j-1},m,\mathbf{t})}
\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})=\textrm{P}(m|\mathbf{t})\prod_{j=1}^{m}{\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t})\textrm{P}(s_j|a_1^{j},s_1^{j-1},m,\mathbf{t})}
\label{eqC3.19-new}
\end{eqnarray}
\noindent 其中$s_j$$a_j$分别表示第$j$个源语言单词及第$j$源语言单词对应到目标位置,$s_1^{j-1}$$a_1^{j}$表示第$j-1$个源语言单词和第$j$个源语言单词的对齐,$m$表示源语句子的长度。公式\ref{eqC3.19-new}可以进一步被分解为四个部分,具体含义如下:
\begin{itemize}
\item 根据译文$t$选择源文$s$的长度$m$,用$\textrm{P}(m|\mathbf{t})$表示;
\item 根据译文$\mathbf{t}$选择源文$\mathbf{s}$的长度$m$,用$\textrm{P}(m|\mathbf{t})$表示;
\item 当确定源文长度$m$后,循环每个位置$j$逐次生成每个源语言单词$s_j$,也就是$\prod_{j=1}^m$计算的内容;
......@@ -566,12 +569,12 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\item 根据译文$\mathbf{t}$、源文长度$m$、已经生成的源语言单词$s_1^{j-1}$和对齐$a_1^j$,生成第$j$个位置的源语言单词$s_j$,用$\textrm{P}(s_j|a_1^{j},s_1^{j-1},m,\mathbf{t})$表示。
\end{itemize}
\parinterval 换句话说,当我们求概率分布$\textrm{P}(\mathbf{s},a|\mathbf{t})$时,首先根据译文$\mathbf{t}$确定源语言句子$\mathbf{s}$的长度$m$;当知道源语言句子有多少个单词后,循环$m$次,依次生成第1个到第$m$个源语言单词;当生成第$j$个源语言单词时,要先确定它是由哪个目标语译文单词生成的,即确定生成的源语言单词对应的译文单词的位置;当知道了目标语译文单词的位置,就能确定第$j$个位置的源语言单词。
\parinterval 换句话说,当我们求概率分布$\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})$时,首先根据译文$\mathbf{t}$确定源语言句子$\mathbf{s}$的长度$m$;当知道源语言句子有多少个单词后,循环$m$次,依次生成第1个到第$m$个源语言单词;当生成第$j$个源语言单词时,要先确定它是由哪个目标语译文单词生成的,即确定生成的源语言单词对应的译文单词的位置;当知道了目标语译文单词的位置,就能确定第$j$个位置的源语言单词。
\parinterval 需要注意的是公式\ref{eqC3.19-new}定义的模型并没有做任何化简和假设,也就是说公式的左右两端是严格相等的。在后面的内容中会看到,这种将一个整体进行拆分的方法可以有助于分步骤化简并处理问题。
\subsubsection{(三)基于词对齐的翻译实例}\index{Chapter3.3.2.3}
\parinterval 我们用前面图\ref{fig:3-16}中例子来对公式\ref{eqC3.19-new}进行说明。例子中,源语言句子``在 桌子 上''目标语译文``on the table''之间的词对齐为$a=\{\textrm{1-0, 2-3, 3-1}\}$。公式\ref{eqC3.19-new}的计算过程如下:
\parinterval 我们用前面图\ref{fig:3-16}中例子来对公式\ref{eqC3.19-new}进行说明。例子中,源语言句子``在 桌子 上''目标语译文``on the table''之间的词对齐为$\mathbf{a}=\{\textrm{1-0, 2-3, 3-1}\}$。公式\ref{eqC3.19-new}的计算过程如下:
\begin{itemize}
\item 首先根据译文确定源文$\mathbf{s}$的单词数量($m=3$),即$\textrm{P}(m=3|\textrm{``}t_0\;\textrm{on\;the\;table''})$
......@@ -580,9 +583,9 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\item 类似于生成$s_1$,我们依次确定源语言单词$s_2$$s_3$由谁生成且生成的是什么;
\end{itemize}
\parinterval 最后得到基于词对齐$a$的翻译概率为:
\parinterval 最后得到基于词对齐$\mathbf{a}$的翻译概率为:
\begin{eqnarray}
\textrm{P}(\mathbf{s},a|\mathbf{t})\; &= & \textrm{P}(m|\mathbf{t}) \prod\limits_{j=1}^{m} \textrm{P}(a_j|a_{1}^{j-1},s_{1}^{j-1},m,\mathbf{t}) \textrm{P}(s_j|a_{1}^{j},s_{1}^{j-1},m,\mathbf{t}) \nonumber \\
\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})\; &= & \textrm{P}(m|\mathbf{t}) \prod\limits_{j=1}^{m} \textrm{P}(a_j|a_{1}^{j-1},s_{1}^{j-1},m,\mathbf{t}) \textrm{P}(s_j|a_{1}^{j},s_{1}^{j-1},m,\mathbf{t}) \nonumber \\
&=&\textrm{P}(m=3 \mid \textrm{``$t_0$ on the table''}){\times} \nonumber \\
&&{\textrm{P}(a_1=0 \mid \phi,\phi,3,\textrm{``$t_0$ on the table''}){\times} } \nonumber \\
&&{\textrm{P}(f_1=\textrm{``在''} \mid \textrm{\{1-0\}},\phi,3,\textrm{``$t_0$ on the table''}){\times} } \nonumber \\
......@@ -595,7 +598,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{IBM模型1-2}\index{Chapter3.4}
\parinterval 公式\ref{eqC3.18-new}和公式\ref{eqC3.19-new}把翻译问题定义为对译文和词对齐同时进行生成的问题。其中有两个问题:首先,公式\ref{eqC3.18-new}的右端($\sum_a\textrm{P}(\mathbf{s},a|\mathbf{t})$)要求对所有的词对齐概率进行求和,但是词对齐的数量随着句子长度是呈指数增长的,如何遍历所有的对齐$a$?其次,公式\ref{eqC3.19-new}虽然对词对齐的问题进行了描述,但是模型中的很多参数仍然很复杂,如何计算$\textrm{P}(m|\mathbf{t})$$\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t})$$\textrm{P}(s_j|a_1^{j},s_1^{j-1},m,\mathbf{t})$?针对这些问题,Brown等人总共提出了5种解决方案,这也就是被后人所熟知的5个IBM翻译模型。第一个问题可以通过一定的数学或者工程技巧进行求解;第二个问题可以通过一些假设进行化简,依据化简的层次和复杂度不同,可以分为IBM模型1、IBM模型2、IBM模型3、IBM模型4以及IBM模型5。本节首先介绍较为简单的IBM模型1-2。
\parinterval 公式\ref{eqC3.18-new}和公式\ref{eqC3.19-new}把翻译问题定义为对译文和词对齐同时进行生成的问题。其中有两个问题:首先,公式\ref{eqC3.18-new}的右端($ \sum_{\mathbf{a}}\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})$)要求对所有的词对齐概率进行求和,但是词对齐的数量随着句子长度是呈指数增长的,如何遍历所有的对齐$\mathbf{a}$?其次,公式\ref{eqC3.19-new}虽然对词对齐的问题进行了描述,但是模型中的很多参数仍然很复杂,如何计算$\textrm{P}(m|\mathbf{t})$$\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t})$$\textrm{P}(s_j|a_1^{j},s_1^{j-1},m,\mathbf{t})$?针对这些问题,Brown等人总共提出了5种解决方案,这也就是被后人所熟知的5个IBM翻译模型。第一个问题可以通过一定的数学或者工程技巧进行求解;第二个问题可以通过一些假设进行化简,依据化简的层次和复杂度不同,可以分为IBM模型1、IBM模型2、IBM模型3、IBM模型4以及IBM模型5。本节首先介绍较为简单的IBM模型1-2。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{IBM模型1}\index{Chapter3.4.1}
\parinterval IBM模型1对公式\ref{eqC3.19-new}中的三项进行了简化。具体化简方法如下:
......@@ -633,20 +636,20 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
%---------------------------
\parinterval 将上述三个假设和公式\ref{eqC3.19-new}代入公式\ref{eqC3.18-new}中,得到$\textrm{P}(\mathbf{s}|\mathbf{t})$的表达式:
\begin{eqnarray}
\textrm{P}(\mathbf{s}|\mathbf{t}) & = & \sum_a{\textrm{P}(\mathbf{s},a|\mathbf{t})} \nonumber \\
& = & \sum_a{\textrm{P}(m|\mathbf{t})}\prod_{j=1}^{m}{\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t})\textrm{P}(s_j |a_1^j,m,\mathbf{t})} \nonumber \\
& = & \sum_a{\varepsilon}\prod_{j=1}^{m}{\frac{1}{l+1}f(s_j|t_{a_j})} \nonumber \\
& = &\sum_a{\frac{\varepsilon}{(l+1)^m}}\prod_{j=1}^{m}f(s_j|t_{a_j})
\textrm{P}(\mathbf{s}|\mathbf{t}) & = & \sum_{\mathbf{a}}{\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})} \nonumber \\
& = & \sum_{\mathbf{a}}{\textrm{P}(m|\mathbf{t})}\prod_{j=1}^{m}{\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t})\textrm{P}(s_j |a_1^j,m,\mathbf{t})} \nonumber \\
& = & \sum_{\mathbf{a}}{\varepsilon}\prod_{j=1}^{m}{\frac{1}{l+1}f(s_j|t_{a_j})} \nonumber \\
& = & \sum_{\mathbf{a}}{\frac{\varepsilon}{(l+1)^m}}\prod_{j=1}^{m}f(s_j|t_{a_j})
\label{eqC3.24-new}
\end{eqnarray}
\parinterval 在公式\ref{eqC3.24-new}中,我们需要遍历所有的词对齐,即$\sum_a{\cdot}$。但这种表示不够直观,因此可以把这个过程重新表示为如下形式:
\parinterval 在公式\ref{eqC3.24-new}中,我们需要遍历所有的词对齐,即$ \sum_{\mathbf{a}}{\cdot}$。但这种表示不够直观,因此可以把这个过程重新表示为如下形式:
\begin{eqnarray}
\textrm{P}(\mathbf{s}|\mathbf{t})={\sum_{a_1=0}^{l}\cdots}{\sum_{a_m=0}^{l}\frac{\varepsilon}{(l+1)^m}}{\prod_{j=1}^{m}f(s_j|t_{a_j})}
\label{eqC3.25-new}
\end{eqnarray}
\parinterval 公式\ref{eqC3.25-new}分为两个主要部分。第一部分:遍历所有的对齐$a$。其中$a$$\{a_1,...,a_m\}$\\ 组成,每个$a_j\in \{a_1,...,a_m\}$从译文的开始位置$(0)$循环到截止位置$(l)$。如图\ref{fig:3-19}表示的例子,描述的是源语单词$s_3$从译文的开始$t_0$遍历到结尾$t_3$,即$a_3$的取值范围。第二部分: 对于每个$a$累加对齐概率$\textrm{P}(\mathbf{s},a| \mathbf{t})=\frac{\varepsilon}{(l+1)^m}{\prod_{j=1}^{m}f(s_j|t_{a_j})}$
\parinterval 公式\ref{eqC3.25-new}分为两个主要部分。第一部分:遍历所有的对齐$\mathbf{a}$。其中$\mathbf{a}$$\{a_1,...,a_m\}$\\ 组成,每个$a_j\in \{a_1,...,a_m\}$从译文的开始位置$(0)$循环到截止位置$(l)$。如图\ref{fig:3-19}表示的例子,描述的是源语单词$s_3$从译文的开始$t_0$遍历到结尾$t_3$,即$a_3$的取值范围。第二部分: 对于每个$\mathbf{a}$累加对齐概率$\textrm{P}(\mathbf{s},a| \mathbf{t})=\frac{\varepsilon}{(l+1)^m}{\prod_{j=1}^{m}f(s_j|t_{a_j})}$
%----------------------------------------------
% 图3.29
\begin{figure}[htp]
......@@ -657,12 +660,12 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\end{figure}
%---------------------------
\parinterval 这样就得到了IBM模型1中句子翻译概率的计算式。可以看出IBM模型1的假设把翻译模型化简成了非常简单的形式。对于给定的$s$$a$$\mathbf{t}$,只要知道$\varepsilon$$\mathbf{t}(s_j |t_{a_j })$ 就可以计算出$\textrm{P}(\mathbf{s}| \mathbf{t})$,进而求出$\textrm{P}(\mathbf{s}| \mathbf{t})$\\ \\ \\
\parinterval 这样就得到了IBM模型1中句子翻译概率的计算式。可以看出IBM模型1的假设把翻译模型化简成了非常简单的形式。对于给定的$\mathbf{s}$$\mathbf{a}$$\mathbf{t}$,只要知道$\varepsilon$$\mathbf{t}(s_j |t_{a_j })$ 就可以计算出$\textrm{P}(\mathbf{s}| \mathbf{t})$,进而求出$\textrm{P}(\mathbf{s}| \mathbf{t})$\\ \\ \\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{IBM模型2}\index{Chapter3.4.2}
\parinterval IBM模型1很好的化简了问题,但是由于使用了很强的假设,导致模型和实际情况有较大差异。其中一个比较严重的问题是假设词对齐的生成概率服从均匀分布。图\ref{fig:3-20}展示了一个简单的实例。尽管译文$t$$t'$的质量更好,但对于IBM模型1来说翻译概率相同。这是因为当词对齐服从均匀分布时,模型会忽略目标语言单词的位置信息。因此当单词翻译相同但顺序不同时,翻译概率一样。同时,不合理的对齐也会导致使用不合理的词汇翻译概率,因为源语言单词是由错误位置的目标语单词生成的。虽然这个问题可以通过引入目标语语言模型进行缓解,但是翻译模型仍然需要给出更合理的建模方式,以保证翻译译文的选择是正确的。
\parinterval IBM模型1很好的化简了问题,但是由于使用了很强的假设,导致模型和实际情况有较大差异。其中一个比较严重的问题是假设词对齐的生成概率服从均匀分布。图\ref{fig:3-20}展示了一个简单的实例。尽管译文$\mathbf{t}$$t'$的质量更好,但对于IBM模型1来说翻译概率相同。这是因为当词对齐服从均匀分布时,模型会忽略目标语言单词的位置信息。因此当单词翻译相同但顺序不同时,翻译概率一样。同时,不合理的对齐也会导致使用不合理的词汇翻译概率,因为源语言单词是由错误位置的目标语单词生成的。虽然这个问题可以通过引入目标语语言模型进行缓解,但是翻译模型仍然需要给出更合理的建模方式,以保证翻译译文的选择是正确的。
%----------------------------------------------
% 图3.30
......@@ -676,20 +679,20 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\parinterval 因此,IBM模型2抛弃了对对齐概率$\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t})$服从均匀分布的假设。在IBM模型2中,我们认为词对齐是有倾向性的,对齐至少要与源语单词的位置和目标语单词的位置有关。具体来说,对齐位置$a_j$的生成概率与语言单位位置$j$、源语句子长度$m$和译文长度$l$有关,形式化表述为:
\begin{eqnarray}
\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t}) \equiv a(a_j|j,m,l)
\textrm{P}(a_j|a_1^{j-1},s_1^{j-1},m,\mathbf{t}) \equiv \mathbf{a}(a_j|j,m,l)
\label{eqC3.26-new}
\end{eqnarray}
\parinterval 我们还用图\ref{fig:3-18}中的例子来进行说明公式。在模型1中,``桌子''对齐到译文四个位置上的单词的概率是一样的。但在模型2中,``桌子''对齐到``table''被形式化为$a(a_j |j,m,l)=a(3|2,3,3)$,意思是对于源文位置2($j=2$)的词,如果它的源文是和目标语译文都是3个词($l=3,m=3$),对齐到目标语译文位置3($a_j=3$)的概率是多少?因为$a(a_j|j,m,l)$也是模型需要学习的参数,因此``桌子''对齐到不同位置上的目标语单词概率也是不一样的。理想的情况下,通过$a(a_j|j,m,l)$,``桌子''对齐到``table''应该得到更高的概率。
\parinterval 我们还用图\ref{fig:3-18}中的例子来进行说明公式。在模型1中,``桌子''对齐到译文四个位置上的单词的概率是一样的。但在模型2中,``桌子''对齐到``table''被形式化为$\mathbf{a}(a_j |j,m,l)=\mathbf{a}(3|2,3,3)$,意思是对于源文位置2($j=2$)的词,如果它的源文是和目标语译文都是3个词($l=3,m=3$),对齐到目标语译文位置3($a_j=3$)的概率是多少?因为$\mathbf{a}(a_j|j,m,l)$也是模型需要学习的参数,因此``桌子''对齐到不同位置上的目标语单词概率也是不一样的。理想的情况下,通过$\mathbf{a}(a_j|j,m,l)$,``桌子''对齐到``table''应该得到更高的概率。
\parinterval IBM模型2的其他假设均与模型1相同。把公式\ref{eqC3.21-new}\ref{eqC3.22-new}\ref{eqC3.26-new}重新带入公式\ref{eqC3.19-new}\ref{eqC3.18-new},可以得到IBM模型2的数学描述:
\begin{eqnarray}
\textrm{P}(\mathbf{s}| \mathbf{t}) & = & \sum_a{\textrm{P}(\mathbf{s},a| \mathbf{t})} \nonumber \\
& = & \sum_{a_1=0}^{l}{\cdots}\sum _{a_m=0}^{l}{\varepsilon}\prod_{j=1}^{m}{a(a_j|j,m,l)f(s_j|t_{a_j})}
\textrm{P}(\mathbf{s}| \mathbf{t}) & = & \sum_{\mathbf{a}}{\textrm{P}(\mathbf{s},\mathbf{a}| \mathbf{t})} \nonumber \\
& = & \sum_{a_1=0}^{l}{\cdots}\sum _{a_m=0}^{l}{\varepsilon}\prod_{j=1}^{m}{\mathbf{a}(a_j|j,m,l)f(s_j|t_{a_j})}
\label{eqC3.27-new}
\end{eqnarray}
\parinterval 类似于模型1,模型2的表达式\ref{eqC3.27-new}也能被拆分为两部分进行理解。第一部分:遍历所有的$a$;第二部分:对于每个$a$累加对齐概率$\textrm{P}(\mathbf{s},a| \mathbf{t})$,即计算对齐概率$a(a_j|j,m,l)$和词汇翻译概率$f(s_j|t_{a_j})$对于所有源语言位置的乘积。
\parinterval 类似于模型1,模型2的表达式\ref{eqC3.27-new}也能被拆分为两部分进行理解。第一部分:遍历所有的$\mathbf{a}$;第二部分:对于每个$\mathbf{a}$累加对齐概率$\textrm{P}(\mathbf{s},\mathbf{a}| \mathbf{t})$,即计算对齐概率$\mathbf{a}(a_j|j,m,l)$和词汇翻译概率$f(s_j|t_{a_j})$对于所有源语言位置的乘积。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{解码及计算优化}\index{Chapter3.4.3}
......@@ -720,7 +723,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\parinterval 接着,利用公式\ref{eqC3.29-new}的方式,可以把公式\ref{eqC3.25-new}\ref{eqC3.27-new}重写表示为:
\begin{eqnarray}
\textrm{IBM模型1:\ \ \ \ } \textrm{P}(\mathbf{s}| \mathbf{t}) & = & \frac{\epsilon}{(l+1)^{m}} \prod\limits_{j=1}^{m} \sum\limits_{i=0}^{l} f(s_j|t_i) \label{eq:final-model1} \\
\textrm{IBM模型2:\ \ \ \ }\textrm{P}(\mathbf{s}| \mathbf{t}) & = & \epsilon \prod\limits_{j=1}^{m} \sum\limits_{i=0}^{l} a(i|j,m,l) f(s_j|t_i) \label{eq:final-model2}
\textrm{IBM模型2:\ \ \ \ }\textrm{P}(\mathbf{s}| \mathbf{t}) & = & \epsilon \prod\limits_{j=1}^{m} \sum\limits_{i=0}^{l} \mathbf{a}(i|j,m,l) f(s_j|t_i) \label{eq:final-model2}
\label{eqC3.31-new}
\end{eqnarray}
......@@ -745,7 +748,7 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\end{figure}
%---------------------------
\parinterval 在IBM模型中,优化的目标函数被定义为$\textrm{P}(\mathbf{s}| \mathbf{t})$。也就是,对于给定的句对$(s,t)$,最大化翻译概率$\textrm{P}(\mathbf{s}| \mathbf{t})$。这里用符号$\textrm{P}_{\theta}(\mathbf{s}|\mathbf{t})$表示模型由参数$\theta$决定,模型训练可以被描述为对目标函数$\textrm{P}_{\theta}(\mathbf{s}|\mathbf{t})$的优化过程:
\parinterval 在IBM模型中,优化的目标函数被定义为$\textrm{P}(\mathbf{s}| \mathbf{t})$。也就是,对于给定的句对$(\mathbf{s},\mathbf{t})$,最大化翻译概率$\textrm{P}(\mathbf{s}| \mathbf{t})$。这里用符号$\textrm{P}_{\theta}(\mathbf{s}|\mathbf{t})$表示模型由参数$\theta$决定,模型训练可以被描述为对目标函数$\textrm{P}_{\theta}(\mathbf{s}|\mathbf{t})$的优化过程:
\begin{eqnarray}
\widehat{\theta}=\argmax_{\theta}\textrm{P}_{\theta}(\mathbf{s}|\mathbf{t})
\label{eqC3.32-new}
......@@ -846,7 +849,7 @@ f(s_u|t_v) = \lambda_{t_v}^{-1} \frac{\epsilon}{(l+1)^{m}} \prod\limits_{j=1}^{m
\end{figure}
%---------------------------
\noindent \hspace{2em} 为了化简$f(s_u|t_v)$的计算,在此对公式\ref{eqC3.40-new}进行了重新组织,见下图。红色部分表示翻译概率P$(\mathbf{s}|\mathbf{t})$;蓝色部分表示$(s_u,t_v)$在句对$(s,t)$中配对的总次数,即`$t_v$翻译为$s_u$'在所有对齐中出现的次数;绿色部分表示$f(s_u|t_v)$对于所有的$t_i$的相对值,即`$t_v$翻译为$s_u$'在所有对齐中出现的相对概率;蓝色与绿色部分相乘表示``$t_v$翻译为$s_u$''这个事件出现次数的期望的估计,称之为\textbf{期望频次(expected count)}
\noindent \hspace{2em} 为了化简$f(s_u|t_v)$的计算,在此对公式\ref{eqC3.40-new}进行了重新组织,见下图。红色部分表示翻译概率P$(\mathbf{s}|\mathbf{t})$;蓝色部分表示$(s_u,t_v)$在句对$(\mathbf{s},\mathbf{t})$中配对的总次数,即``$t_v$翻译为$s_u$''在所有对齐中出现的次数;绿色部分表示$f(s_u|t_v)$对于所有的$t_i$的相对值,即``$t_v$翻译为$s_u$''在所有对齐中出现的相对概率;蓝色与绿色部分相乘表示``$t_v$翻译为$s_u$''这个事件出现次数的期望的估计,称之为\textbf{期望频次(expected count)}
%----------------------------------------------
% 图3.29
\begin{figure}[htp]
......@@ -954,14 +957,14 @@ c_{\mathbb{E}}(\mathbf{s}_u|\mathbf{t}_v)=\sum\limits_{i=1}^{N} c_{\mathbb{E}}(
\noindent \hspace{2em} 同样的,EM算法可以直接用于训练IBM模型2。对于句对$\mathbf{(}s,\mathbf{t})$$m=|\mathbf{s}|$$l=|\mathbf{t}|$,E-Step的计算公式如下,其中参数$f(s_j|t_i)$与IBM模型1一样:
\begin{eqnarray}
c_{\mathbb{E}}(s_u|t_v;\mathbf{s},\mathbf{t}) &=&\sum\limits_{j=1}^{m} \sum\limits_{i=0}^{l} \frac{f(s_u|t_v)a(i|j,m,l) \delta(s_j,s_u)\delta (t_i,t_v) } {\sum_{k=0}^{l} f(s_u|t_v)a(k|j,m,l)} \\
c_{\mathbb{E}}(i|j,m,l;\mathbf{s},\mathbf{t}) &=&\frac{f(s_j|t_i)a(i|j,m,l)} {\sum_{k=0}^{l} f(s_j|t_k)a(k,j,m,l)}
c_{\mathbb{E}}(s_u|t_v;\mathbf{s},\mathbf{t}) &=&\sum\limits_{j=1}^{m} \sum\limits_{i=0}^{l} \frac{f(s_u|t_v)\mathbf{a}(i|j,m,l) \delta(s_j,s_u)\delta (t_i,t_v) } {\sum_{k=0}^{l} f(s_u|t_v)a(k|j,m,l)} \\
c_{\mathbb{E}}(i|j,m,l;\mathbf{s},\mathbf{t}) &=&\frac{f(s_j|t_i)\mathbf{a}(i|j,m,l)} {\sum_{k=0}^{l} f(s_j|t_k)a(k,j,m,l)}
\label{eqC3.49-new}
\end{eqnarray}
\noindent \hspace{2em} M-Step的计算公式如下,其中参数$a(i|j,m,l)$表示调序概率:
\noindent \hspace{2em} M-Step的计算公式如下,其中参数$\mathbf{a}(i|j,m,l)$表示调序概率:
\begin{eqnarray}
f(s_u|t_v) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(s_u|t_v;s^{[k]},t^{[k]}) } {\sum_{s_u} \sum_{k=0}^{K} c_{\mathbb{E}}(s_u|t_v;s^{[k]},t^{[k]})} \\
a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;s^{[k]},t^{[k]})} {\sum_{i}\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;s^{[k]},t^{[k]})}
f(s_u|t_v) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(s_u|t_v;\mathbf{s}^{[k]},\mathbf{t}^{[k]}) } {\sum_{s_u} \sum_{k=0}^{K} c_{\mathbb{E}}(s_u|t_v;\mathbf{s}^{[k]},\mathbf{t}^{[k]})} \\
\mathbf{a}(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;\mathbf{s}^{[k]},\mathbf{t}^{[k]})} {\sum_{i}\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;\mathbf{s}^{[k]},\mathbf{t}^{[k]})}
\label{eqC3.51-new}
\end{eqnarray}
......@@ -985,7 +988,7 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;s^{[k]},t^{[k]})} {\sum_{i}
\end{figure}
%---------------------------
\parinterval 对于句对$(\mathbf{s},\mathbf{t})$,令$\varphi$表示产出率,同时令${\tau}$表示每个目标语单词对应的源语言单词列表。图{\ref{fig:3-28}}描述了一个英语句子生成汉语句子的过程。首先,对于每个英语单词$t_j$决定它的产出率$\varphi_{j}$。比如``Scientists''的产出率是2,可表示为${\varphi}_{1}=2$。这表明它会生成2个汉语单词;其次,确定英语句子中每个单词生成的汉语单词列表。比如``Scientists''生成``科学家''和``们''两个汉语单词,可表示为${\tau}_1=\{{\tau}_{11}=\textrm{``科学家''},{\tau}_{12}=\textrm{``科学家''}$。这里用特殊的空标记NULL表示翻译对空的情况;最后,把生成的所有汉语单词放在合适的位置。比如``科学家''和``们''分别放在$s$的位置1和位置2。我们用符号$\pi$记录生成的单词在源语言句子s的位置。比如``Scientists''生成的汉语单词在s中的位置表示为${\pi}_{1}=\{{\pi}_{11}=1,{\pi}_{12}=2\}$
\parinterval 对于句对$(\mathbf{s},\mathbf{t})$,令$\varphi$表示产出率,同时令${\tau}$表示每个目标语单词对应的源语言单词列表。图{\ref{fig:3-28}}描述了一个英语句子生成汉语句子的过程。首先,对于每个英语单词$t_j$决定它的产出率$\varphi_{j}$。比如``Scientists''的产出率是2,可表示为${\varphi}_{1}=2$。这表明它会生成2个汉语单词;其次,确定英语句子中每个单词生成的汉语单词列表。比如``Scientists''生成``科学家''和``们''两个汉语单词,可表示为${\tau}_1=\{{\tau}_{11}=\textrm{``科学家''},{\tau}_{12}=\textrm{``科学家''}$。这里用特殊的空标记NULL表示翻译对空的情况;最后,把生成的所有汉语单词放在合适的位置。比如``科学家''和``们''分别放在$\mathbf{s}$的位置1和位置2。我们用符号$\pi$记录生成的单词在源语言句子$\mathbf{s}$的位置。比如``Scientists''生成的汉语单词在s中的位置表示为${\pi}_{1}=\{{\pi}_{11}=1,{\pi}_{12}=2\}$
\parinterval 为了表述清晰,我们重新说明每个符号的含义。$\mathbf{s}$$\mathbf{t}$$m$$l$分别表示源语言句子、目标语译文、源语言单词数量以及译文单词数量。$\mathbf{\varphi}$$\mathbf{\tau}$$\mathbf{\pi}$分别记录产出率、生成的源语言单词以及它们在源文中的位置。${\phi}_{j}$表示第$j$个译文单词$t_j$的产出率。${\tau}_{j}$${\pi}_j$分别表示$t_j$生成的源语言单词列表及其在源语言句子$\mathbf{s}$中的位置列表。
......@@ -999,14 +1002,14 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;s^{[k]},t^{[k]})} {\sum_{i}
\end{figure}
%---------------------------
\parinterval 可以看出,一组$\tau$$\phi$(记为$<\tau,\phi>$)可以决定一个对齐$a$和一个源语句子$\mathbf{s}$。相反的,一个对齐$a$和一个源语句子$\mathbf{s}$可以对应多组$<\tau,\phi>$。如图\ref{fig:3-29}所示,不同的$<\tau,\phi>$对应同一个源语言句子和词对齐。它们的区别在于目标语单词``Scientists''生成的源语言单词``科学家''和``们''的顺序不同。我们把不同的$<\tau,\phi>$对应到的相同的源语句子$\mathbf{s}$和对齐$a$记为$<\mathbf{s},a>$。因此计算$\textrm{P}(\mathbf{s},a| \mathbf{t})$时需要把每个可能结果的概率加起来,如下:
\parinterval 可以看出,一组$\tau$$\phi$(记为$<\tau,\phi>$)可以决定一个对齐$\mathbf{a}$和一个源语句子$\mathbf{s}$。相反的,一个对齐$\mathbf{a}$和一个源语句子$\mathbf{s}$可以对应多组$<\tau,\phi>$。如图\ref{fig:3-29}所示,不同的$<\tau,\phi>$对应同一个源语言句子和词对齐。它们的区别在于目标语单词``Scientists''生成的源语言单词``科学家''和``们''的顺序不同。我们把不同的$<\tau,\phi>$对应到的相同的源语句子$\mathbf{s}$和对齐$\mathbf{a}$记为$<\mathbf{s},\mathbf{a}>$。因此计算$\textrm{P}(\mathbf{s},\mathbf{a}| \mathbf{t})$时需要把每个可能结果的概率加起来,如下:
\begin{equation}
\textrm{P}(\mathbf{s},a| \mathbf{t})=\sum_{{<\tau,\phi>}\in{<\mathbf{s},a>}}{\textrm{P}(\tau,\phi|t) }
\label{eqC3.52-new}
\end{equation}
\parinterval 不过$<\mathbf{s},a>$中有多少个元素呢?通过图\ref{fig:3-28}中的例子,可以推出$<\mathbf{s},a>$应该包含$\prod_{i=0}^{l}{\varphi !}$个不同的二元组$<\tau,\pi>$。这是因为在给定源语言句子和词对齐时,对于每一个$\tau_i$都有$\varphi_{i}!$种排列。
\parinterval 不过$<\mathbf{s},\mathbf{a}>$中有多少个元素呢?通过图\ref{fig:3-28}中的例子,可以推出$<\mathbf{s},\mathbf{a}>$应该包含$\prod_{i=0}^{l}{\varphi !}$个不同的二元组$<\tau,\pi>$。这是因为在给定源语言句子和词对齐时,对于每一个$\tau_i$都有$\varphi_{i}!$种排列。
\parinterval 进一步,$\textrm{P}(\tau,\pi|\mathbf{t})$可以被表示为:
......@@ -1041,7 +1044,7 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;s^{[k]},t^{[k]})} {\sum_{i}
\end{eqnarray}
\parinterval 我们把$d(i|j,m,l)$称为扭曲度。这里$\textrm{P}(\varphi_j|\varphi_1^{j-1},\mathbf{t})={\textrm{P}(\varphi_j|t_j)}$${\textrm{P}(\pi_{jk}=i|\pi_{j1}^{k-1},}$ $\pi_{1}^{j-1},\tau_0^l,\varphi_0^l,\mathbf{t})=d(i|j,m,l)$仅对$1 \le j \le l$成立。这样就完成了图\ref{fig:3-30}中第1、 3和4部分的建模。
\parinterval 对于$j=0$的情况需要单独进行考虑。实际上,$t_0$只是一个虚拟的单词。它要对应$s$中原本为空对齐的单词。这里假设,要等其他非空对应单词都被生成(放置)后,才考虑这些空对齐单词的生成(放置)。即非空对单词都被生成后,在那些还有空的位置上放置这些空对的源语单词。此外,在任何的空位置上放置空对的源语单词都是等概率的,即放置空对齐源语言单词服从均匀分布。这样在已经放置了$k$个空对齐源语言单词的时候,应该还有$\varphi_0-k$个空位置。如果第$j$个位置为空,那么$\textrm{P}(\pi_{0k}=j|\pi_{01}^{k-1},\pi_1^l,\tau_0^l,\varphi_0^l,\mathbf{t})=\frac{1}{\varphi_0-k}$,否则$\textrm{P}(\pi_{0k}=j|\pi_{01}^{k-1},\pi_1^l,\tau_0^l,\varphi_0^l,\mathbf{t})=0$。这样对于$t_0$所对应的$\tau_0$,就有
\parinterval 对于$j=0$的情况需要单独进行考虑。实际上,$t_0$只是一个虚拟的单词。它要对应$\mathbf{s}$中原本为空对齐的单词。这里假设,要等其他非空对应单词都被生成(放置)后,才考虑这些空对齐单词的生成(放置)。即非空对单词都被生成后,在那些还有空的位置上放置这些空对的源语单词。此外,在任何的空位置上放置空对的源语单词都是等概率的,即放置空对齐源语言单词服从均匀分布。这样在已经放置了$k$个空对齐源语言单词的时候,应该还有$\varphi_0-k$个空位置。如果第$j$个位置为空,那么$\textrm{P}(\pi_{0k}=j|\pi_{01}^{k-1},\pi_1^l,\tau_0^l,\varphi_0^l,\mathbf{t})=\frac{1}{\varphi_0-k}$,否则$\textrm{P}(\pi_{0k}=j|\pi_{01}^{k-1},\pi_1^l,\tau_0^l,\varphi_0^l,\mathbf{t})=0$。这样对于$t_0$所对应的$\tau_0$,就有
{
\begin{eqnarray}
\prod_{k=1}^{\varphi_0}{\textrm{P}(\pi_{0k}|\pi_{01}^{k-1},\pi_{1}^{l},\tau_{0}^{l},\varphi_{0}^{l},e) }=\frac{1}{\varphi_{0}!}
......@@ -1051,7 +1054,7 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;s^{[k]},t^{[k]})} {\sum_{i}
\parinterval 而上面提到的这些$t_0$所对应的空位置是如何生成的呢?即如何确定哪些位置是要放置空对齐的源语言单词。在IBM模型3中,假设在所有的非空对源语单词都被生成出来后(共$\varphi_1+\varphi_2+\cdots {\varphi}_l$个非空对源语单词),这些单词后面都以$p_1$概率随机地产生一个``槽''用来放置空对单词。这样,${\varphi}_0$就服从了一个二项分布。于是我们得到
{
\begin{eqnarray}
\textrm{P}(\varphi_0|t)=(\begin{array}{c}
\textrm{P}(\varphi_0|\mathbf{t})=(\begin{array}{c}
\varphi_1+\varphi_2+\cdots \varphi_l\\
\varphi_0\\
\end{array})p_0^{\varphi_1+\varphi_2+\cdots \varphi_l+\varphi_0}p_1^{\varphi_0}
......@@ -1072,7 +1075,7 @@ m-\varphi_0\\
\noindent 其中,$n(\varphi_j |e_j)={\textrm{P}(\varphi_j|t_j)}$表示产出率的分布。这里的约束条件为,
{
\begin{eqnarray}
\sum_{f}t(s|\mathbf{t}) & = &1 \label{eqC3.59-new} \\
\sum_{f}\mathbf{t}(\mathbf{s}|\mathbf{t}) & = &1 \label{eqC3.59-new} \\
\sum_{i}d(i|j,m,l) & = & 1 \label{eqC3.60-new} \\
\sum_{\varphi} n(\varphi|\mathbf{t}) & = &1 \label{eqC3.61-new} \\
p_0+p_1 & = & 1 \label{eqC3.62-new}
......@@ -1094,7 +1097,7 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\end{figure}
%---------------------------
\parinterval 在IBM模型的词对齐框架下,目标语的cept.只能是那些非空对的目标语单词,而且每个cept.只能由一个目标语单词组成(通常把这类由一个单词组成的cept.称为独立单词cept.)。我们用$[j]$表示第$j$个独立单词cept.在目标语言句子中的位置。换句话说,$[j]$表示第$j$个非空对的目标语单词在目标语言句子中的位置。比如在本例中``mind''在$t$中的位置表示为$[3]$
\parinterval 在IBM模型的词对齐框架下,目标语的cept.只能是那些非空对的目标语单词,而且每个cept.只能由一个目标语单词组成(通常把这类由一个单词组成的cept.称为独立单词cept.)。我们用$[j]$表示第$j$个独立单词cept.在目标语言句子中的位置。换句话说,$[j]$表示第$j$个非空对的目标语单词在目标语言句子中的位置。比如在本例中``mind''在$\mathbf{t}$中的位置表示为$[3]$
\parinterval 另外,我们用$\odot_{[j]}$表示位置为$[j]$的目标语言单词对应的那些源语言单词的位置的独立单词cept.平均值,如果这个平均值不是整数则对它向上取整。比如在本例中,目标语句中第4个cept.(``.'')对应在源语言句子中的第5个输出值。可表示为${\odot}_{[4]}=5$
......@@ -1153,7 +1156,7 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\parinterval 实际上,模型5和模型4的思想基本一致,即,先确定$\tau_{[j]1}$的绝对位置,然后再确定$\tau_{[j]}$中剩余单词的相对位置。模型5消除了产生不存在的句子的可能性,不过模型5的复杂性也大大增加了。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{基于隐马尔可夫模型的模型}\index{Chapter3.5.5}
\subsection{隐马尔可夫模型}\index{Chapter3.5.5}
\parinterval 在IBM模型可以得到句子间的词对齐,因此也有很多工作在这个模型的基础上对词对齐进行改进。其中一个比较有代表性的方法是基于隐马尔可夫模型的方法\cite{vogel1996hmm},它可以被看作是IBM模型2的升级版本。
......@@ -1215,7 +1218,7 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\parinterval 此外,为了使得HMM的对齐概率$\textrm{P}(a_{j}│a_{j-1},l)$满足归一化的条件,这里还假设其对齐概率只取决于$(a_{j}-a_{j-1})$,即:
\begin{eqnarray}
\textrm{P}(a_{j}|a_{j-1},l)=\frac{s(a_{j}-a_{j-1})}{\sum_{i=1}^{l}{s(i-a_{j-1})}}
\textrm{P}(a_{j}|a_{j-1},l)=\frac{\mathbf{s}(a_{j}-a_{j-1})}{\sum_{i=1}^{l}{s(i-a_{j-1})}}
\label{eqC3.69-new}
\end{eqnarray}
......@@ -1244,24 +1247,23 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\subsection{Deficiency}\index{Chapter3.6.2}
\parinterval Deficiency问题是指翻译模型会把一部分概率分配给一些根本不存在的源语言字符串。如果用$\textrm{P}(\textrm{well}|t)$表示$\textrm{P}(\mathbf{s}| \mathbf{t})$在所有的正确的(可以理解为语法上正确的)$s$上的和,即
\parinterval Deficiency问题是指翻译模型会把一部分概率分配给一些根本不存在的源语言字符串。如果用$\textrm{P}(\textrm{well}|\mathbf{t})$表示$\textrm{P}(\mathbf{s}| \mathbf{t})$在所有的正确的(可以理解为语法上正确的)$\mathbf{s}$上的和,即
\begin{eqnarray}
\textrm{P}(\textrm{well}|\mathbf{t})=\sum_{s\textrm{\;is\;well\;formed}}{\textrm{P}(\mathbf{s}| \mathbf{t})}
\label{eqC3.70-new}
\end{eqnarray}
\parinterval 类似地,用$\textrm{P}(\textrm{ill}|\mathbf{t})$表示$\textrm{P}(\mathbf{s}| \mathbf{t})$在所有的错误的(可以理解为语法上错误的)$s$上的和。如果$\textrm{P}(\textrm{well}|\mathbf{t})+ \textrm{P}(\textrm{ill}|\mathbf{t})<1$,就把剩余的部分定义为$\textrm{P}(\textrm{failure}|\mathbf{t})$。它的形式化定义为,
\parinterval 类似地,用$\textrm{P}(\textrm{ill}|\mathbf{t})$表示$\textrm{P}(\mathbf{s}| \mathbf{t})$在所有的错误的(可以理解为语法上错误的)$\mathbf{s}$上的和。如果$\textrm{P}(\textrm{well}|\mathbf{t})+ \textrm{P}(\textrm{ill}|\mathbf{t})<1$,就把剩余的部分定义为$\textrm{P}(\textrm{failure}|\mathbf{t})$。它的形式化定义为,
\begin{eqnarray}
\textrm{P}({\textrm{failure}|\mathbf{t}}) = 1 - \textrm{P}({\textrm{well}|\mathbf{t}}) - \textrm{P}({\textrm{ill}|\mathbf{t}})
\label{eqC3.71-new}
\end{eqnarray}
\parinterval 本质上,模型3和模型4就是对应$\textrm{P}({\textrm{failure}|\mathbf{t}})>0$的情况。这部分概率是模型损失掉的。有时候也把这类Deficiency问题称为Technical Deficiency。还有一种Deficiency问题被称作Spiritually Deficiency,它是指$\textrm{P}({\textrm{well}|\mathbf{t}}) + \textrm{P}({\textrm{ill}|\mathbf{t}}) = 1$$\textrm{P}({\textrm{ill}|\mathbf{t}}) > 0$的情况。模型1和模型2就有Spiritually Deficiency的问题。可以注意到,Technical Deficiency只存在于模型3和模型4中,模型1和模型2并没有Technical Deficiency问题。根本原因是模型1和模型2的词对齐是从源语言出发对应到目标语言,$t$$s$的翻译过程实际上是从单词$s_1$开始到单词$s_m$结束,依次把每个源语言单词$s_i$对应到唯一一个目标语言位置。显然,这个过程能够保证每个源语言单词仅对应一个目标语言单词。但是,模型3和模型4中对齐是从目标语言出发对应到源语言,$t$$s$的翻译过程从$t_1$开始$t_l$结束,依次把目标语言单词$t_j$生成的单词对应到某个源语言位置上。但是这个过程不能保证$t_j$中生成的单词所对应的位置没有被其它已经完成对齐的目标语单词所生成的某个源语言单词对应过,因此也就产生了Deficency问题。
\parinterval 本质上,模型3和模型4就是对应$\textrm{P}({\textrm{failure}|\mathbf{t}})>0$的情况。这部分概率是模型损失掉的。有时候也把这类Deficiency问题称为Technical Deficiency。还有一种Deficiency问题被称作Spiritually Deficiency,它是指$\textrm{P}({\textrm{well}|\mathbf{t}}) + \textrm{P}({\textrm{ill}|\mathbf{t}}) = 1$$\textrm{P}({\textrm{ill}|\mathbf{t}}) > 0$的情况。模型1和模型2就有Spiritually Deficiency的问题。可以注意到,Technical Deficiency只存在于模型3和模型4中,模型1和模型2并没有Technical Deficiency问题。根本原因是模型1和模型2的词对齐是从源语言出发对应到目标语言,$\mathbf{t}$$\mathbf{s}$的翻译过程实际上是从单词$s_1$开始到单词$s_m$结束,依次把每个源语言单词$s_i$对应到唯一一个目标语言位置。显然,这个过程能够保证每个源语言单词仅对应一个目标语言单词。但是,模型3和模型4中对齐是从目标语言出发对应到源语言,$\mathbf{t}$$\mathbf{s}$的翻译过程从$t_1$开始$t_l$结束,依次把目标语言单词$t_j$生成的单词对应到某个源语言位置上。但是这个过程不能保证$t_j$中生成的单词所对应的位置没有被其它已经完成对齐的目标语单词所生成的某个源语言单词对应过,因此也就产生了Deficency问题。
\parinterval 这里还要强调的是,Technical Deficiency是模型3和模型4是模型本身的缺陷造成的,如果有一个``更好''的模型就可以完全避免这个问题。而Spiritually Deficiency几乎是不能从模型上根本解决的,因为对于任意一种语言我们都不能枚举所有的句子($\textrm{P}({\textrm{ill}|\mathbf{t}})$实际上是得不到的)。
\parinterval IBM的模型5已经解决了Technical Deficiency问题。不过模型5过于复杂。实际上Technical Deficiency问题是不是需要解决,这一点在本节随后的内容中还要进行讨论。Spiritually Deficiency的解决很困难,因为即使对于人来说也很难判断一个句子是不是``良好''的句子。当然可以考虑用语言模型来缓解这个问题,不过由于在翻译的时候源语言句子都是定义``良好''的句子,$\textrm{P}({\textrm{ill}|\mathbf{t}})$$\textrm{P}(\mathbf{s}| \mathbf{t})$的影响并不大。但用输入的源语言句子$s$的``良好性''并不能解决Technical Deficiency,因为Technical Deficiency是模型的问题或者模型参数估计方法的问题。无论输入什么样的$\mathbf{s}$,模型3和模型4的Technical Deficiency问题都存在。
\parinterval IBM的模型5已经解决了Technical Deficiency问题。不过模型5过于复杂。实际上Technical Deficiency问题是不是需要解决,这一点在本节随后的内容中还要进行讨论。Spiritually Deficiency的解决很困难,因为即使对于人来说也很难判断一个句子是不是``良好''的句子。当然可以考虑用语言模型来缓解这个问题,不过由于在翻译的时候源语言句子都是定义``良好''的句子,$\textrm{P}({\textrm{ill}|\mathbf{t}})$$\textrm{P}(\mathbf{s}| \mathbf{t})$的影响并不大。但用输入的源语言句子$\mathbf{s}$的``良好性''并不能解决Technical Deficiency,因为Technical Deficiency是模型的问题或者模型参数估计方法的问题。无论输入什么样的$\mathbf{s}$,模型3和模型4的Technical Deficiency问题都存在。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{句子长度}\index{Chapter3.6.4}
......@@ -1273,14 +1275,14 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\subsection{其它问题}\index{Chapter3.6.5}
\parinterval 模型5的意义?模型5的提出是为了消除了模型3和模型4的Deficiency问题。\\Deficiency问题的本质是,$\textrm{P}(\mathbf{s},a| \mathbf{t})$在所有合理的对齐上概率和不为1。但是,在统计机器翻译中我们更关心是哪个对齐$a$使$\textrm{P}(\mathbf{s},a| \mathbf{t})$达到最大,即使$\textrm{P}(\mathbf{s},a|\mathbf{t})$不符合概率分布的定义,也并不影响我们寻找理想的对齐$a$。从这个工程的角度说,$\textrm{P}(\mathbf{s},a| \mathbf{t})$不归一并不是一个十分严重的问题。遗憾的是,实际上至今也太多对IBM模型3和模型4中的Deficiency问题进行过系统的实验和分析,这个问题到底有多严重并没有定论。当然用模型5是可以解决这个问题。但是如果用一个非常复杂的模型去解决了一个并不产生严重后果的问题,那这个模型也就没有太大意义了(从实践的角度)。
\parinterval 模型5的意义?模型5的提出是为了消除了模型3和模型4的Deficiency问题。\\Deficiency问题的本质是,$\textrm{P}(\mathbf{s},\mathbf{a}| \mathbf{t})$在所有合理的对齐上概率和不为1。但是,在统计机器翻译中我们更关心是哪个对齐$\mathbf{a}$使$\textrm{P}(\mathbf{s},\mathbf{a}| \mathbf{t})$达到最大,即使$\textrm{P}(\mathbf{s},\mathbf{a}|\mathbf{t})$不符合概率分布的定义,也并不影响我们寻找理想的对齐$\mathbf{a}$。从这个工程的角度说,$\textrm{P}(\mathbf{s},\mathbf{a}| \mathbf{t})$不归一并不是一个十分严重的问题。遗憾的是,实际上至今也太多对IBM模型3和模型4中的Deficiency问题进行过系统的实验和分析,这个问题到底有多严重并没有定论。当然用模型5是可以解决这个问题。但是如果用一个非常复杂的模型去解决了一个并不产生严重后果的问题,那这个模型也就没有太大意义了(从实践的角度)。
\parinterval 概念(Cept.)的意义?经过前面的分析可知,IBM模型的词对齐模型是使用了cept.这个概念。但是实质上,在IBM模型中使用的cept.最多只能对应一个目标语言单词(模型并没有用到源语言cept.的概念)。因此可以直接用单词代替cept.。这样,即使不引入cept.的概念,也并不影响IBM模型的建模。实际上,cept.的引入确实可以帮助我们从语法和语义的角度解释词对齐过程。不过,这个方法在IBM模型中的效果究竟如何也没有定论。
\section{小结及深入阅读}\index{Chapter3.7}
\parinterval 本章对IBM系列模型进行了全面的介绍和讨论,从一个简单的基于单词的翻译模型开始,我们以建模、解码、训练多个维度对统计机器翻译进行了描述,期间也涉及了词对齐、优化等多个重要概念。IBM模型共分为5个模型,对翻译问题的建模依次由浅入深,同时模型复杂度也依次增加。IBM模型作为入门统计机器翻译的``必经之路'',其思想对今天的机器翻译仍然产生着影响。虽然单独使用IBM模型进行机器翻译现在已经不多见,甚至很多从事神经机器翻译等前沿研究的人对IBM模型已经逐渐淡忘,但是不能否认IBM模型标志着一个时代的开始。从某种意义上,当我们使用公式$\hat{t} = \argmax_{t} \textrm{P}(t|s)$描述机器翻译问题的时候,或多或少都在与IBM模型使用相似的思想。
\parinterval 本章对IBM系列模型进行了全面的介绍和讨论,从一个简单的基于单词的翻译模型开始,我们以建模、解码、训练多个维度对统计机器翻译进行了描述,期间也涉及了词对齐、优化等多个重要概念。IBM模型共分为5个模型,对翻译问题的建模依次由浅入深,同时模型复杂度也依次增加。IBM模型作为入门统计机器翻译的``必经之路'',其思想对今天的机器翻译仍然产生着影响。虽然单独使用IBM模型进行机器翻译现在已经不多见,甚至很多从事神经机器翻译等前沿研究的人对IBM模型已经逐渐淡忘,但是不能否认IBM模型标志着一个时代的开始。从某种意义上,当我们使用公式$\hat{\mathbf{t}} = \argmax_{\mathbf{t}} \textrm{P}(\mathbf{t}|\mathbf{s})$描述机器翻译问题的时候,或多或少都在与IBM模型使用相似的思想。
\parinterval 当然,本书也无法涵盖IBM模型的所有内涵,很多内容需要感兴趣的读者继续研究和挖掘。有两个方向可以考虑
......@@ -1291,21 +1293,28 @@ p_0+p_1 & = & 1 \label{eqC3.62-new}
\item 除了在机器翻译建模上的开创性工作,IBM模型的另一项重要贡献是建立了统计词对齐的基础模型。在训练IBM模型的过程中,除了学习到模型参数,我们还可以得到双语数据上的词对齐结果。也就是说词对齐标注是IBM模型训练的间接产物。这也使得IBM模型成为了自动词对齐的重要方法。包括GIZA++在内的很多工作,实际上更多的是被用于自动词对齐任务,而非简单的训练IBM模型参数。随着词对齐概念的不断深入,这个任务逐渐成为了自然语言处理中的重要分支,比如,对IBM模型的结果进行对称化\cite{och2003systematic},也可以直接使用判别式模型利用分类模型解决词对齐问题\cite{ittycheriah2005maximum},甚至可以把利用对齐的思想用于短语和句法结构的双语对应\cite{xiao2013unsupervised}。除了GIZA++,研究人员也开发了很多优秀的自动词对齐工具,比如,FastAlign(\url{https://github.com/clab/fast_align})、Berkeley Aligner(\url{https://github.com/mhajiloo/berkeleyaligner})等,这些工具现在也有很广泛的应用。
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%第一章附录A
\begin{appendices}
\chapter{附录A}
\label{appendix-A}
\end{appendices}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%第三章附录B
\begin{appendices}
\chapter{附录B}
\label{appendix-B}
\section{IBM模型3训练方法}
\parinterval 模型3的参数估计与模型1和模型2采用相同的方法。这里直接给出辅助函数。
\begin{eqnarray}
h(t,d,n,p, \lambda,\mu, \nu, \zeta) & = & \textrm{P}_{\theta}(\mathbf{s}|\mathbf{t})-\sum_{e}\lambda_{e}(\sum_{s}t(\mathbf{s}|\mathbf{t})-1)-\sum_{i}\mu_{iml}(\sum_{j}d(j|i,m,l)-1) \nonumber \\
h(\mathbf{t},d,n,p, \lambda,\mu, \nu, \zeta) & = & \textrm{P}_{\theta}(\mathbf{s}|\mathbf{t})-\sum_{e}\lambda_{e}(\sum_{s}\mathbf{t}(\mathbf{s}|\mathbf{t})-1)-\sum_{i}\mu_{iml}(\sum_{j}d(j|i,m,l)-1) \nonumber \\
& & -\sum_{e}\nu_{e}(\sum_{\varphi}n(\varphi|e)-1)-\zeta(p^0+p^1-1)
\label{eq:1.1}
\end{eqnarray}
%----------------------------------------------
\parinterval 由于篇幅所限这里略去了推导步骤直接给出一些用于参数估计的等式。
\begin{eqnarray}
c(s|t,\mathbf{s},\mathbf{t}) = \sum_{\mathbf{a}}(\textrm{p}_{\theta}(\mathbf{s},\mathbf{a}|\mathbf{t}) \times \sum_{i=1}^{m} (\delta(s_i,\mathbf{s}) \cdot \delta(t_{a_{i}},\mathbf{t})))
c(\mathbf{s}|\mathbf{t},\mathbf{s},\mathbf{t}) = \sum_{\mathbf{a}}(\textrm{p}_{\theta}(\mathbf{s},\mathbf{a}|\mathbf{t}) \times \sum_{i=1}^{m} (\delta(s_i,\mathbf{s}) \cdot \delta(t_{a_{i}},\mathbf{t})))
\label{eq:1.2}
\end{eqnarray}
\begin{eqnarray}
......@@ -1328,7 +1337,7 @@ c(1|\mathbf{s},\mathbf{t}) = \sum_{\mathbf{a}}(\textrm{p}_{\theta}(\mathbf{s},\m
\parinterval 进一步,
\begin{eqnarray}
t(\mathbf{s}|\mathbf{t}) = \lambda_{t}^{-1} \times \sum_{k=1}^{S}c(\mathbf{s}|\mathbf{t};\mathbf{s}(k),\mathbf{t}(k))
\mathbf{t}(\mathbf{s}|\mathbf{t}) = \lambda_{t}^{-1} \times \sum_{k=1}^{S}c(\mathbf{s}|\mathbf{t};\mathbf{s}(k),\mathbf{t}(k))
\label{eq:1.7}
\end{eqnarray}
\begin{eqnarray}
......@@ -1347,7 +1356,7 @@ pk = \zeta^{-1} \sum_{k=1}^{S}c(k;\mathbf{s}(k),\mathbf{t}(k))
\parinterval 在模型3中,因为产出率的引入,我们并不能像在模型1和模型2中那样,在保证正确性的情况下加速参数估计的过程。这就使得每次迭代过程中,我们都不得不面对大小为$(l+1)^m$的词对齐空间。遍历所有$(l+1)^m$个词对齐所带来的高时间复杂度显然是不能被接受的。因此就要考虑是不是可以仅利用词对齐空间中的部分词对齐对这些参数进行估计。比较简单且直接的方法就是仅利用Viterbi对齐来进行参数估计。遗憾的是,在模型3中我们没有方法直接获得Viterbi对齐。这样只能采用一种折中的方法,即仅考虑那些使得$\textrm{P}_{\theta}(\mathbf{s},\mathbf{a}|\mathbf{t})$值较高的词对齐。这里把这部分词对齐组成的集合记为S。式(\ref{eq:1.2})可以被修改为,
\begin{eqnarray}
c(s|t,\mathbf{s},\mathbf{t}) \approx \sum_{\mathbf{a} \in \mathbf{S}}(\textrm{P}_{\theta}(\mathbf{s},\mathbf{a}|\mathbf{t}) \times \sum_{i=1}^{m}(\delta(s_i,\mathbf{s}) \cdot \delta(t_{a_{i}},\mathbf{t})))
c(\mathbf{s}|\mathbf{t},\mathbf{s},\mathbf{t}) \approx \sum_{\mathbf{a} \in \mathbf{S}}(\textrm{P}_{\theta}(\mathbf{s},\mathbf{a}|\mathbf{t}) \times \sum_{i=1}^{m}(\delta(s_i,\mathbf{s}) \cdot \delta(t_{a_{i}},\mathbf{t})))
\label{eq:1.11}
\end{eqnarray}
%----------------------------------------------
......
......@@ -44,7 +44,7 @@
}
{
\draw[decorate,thick,decoration={brace,amplitude=5pt,mirror}] ([yshift=-0.2em]eq5.south west) -- ([yshift=-0.2em]eq6.south east) node [pos=0.4,below,xshift=-0.0em,yshift=-0.3em] (expcount1) {\footnotesize{\textbf{'$t_v$翻译为$s_u$'这个事件}}};
\draw[decorate,thick,decoration={brace,amplitude=5pt,mirror}] ([yshift=-0.2em]eq5.south west) -- ([yshift=-0.2em]eq6.south east) node [pos=0.4,below,xshift=-0.0em,yshift=-0.3em] (expcount1) {\footnotesize{\textbf{``$t_v$翻译为$s_u$''这个事件}}};
\node [anchor=north west] (expcount2) at ([yshift=0.5em]expcount1.south west) {\footnotesize{\textbf{出现次数的期望的估计}}};
\node [anchor=north west] (expcount3) at ([yshift=0.5em]expcount2.south west) {\footnotesize{\textbf{称之为期望频次expected count}}};
}
......
......@@ -55,7 +55,7 @@
\IfFileExists{C:/WINDOWS/win.ini}
{\newcommand{\mycfont}{song}}
{\newcommand{\mycfont}{gbsn}}
%{\newcommand{\mycfont}{gbsn}}
\begin{CJK}{UTF8}{\mycfont}
\end{CJK}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论