Commit 3ac43971 by xiaotong

recheck chapters 3.1-3.2

parent 74cff391
......@@ -11,14 +11,14 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{基于词的翻译模型}
\hspace{2em}使用统计方法对翻译进行建模是机器翻译发展中的重要里程碑。这种思想也影响了随后的统计机器翻译和神经机器翻译。虽然技术不断发展,传统的统计模型已经不再``新鲜'',但是对于今天机器翻译的研究仍然有启示作用。想要了解前沿、展望未来,我们更要冷静的思考前任给我们带来了什么。基于此,本章将主要介绍统计机器翻译的开山之作\ \ \ \ IBM模型,它主要提出了使用统计模型进行翻译的思想,并使用基于单词对齐的方式完成了机器翻译的统计建模。IBM模型由Peter E. Brown等人在1993年提出({\red 参考文献!!!})\ \ \ \ 《The Mathematics of Statistical Machine Translation: Parameter Estimation》。客观的说,这篇文章的视野和对问题的理解,已经超过当时很多人所能看到的东西,其衍生出来的一系列方法和新的问题还被后人花费将近10年的时间来进行研究与讨论。时至今日,IBM模型中的一些思想仍然影响着很多研究工作。
\hspace{2em}使用统计方法对翻译问题进行建模是机器翻译发展中的重要里程碑。这种思想也影响了当今的统计机器翻译和神经机器翻译方法。虽然技术不断发展,传统的统计模型已经不再``新鲜'',但它对于今天机器翻译的研究仍然有着重要的启示作用。在了解前沿、展望未来的同时,我们更要冷静的思考前人给我们带来了什么。基于此,本章将介绍统计机器翻译的开山之作\ \ \ \ IBM模型,它提出了使用统计模型进行翻译的思想,并在建模中引入了单词对齐这一重要概念。IBM模型由Peter E. Brown等人于上世纪九十年代初提出({\red 参考文献!!!})\ \ \ \ 《The Mathematics of Statistical Machine Translation: Parameter Estimation》。客观的说,这项工作的视野和对问题的理解,已经超过当时很多人所能看到的东西,其衍生出来的一系列方法和新的问题还被后人花费将近10年的时间来进行研究与讨论。时至今日,IBM模型中的一些思想仍然影响着很多研究工作。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{什么是基于词的翻译模型}\index{Chapter3.1}%Index的作用,目前不清晰
\hspace{2em}在机器翻译中,我们希望得到一个源语言到目标语言的翻译。虽然对于人类来说这个问题很简单。但是,让计算机做这样的工作却困难很多,因为我们需要把翻译``描述''成计算机可以计算的形式。因此这里面临的第一个问题是:如何对翻译进行建模?从这个角度计算机的角度来说,需要把抽象的翻译问题转换为可计算的问题,这样问题又可以被重新描述为:如何将翻译转换为一个可计算的模型或过程?
\hspace{2em}在机器翻译中,我们希望得到一个源语言到目标语言的翻译。对于人类来说这个问题很简单,但是让计算机做这样的工作却很困难,因为我们需要把翻译``描述''成计算机可以计算的形式。因此这里面临的第一个问题是:如何对翻译进行建模?从计算机的角度来看,这就需要把自然语言的翻译问题转换为计算机可计算的问题。也就是,我们需要解决:如何将翻译转换为一个可计算的模型或过程?
\noindent\hspace{2em}那么,基于单词的统计机器翻译模型又是如何描述翻译问题的呢?Peter E. Brown等人提出了一个观点({\red 参考文献!!!}):在翻译源语句时,通常是把每个源语句的单词翻译成对应的目标语单词,然后调整这些单词的顺序,最后得到翻译结果,而这个过程可以用统计模型描述。尽管在人看来使用两个语言单词之间的对应进行翻译是很自然的事,但是对于计算机来说是迈出了一大步。
\noindent\hspace{2em}那么,基于单词的统计机器翻译模型又是如何描述翻译问题的呢?Peter E. Brown等人提出了一个观点({\red 参考文献!!!}):在翻译源语句时,可以把每个源语言句子中的单词翻译成对应的目标语言单词,然后调整这些目标语言单词的顺序,最后得到整个句子的翻译结果,而这个过程可以用统计模型来描述。尽管在人看来使用两个语言单词之间的对应进行翻译是很自然的事,但是对于计算机来说可是向前迈出了一大步。
\noindent\hspace{2em}先来看一个例子。图 \ref{fig:figure-zh-en-translation-example}展示了一个汉语翻译到英语的例子。首先我们把源语句的单词``我''、``对''、``你''、``感到''和``满意''分别翻译为``I''、``with''、``you''、``am''\ 和``satisfied'',然后调整单词的顺序,比如``am''放在译文的第2个位置,``you''应该放在最后的位置等,最后得到译文``I am satisfied with you''。
%空一行用来段落换行,noindent取消首行缩进,hspace{}指定缩进距离,1em等于两个英文字符|一个汉字
......@@ -33,14 +33,14 @@
\end{figure}
%-------------------------------------------
\noindent\hspace{2em}上面的例子反映了翻译中的一些要求:首先,两种语言直接单词的顺序可能不一致,译文需要符合目标语的习惯,这也是我们常说翻译的\textbf{流畅度}问题(fluency);其次,源语言单词需要准确的翻译出来\footnote{当然,对于一些意译的情况或者虚词并不需要翻译。},也是我们常说的翻译的\textbf{准确性}\textbf{充分性}问题(adequacy)。为了达到以上目标,传统观点认为翻译过程包含三个步骤(图 \ref{fig:translation-pipeline}
\noindent\hspace{2em}上面的例子反映了人在做翻译时所使用的一些知识:首先,两种语言单词的顺序可能不一致,译文需要符合目标语的习惯,这也是我们常说翻译的\textbf{流畅度}问题(fluency);其次,源语言单词需要准确的被翻译出来\footnote{当然,对于一些意译的情况或者虚词并不需要翻译。},也是我们常说的翻译的\textbf{准确性}\textbf{充分性}问题(adequacy)。为了达到以上目的,传统观点认为翻译需要过程包含三个步骤(图 \ref{fig:translation-pipeline}
\begin{itemize}
\item 分析。将源语句切分或者表示为能够处理的最小单元的过程。在基于词的翻译模型的最小处理单元就是单词,因此在这里也可以简单地将分析理解为分词
\item \textbf{分析}。将源语言句子切分或者表示为能够处理的最小单元。在基于词的翻译模型中,最小处理单元就是单词,因此在这里也可以简单地将分析理解为分词\footnote{在后续章节中会看到,分析也包括对语言结构的深入分析,但是这里为了突出基于单词的概念,因此把问题简化为最简单的情况。}
\item 转换。把源语句中的每个单词都翻译成目标语单词。
\item \textbf{转换}。把源语句中的每个单词翻译成目标语单词。
\item 生成。基于转换的结果,将目标语译文变成通顺且合乎语法的句子。
\item \textbf{生成}。基于转换的结果,将目标语译文变成通顺且合乎语法的句子。
\end{itemize}
%----------------------------------------------
......@@ -52,14 +52,14 @@
\label{fig:translation-pipeline}
\end{figure}
%---------------------------
\noindent\hspace{2em}即使从现在来看,``分析、转换和生成''依然是一个非常深刻的观点。包括机器翻译在内的很多自然语言处理任务都可以用这个过程来解释。比如,对于现在比较前沿的神经机器翻译,从大的框架来说,依然在做分析(编码器)、转换(编码-解码注意力)和生成(解码器),只不这些过程隐含在神经网络的设计中。当然,这里并不会展开过多的讨论,随着后面技术内容的深入,这个观念会有进一步体现。
\noindent\hspace{2em}即使现在,``分析、转换和生成''依然是一个非常深刻的观点。包括机器翻译在内的很多自然语言处理任务都可以用这个过程来解释。比如,对于现在比较前沿的神经机器翻译方法,从大的框架来说,依然在做分析(编码器)、转换(编码-解码注意力)和生成(解码器),只不这些过程隐含在神经网络的设计中。当然,这里并不会对``分析、转换和生成''的架构展开过多的讨论,随着后面技术内容讨论的深入,这个观念会有进一步体现。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{构建一个简单的机器翻译系统}\index{Chapter3.2}%Index的作用,目前不清晰
\label{sec:simple-mt-example}
\noindent\hspace{2em}本节首先对比人工翻译流程和机器翻译流程的异同点,从中我们归纳出构建机器翻译系统的两个主要流程:训练和解码。其次从单词翻译模型学习、句子级翻译模型学习和解码三个方面描述如何构建一个简单的机器翻译系统。
\noindent\hspace{2em}本节首先对比人工翻译和机器翻译过程的异同点,从中我们归纳出构建机器翻译系统的两个主要流程:训练和解码。我们会从学习翻译知识(单词、句子)和运用翻译知识两个方面描述如何构建一个简单的机器翻译系统。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{如何进行翻译?}\index{Chapter3.2.1}
......@@ -67,7 +67,7 @@
\vspace{0.5em}
\noindent\hspace{2em} \textbf{(一)人工翻译流程}\index{Chapter3.2.1.1}
\noindent\hspace{2em}当我们翻译一个句子时,首先会快速地分析出句子的构成,然后根据以往的知识,得到每个词的候选翻译,最后利用对目标语的理解拼出来一个译文。尽管这个过程并不是严格来自心理学或者脑科学相关结论,但至少可以帮助我们理解人在翻译时的思考方式。
\noindent\hspace{2em}当我们翻译一个句子时,首先会快速地分析出句子的(单词)构成,然后根据以往的知识,得到每个词可能的翻译,最后利用对目标语的理解拼出来一个译文。尽管这个过程并不是严格来自心理学或者脑科学的相关结论,但至少可以帮助我们理解人在翻译时的思考方式。
%----------------------------------------------
% 图3.3
\begin{figure}[htp]
......@@ -78,30 +78,34 @@
\end{figure}
%---------------------------
\noindent\hspace{2em}\ref{figureC3.3}展示了翻译“我 对 你表示 满意”时我们思考的内容。具体来说,有如下两方面内容。
\noindent\hspace{2em}\ref{figureC3.3}展示了人在翻译“我 对 你表示 满意”时可能会思考的内容。具体来说,有如下两方面内容。
\begin{itemize}
\item 翻译知识的学习。对于输入的源语言句子,我们首先需要知道每个单词可能的翻译,称为候选翻译。比如``对''可能的译文有``to''、``with''和``for''等。对于人来说,可以通过阅读、背诵、做题或者老师教等途径获得翻译知识,这些知识就包含了源语与目标语单词之间的对应关系。我们也把这个过程称之为学习过程。
\vspace{0.5em}
\item 翻译知识的学习。对于输入的源语言句子,我们首先需要知道每个单词可能的翻译有什么,这些翻译被称为\textbf{翻译候选}。比如,汉语单词``对''可能的译文有``to''、``with''和``for''等。对于人来说,可以通过阅读、背诵、做题或者老师教等途径获得翻译知识,这些知识就包含了源语言与目标语言单词之间的对应关系。我们也把这个过程称之为学习过程。
\vspace{0.5em}
\item 运用知识生成译文。当翻译一个从未见过的句子时,我们可以运用学习到的翻译知识,得到新的句子中每个单词的译文,并处理常见的单词搭配、主谓一致等问题,比如,我们知道``satisfied''后面常常使用介词``with''构成搭配,基于这些知识可以快速生成译文。
\item 运用知识生成译文。当翻译一个从未见过的句子时,我们可以运用学习到的翻译知识,得到新的句子中每个单词的译文,并处理常见的单词搭配、主谓一致等问题,比如,我们知道``satisfied''后面常使用介词``with''构成搭配,基于这些知识可以快速生成译文。
\vspace{0.5em}
\end{itemize}
当然,每个人进行翻译时所使用的方法和技巧都不相同,所谓人工翻译也没有固定的流程。但是,可以确定的是,人进行翻译也需要通过``学习''和``运用''翻译知识。对翻译知识``学习''和``运用''的好与坏,直接决定了人工翻译结果的质量。
当然,每个人进行翻译时所使用的方法和技巧都不相同,所谓人工翻译也没有固定的流程。但是,可以确定的是,人在进行翻译时也需要``学习''和``运用''翻译知识。对翻译知识``学习''和``运用''的好与坏,直接决定了人工翻译结果的质量。
\vspace{0.5em}
\textbf{(二)机器翻译流程}\index{Chapter3.2.1.2}
\noindent\hspace{2em}人进行翻译的过程比较容易理解,那计算机是如何完成翻译的呢?虽然``人工智能''这个感念显得很神奇,但是计算机远没有人那么智能,甚至说还很笨。一方面,他没有能力像人一样,在教室里和老师一起学习语言知识;另一方面,即使能列举出每个单词的候选译文,但是还是不知道这些译文怎么拼装成句,甚至不知道哪些译文是对的。为了更加直观地理解机器在翻译时要解决的挑战,我们将其中需要解决的问题归纳如下。
\noindent\hspace{2em}人进行翻译的过程比较容易理解,那计算机是如何完成翻译的呢?虽然人工智能这个感念显得很神奇,但是计算机远没有人那么智能,有时甚至还很``笨''。一方面,他没有能力像人一样,在教室里和老师一起学习语言知识;另一方面,即使能列举出每个单词的候选译文,但是还是不知道这些译文怎么拼装成句的,甚至不知道哪些译文是对的。为了更加直观地理解机器在翻译时要解决的挑战,我们将问题归纳如下。
\vspace{0.5em}
\begin{itemize}
\item 如何让计算机得到单词的译文并将它们拼装成句?
\item 如何让计算机获得每个单词的译文,然后将这些单词的译文拼装成句?
\vspace{0.5em}
\item 如果可以形成译文,如何让计算机知道不同译文的好坏?
\item 如果可以形成整句的译文,如何让计算机知道不同译文的好坏?
\end{itemize}
\vspace{0.5em}
\noindent\hspace{2em}对于第一个问题,我们可以给计算机一个翻译词典,这样计算机可以发挥计算方面的优势,简单粗暴的把尽可能多的翻译结果拼装出来。比如,可以把每个翻译结果看作是对单词翻译的拼装,表示成贯穿多个单词的一条路径,计算机所做的就是尽可能多的生成这样的路径。图\ref{figureC3.4}中蓝色和红色的线就分别表示了两条不同的译文选择路径,区别在于“满意”和“对”的翻译候选是不一样的,蓝色线选择的是``satisfy''和``to'',而红色线是``satisfied''和``with''。换句话说,不同的译文对应不同的路径,即使词序不同也会对应不同的路径。
\noindent\hspace{2em}对于第一个问题,我们可以给计算机一个翻译词典,这样计算机可以发挥计算方面的优势,简单粗暴的把尽可能多的翻译结果拼装出来。比如,可以把每个翻译结果看作是对单词翻译的拼装,这可以被形象的比做贯穿多个单词的一条路径,计算机所做的就是尽可能多的生成这样的路径。图\ref{figureC3.4}中蓝色和红色的线就分别表示了两条不同的译文选择路径,区别在于“满意”和“对”的翻译候选是不一样的,蓝色线选择的是``satisfy''和``to'',而红色线是``satisfied''和``with''。换句话说,不同的译文对应不同的路径,即使词序不同也会对应不同的路径。
%----------------------------------------------
% 图3.4
\begin{figure}[htp]
......@@ -112,12 +116,12 @@
\end{figure}
%---------------------------
\noindent\hspace{2em}对于第二个问题,尽管机器能够找到很多这样的译文选择路径,但它并不知道那些路径是好的。说的再直白一些,简单的枚举路径实际上就是一个体力活,没有什么智能。因此计算机还需要再聪明一些,运用它的能够``掌握''的知识判断哪个结果是好的。这一步是最具挑战的,当然也有很多思路。在统计机器翻译中,这个问题被定义为:设计一种统计模型,它可以给每个译文一个概率值,这个概率值越高表示译文质量越好。如图\ref{figureC3.4}所示,每个单词翻译候选的右侧黑色框里的数字就是单词的翻译概率。使用这些单词的翻译概率,我们可以得到整句译文的概率(符号P表示)。这样,我们用概率化的模型描述了每个翻译候选的可能性。基于每个翻译候选的可能性,机器翻译系统可以对所有的译文选择路径进行打分,图\ref{figureC3.4}中第一条翻译路径的分数为0.042,第二条是0.006,以此类推。最后,系统可以选择分数最高的路径作为源语句的最终译文。
\noindent\hspace{2em}对于第二个问题,尽管机器能够找到很多这样的译文选择路径,但它并不知道哪些路径是好的。说的再直白一些,简单的枚举路径实际上就是一个体力活,没有什么智能。因此计算机还需要再聪明一些,运用它的能够``掌握''的知识判断翻译结果的好与坏。这一步是最具挑战的,当然也有很多思路。在统计机器翻译中,这个问题被定义为:设计一种统计模型,它可以给每个译文一个可能性,而这个可能性越高表明译文越接近人工翻译。如图\ref{figureC3.4}所示,每个单词翻译候选的右侧黑色框里的数字就是单词的翻译概率。使用这些单词的翻译概率,我们可以得到整句译文的概率(符号P表示)。这样,我们用概率化的模型描述了每个翻译候选的可能性。基于每个翻译候选的可能性,机器翻译系统可以对所有的翻译``路径''进行打分,比如,图\ref{figureC3.4}中第一条路径的分数为0.042,第二条是0.006,以此类推。最后,系统可以选择分数最高的路径作为源语言句子的最终译文。
\vspace{0.5em}
\textbf{(三)人工 vs. 机器}\index{Chapter3.2.1.3}
\textbf{(三)人 vs. 计算机}\index{Chapter3.2.1.3}
\noindent\hspace{2em}人在翻译时的决策和推断是非常确定并且快速的,但机器翻译处理这个问题却充满了不确定性和概率化的思想。当然它们也有类似的地方。首先,计算机使用统计模型目的是建立处理翻译问题的基本模式,并储存相关的模型参数,这个和我们大脑的作用是类似的\footnote{这里,并不是要把统计模型等同于生物学或者认知科学上的人脑,我们指的是他们处理问题时发挥的作用类似。};其次,计算机对统计模型进行训练的过程相当于人学习知识的过程,或者二者都可以称为学习;再有,计算机使用学习到的模型对新的句子进行翻译的过程相当于人运用知识进行翻译的过程。在统计机器翻译中,模型学习的过程称为\textbf{训练},目的是从双语平行数据中自动学习翻译知识;我们把应用模型的过程称为\textbf{解码}\textbf{推断},目的是使用学习的知识对新的句子进行翻译。这就是当前机器实现翻译的两个核心步骤:训练和解码。图\ref{figureC3.4}右侧标注了在机器翻译过程中这两个部分的体现。这样,统计机器翻译的核心由三部分构成 - 建模、训练和解码。本章后续内容会围绕这三个问题展开讨论。
\noindent\hspace{2em}人在翻译时的决策是非常确定并且快速的,但计算机处理这个问题时却充满了概率化的思想。当然它们也有类似的地方。首先,计算机使用统计模型的目的是把翻译知识变得可计算,并把这些``知识''储存在相关的模型参数中,这个模型和我们大脑的作用是类似的\footnote{这里,并不是要把统计模型等同于生物学或者认知科学上的人脑,我们指的是他们处理翻译问题时发挥的作用类似。};其次,计算机对统计模型进行训练的过程相当于人类学习知识的过程,或者二者都可以称为学习;再有,计算机使用学习到的模型对新句子进行翻译的过程相当于人运用知识的过程。在统计机器翻译中,模型学习的过程被称为\textbf{训练},目的是从双语平行数据中自动学习翻译``知识'';而使用模型处理新句子的过程被称为\textbf{解码}\textbf{推断},目的是使用学习到的知识对新的句子进行翻译。这也反映了机器翻译的两个核心步骤:训练和解码。图\ref{figureC3.4}的右侧标注在翻译过程中训练和解码的位置。最终,统计机器翻译的核心由三部分构成 - 建模、训练和解码。本章后续内容会围绕这三个问题展开讨论。
%----------------------------------------------
% 图3.5
......@@ -132,13 +136,13 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{基本框架}\index{Chapter3.2.2}
\noindent\hspace{2em}为了可以对统计机器翻译有一个简单且直观的认识,下面我们将介绍如何构建一个非常简单的基于词的统计机器翻译系统,其中用到的很多方法的思想来自IBM模型。这里,我们仍然使用数据驱动的统计建模方法。图\ref{figureC3.6}展示了系统的主要流程,包括两个主要步骤。
\noindent\hspace{2em}为了可以对统计机器翻译有一个直观的认识,下面我们将介绍如何构建一个非常简单的基于词的统计机器翻译系统,其中涉及到的很多思想来自IBM模型。这里,我们仍然使用数据驱动的统计建模方法。图\ref{figureC3.6}展示了系统的主要流程,包括两个主要步骤。
\vspace{0.5em}
\begin{itemize}
\item \textbf{训练}:从双语平行数据中学习翻译模型,这个模型称为$\textrm{P}(t|s)$。其中$s$表示源语言,$t$表示目标语,它表示给定源语句的条件下,翻译为目标语句子的概率。简言之,这一步需要从大量的双语平行数据中学习到$\textrm{P}(t|s)$的计算方法。
\item \textbf{训练}:从双语平行数据中学习翻译模型,记为$\textrm{P}(t|s)$,其中$s$表示源语言句子,$t$表示目标语句子。$\textrm{P}(t|s)$表示把$s$翻译为$t$的概率。简言之,这一步需要从大量的双语平行数据中学习到$\textrm{P}(t|s)$的计算方法。
\vspace{0.5em}
\item \textbf{解码}:当面对一个新的待翻译句子时,我们需要使用学习得到的模型进行推断。推断可以被视为一个搜索和计算的过程,换句话说,我们尽可能的搜索更多的翻译结果,然后对每个翻译结果进行打分,最后选择得分最高的翻译结果
\item \textbf{解码}:当面对一个新的待翻译句子时,我们需要使用学习到的模型进行推断。推断可以被视为一个搜索和计算的过程,也就是,我们尽可能搜索更多的翻译结果,然后对每个翻译结果进行打分,最后选择得分最高的翻译结果作为输出
\end{itemize}
\vspace{0.5em}
......@@ -152,7 +156,7 @@
\end{figure}
%---------------------------
\noindent\hspace{2em}接下来,我们将介绍模型训练和解码的方法。在模型学习中,我们分两小节进行描述 - 单词翻译概率和句子级翻译模型。实现单词级的翻译是实现句子级翻译的基础。换言之,句子级翻译统计模型是建立在单词翻译统计之上。在解码中,我们将介绍一个高效的搜索算法,其中也使用到了剪枝、启发式搜索的思想。
\noindent\hspace{2em}接下来,我们将介绍模型训练和解码的方法。在模型学习中,我们分两小节进行描述 - 单词级翻译和句子级翻译。实现单词级翻译是实现句子级翻译的基础。换言之,句子级翻译的统计模型是建立在单词翻译之上的。在解码中,我们将介绍一个高效的搜索算法,其中也使用到了剪枝和启发式搜索的思想。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{单词翻译概率}\index{Chapter3.2.3}\label{chapter3.2.3}
......@@ -161,7 +165,7 @@
\textbf{(一)什么是单词翻译概率?}\index{Chapter3.2.3.1}
\vspace{0.5em}
\noindent\hspace{2em}单词翻译概率描述的是一个源语言单词与目标语言译文构成正确翻译的可能性,这个概率越高表明单词翻译的越可靠。使用单词翻译概率,可以帮助我们解决翻译时的“择词”问题,即选择什么样的目标语译文是合适的。当人在翻译某个单词时,可以利用积累的知识,快速得到它的高质量候选译文。以汉译英为例,当翻译``我''这个单词时,我们直接会想到用``I''、``me''或``I’m''作为它的译文,而几乎不会选择``you''、``satisfied''等含义相差太远的译文。这是为什么呢?如果从单词翻译概率的角度来看,无论是何种语料,包括教材、新闻、小说等,绝大部分情况下“我”都翻译成了``I''、``me''等,几乎不会看到我被翻译成``you''或``satisfied''的情况。从数据上分析,``我''翻译成``I''、``me''等属于高频事件,而翻译成``you''、``satisfied''等属于低频或小概率事件,它们在整个语料中出现的概率是不一样的。因此人在翻译时也是选择在统计意义上概率更大的译文,这也间接反映出统计模型可以在一定程度上描述人的翻译习惯和模式。
\noindent\hspace{2em}单词翻译概率描述的是一个源语言单词与目标语言译文构成正确翻译的可能性,这个概率越高表明单词翻译的越可靠。使用单词翻译概率,可以帮助我们解决翻译时的“择词”问题,即选择什么样的目标语译文是合适的。当人在翻译某个单词时,可以利用积累的知识,快速得到它的高质量候选译文。以汉译英为例,当翻译``我''这个单词时,我们直接会想到用``I''、``me''或``I’m''作为它的译文,而几乎不会选择``you''、``satisfied''等含义相差太远的译文。这是为什么呢?如果从统计学的角度来看,无论是何种语料,包括教材、新闻、小说等,绝大部分情况下“我”都翻译成了``I''、``me''等,几乎不会看到我被翻译成``you''或``satisfied''的情况。可以说``我''翻译成``I''、``me''等属于高频事件,而翻译成``you''、``satisfied''等属于低频或小概率事件,它们在整个语料中出现的概率是不一样的。因此人在翻译时也是选择在统计意义上概率更大的译文,这也间接反映出统计模型可以在一定程度上描述人的翻译习惯和模式。
\noindent\hspace{2em}\ref{tab:word-translation-examples}展示了汉语到英语的单词翻译实例及翻译概率。可以看到,``我''的常见翻译的概率较高,比如,翻译成``I''的概率是0.5,这样系统可以更好的使用这些译文。而且概率化的模型避免了非0即1的判断,所有的译文都是可能的,只是概率不同。这也使得统计模型可以覆盖更多的翻译现象,甚至捕捉到一些人所忽略的现象。
......@@ -184,28 +188,19 @@
%---------------------------
\vspace{0.5em}
\noindent\textbf{(二)如何从一个双语平行数据中学习?}\index{Chapter3.2.3.2}
\noindent\textbf{(二)如何从双语平行数据中学习?}\index{Chapter3.2.3.2}
\vspace{0.5em}
\noindent\hspace{2em}下面要解决的问题是如何学习单词翻译的概率。假设我们拥有一定数量的双语对照的平行数据,是否可以从中自动获得单词之间的翻译概率呢?回忆一下第二章中的掷骰子游戏,我们使用了相对频率估计来自动获得骰子不同面出现概率的估计值。其中,重复投掷骰子很多次,然后统计“1”到“6”各面出现的次数,再除以投掷的总次数,最后得到它们出现的概率的估计值。这里,我们使用类似的方式计算单词翻译概率。但是,我们现在拥有的是句子一级对齐的数据,但是并不知道两种语言之间单词的对应关系。因此,我们要从句子以及对齐的平行数据中学习单词之间对齐的概率。我们使用一种稍微``复杂''一些的模型来描述这个问题。
\noindent\hspace{2em}假设我们拥有一定数量的双语对照的平行数据,是否可以从中自动获得单词之间的翻译概率呢?回忆一下第二章中的掷骰子游戏,我们使用了相对频率估计来自动获得骰子不同面出现概率的估计值。其中,重复投掷骰子很多次,然后统计“1”到“6”各面出现的次数,再除以投掷的总次数,最后得到它们出现的概率的极大似然估计。这里,我们使用类似的方式计算单词翻译概率。但是,我们现在拥有的是句子一级对齐的数据,并不知道两种语言之间单词的对应关系。因此,我们要从句子级对齐的平行数据中学习单词之间对齐的概率。我们使用一种稍微``复杂''一些的模型来描述这个问题。
假设$x$表示任意源语单词,所有的目标语单词$y \in Y$都可能是它的译文,这里$Y$表示目标语言的词表。给定一个互译的句对$(s,t)$,我们定义$\textrm{P}(x \leftrightarrow y; s, t)$表示在观测到$(s,t)$的前提下$x$$y$互译的概率。其中$x$是属于句子$s$中的词,而$y$是属于$t$中的词。计算公式描述如下:
假设$x$表示任意源语言单词,所有的目标语单词$y \in Y$都可能是它的译文,这里$Y$表示目标语言的词表。给定一个互译的句对$(\textbf{s},\textbf{t})$,我们把$\textrm{P}(x \leftrightarrow y; \textbf{s}, \textbf{t})$定义为在观测到$(\textbf{s},\textbf{t})$的前提下$x$$y$互译的概率。其中$x$是属于句子$\textbf{s}$中的词,而$y$是属于句子$\textbf{t}$中的词。计算公式描述如下:
\begin{eqnarray}
\textrm{P}(x \leftrightarrow y; s,t) & \equiv & \textrm{P}(x,y;s,t) \nonumber \\
& = & \frac{c(x,y;s,t)}{\sum_{x',y'} c(x',y';s,t)}
\textrm{P}(x \leftrightarrow y; \textbf{s},\textbf{t}) & \equiv & \textrm{P}(x,y;\textbf{s},\textbf{t}) \nonumber \\
& = & \frac{c(x,y;s,t)}{\sum_{x',y'} c(x',y';\textbf{s},\textbf{t})}
\label{eqC3.1}
\end{eqnarray}
\noindent其中,$\equiv$表示定义式。分子$c(x,y;s,t)$表示$x$$y$在句对$(s,t)$中共现的总次数,分母 $\sum_{x',y'} c(x',y';$ $s,t)$表示任意的源语言单词$x'$和任意的目标语言单词$y'$$(s,t)$共现的总次数。为了更加清晰的理解如何计算$c(x,y;s,t)$,可以参看图\ref{figureC3.7}描述的算法。可以看到,计算$c(x,y;s,t)$的过程主要是两层循环,外层的循环用于遍历$s$中的词,内层的循环用于遍历$t$中的词。当$s$中的词等于$x$$t$中的词等于$y$时,计数器$count$加1,最后$count$的值就是$x$$y$的总共现次数。
%----------------------------------------------
% 图3.7
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure37}
\caption{统计源语言单词$x$和目标语言单词$y$在句对$(s, t)$中的共现总次数的算法 ({\red 图里的问题很多,包括符号、斜体,对照着上面的文字内容仔细确认})}
\label{figureC3.7}
\end{figure}
%---------------------------
\noindent其中,$\equiv$表示定义式。分子$c(x,y;\textbf{s},\textbf{t})$表示$x$$y$在句对$(\textbf{s},\textbf{t})$中共现的总次数,分母 $\sum_{x',y'} c(x',y';$ $\textbf{s},\textbf{t})$表示任意的源语言单词$x'$和任意的目标语言单词$y'$$(\textbf{s},\textbf{t})$共现的总次数。
%----------------------------------------------
% 图3.8
......@@ -217,48 +212,48 @@
\end{figure}
%---------------------------
\noindent\hspace{2em}看一个具体的例子,有一个汉英互译的句对$(s,t)$如图\ref{figureC3.8}所示。假设,$x=\textrm{``翻译''}$$y=\textrm{``transaltion''}$,现在要计算$x$$y$共现的总次数。``翻译''和``translation''分别在$s$$t$中出现了2次,因此$c(\textrm{``翻译''},\textrm{``translation''};s,t)$ 等于4。而对于$\sum_{x',y'} c(x',y';s,t)$,因为$x'$$y'$分别表示的是$s$$t$中的任意词,所以$\sum_{x',y'} c(x',y';s,t)$表示所有单词对的数量 - 即$s$的词数乘以$t$的词数。最后,“翻译”和“translation”的单词翻译概率可以如下计算
\noindent\hspace{2em}看一个具体的例子,如图\ref{figureC3.8}所示,有一个汉英互译的句对$(\textbf{s},\textbf{t})$。假设,$x=\textrm{``翻译''}$$y=\textrm{``transaltion''}$,现在要计算$x$$y$共现的总次数。``翻译''和``translation''分别在$\textbf{s}$$\textbf{t}$中出现了2次,因此$c(\textrm{``翻译''},\textrm{``translation''};\textbf{s},\textbf{t})$ 等于4。而对于$\sum_{x',y'} c(x',y';\textbf{s},\textbf{t})$,因为$x'$$y'$分别表示的是$s$$t$中的任意词,所以$\sum_{x',y'} c(x',y';\textbf{s},\textbf{t})$表示所有单词对的数量 - 即$\textbf{s}$的词数乘以$\textbf{t}$的词数。最后,“翻译”和“translation”的单词翻译概率为
\begin{eqnarray}
\textrm{P}(\text{``翻译''},\text{``translation''}; s,t) & = & \frac{c(\textrm{``翻译''},\textrm{``translation''};s,t)}{\sum_{x',y'} c(x',y';s,t)} \nonumber \\
& = & \frac{4}{|s|\times |t|} \nonumber \\
& = & \frac{4}{63}
\textrm{P}(\text{``翻译''},\text{``translation''}; \textbf{s},\textbf{t}) & = & \frac{c(\textrm{``翻译''},\textrm{``translation''};\textbf{s},\textbf{t})}{\sum_{x',y'} c(x',y';\textbf{s},\textbf{t})} \nonumber \\
& = & \frac{4}{|s|\times |t|} \nonumber \\
& = & \frac{4}{63}
\label{eqC3.2}
\end{eqnarray}
\noindent这里运算$|\cdot|$表示句子长度。类似的,可以得到``机器''和``translation''、“机器”和“look”的单词翻译概率:
\begin{eqnarray}
\textrm{P}(\text{``机器''},\text{``translation''}; s,t) & = & \frac{2}{63} \\
\textrm{P}(\text{``机器''},\text{``look''}; s,t) & = & \frac{0}{63}
\textrm{P}(\text{``机器''},\text{``translation''}; \textbf{s},\textbf{t}) & = & \frac{2}{63} \\
\textrm{P}(\text{``机器''},\text{``look''}; \textbf{s},\textbf{t}) & = & \frac{0}{63}
\label{eqC3.4}
\end{eqnarray}
\noindent注意,由于``look''没有出现在数据中,因此$\textrm{P}(\text{``机器''},\text{``look''}; s,t)=0$。这时,我们可以使用第二章介绍的平滑算法赋予它一个非零的值,以保证在后续的步骤中整个翻译模型不会出现0概率的情况。
\noindent注意,由于``look''没有出现在数据中,因此$\textrm{P}(\text{``机器''},\text{``look''}; \textbf{s},\textbf{t})=0$。这时,我们可以使用第二章介绍的平滑算法赋予它一个非零的值,以保证在后续的步骤中整个翻译模型不会出现零概率的情况。
\vspace{0.5em}
\textbf{(三)如何从大量的双语平行数据中学习?}\index{Chapter3.2.3.3}
\vspace{0.5em}
\noindent\hspace{2em}上面提到的方法需要能在更多的句子上使用。假设,有多个互译句对$(s^1,t^1)$,...,$(s^n,t^n)$。这时,我们仍然可以使用基于相对频度的方法进行估计,具体方法如下
\noindent\hspace{2em}上面提到的方法需要能在更多的句子上使用。假设,有$N$个互译句对$(s^1,t^1)$,...,\\$(s^N,t^N)$。这时,我们仍然可以使用基于相对频度的方法进行概率估计,具体方法如下
\begin{equation}
\textrm{P}(x,y) = \frac{{\sum_{i=1}^{n} c(x,y;s^i,t^i)}}{\sum_{i=1}^{n}{{\sum_{x',y'} c(x',y';x^i,y^i)}}}
\textrm{P}(x,y) = \frac{{\sum_{i=1}^{N} c(x,y;s^i,t^i)}}{\sum_{i=1}^{n}{{\sum_{x',y'} c(x',y';x^i,y^i)}}}
\label{eqC3.5}
\end{equation}
\noindent与公式\ref{eqC3.1}相比,分子分母都多了一项累加符号$\sum_{i-1}^{n} \cdot$,它表示遍历语料库中所有的句对,其中$n$表示语料库中句对的数量。换句话说,当我们计算词的共现次数时,需要对每个句对上的计数结果进行累加。从统计学习的角度,使用更大规模的数据进行参数估计可以提高估计的准确性。在自然语言处理任务中,使用更大规模的数据往往是提高系统性能的捷径。计算单词的翻译概率也是一样,在小规模的数据上看,很多翻译现象的特征并不明显,但是当使用的数据量增加到一定程度,翻译的规律会很明显的体现出来。
\noindent与公式\ref{eqC3.1}相比,分子分母都多了一项累加符号$\sum_{i-1}^{n} \cdot$,它表示遍历语料库中所有的句对,其中$n$表示语料库中句对的数量。换句话说,当我们计算词的共现次数时,需要对每个句对上的计数结果进行累加。从统计学习的角度,使用更大规模的数据进行参数估计可以提高估计的准确性。在自然语言处理任务中,使用更大规模的数据往往是提高系统性能的捷径。计算单词的翻译概率也是一样,在小规模的数据上看,很多翻译现象的特征并不突出,但是当使用的数据量增加到一定程度,翻译的规律会很明显的体现出来。
%----------------------------------------------
% 图3.9
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure39}
\caption{两个汉英互译的句对}
\caption{两个汉英互译的句对}
\label{figureC3.9}
\end{figure}
%---------------------------
\noindent\hspace{2em}举个例子来说明在多个句子上计算单词翻译概率的方法。图\ref{figureC3.9}展示了一个由两个句对构成的平行语料库。我们用$s^1$$s^2$分别表示第一个句对和第二个句对的源语句子,$t^1$$t^2$表示对应的目标语句子。于是,“翻译”和“translation”的翻译概率的计算过程如下,
\noindent\hspace{2em}举个例子来说明在多个句子上计算单词翻译概率的方法。图\ref{figureC3.9}展示了一个由两个句对构成的平行语料库。我们用$s^1$$s^2$分别表示第一个句对和第二个句对的源语句子,$t^1$$t^2$表示对应的目标语句子。于是,“翻译”和“translation”的翻译概率
{\small
\begin{eqnarray}
......@@ -270,13 +265,13 @@
\end{eqnarray}
}
公式\ref{eqC3.6}所展示的计算过程很简单。分子是两个句对中``翻译''和``translation''共现次数的累计,分母是两个句对的源语词和目标语词的组合数的累加。显然,这个方法也很容易推广到处理更多句子的情况中,我们仅需要对每个句子的计数进行累加即可。
公式\ref{eqC3.6}所展示的计算过程很简单。分子是两个句对中``翻译''和``translation''共现次数的累计,分母是两个句对的源语言单词和目标语言单词的组合数的累加。显然,这个方法也很容易推广到处理更多句子的情况中,我们仅需要对每个句子的计数进行累加即可。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{句子级翻译模型}\index{Chapter3.2.4}
\label{sec:sentence-level-translation}
\noindent\hspace{2em}在获得单词翻译概率的基础上,本节继续介绍如何获取句子级翻译概率。如图\ref{figureC3.10}所示,条件概率$\textrm{P}(t|s)$表示给出源语言句子$s$的情况下译文为$t$的概率。这也是整个句子级翻译模型的核心,它处于整个统计机器翻译流程的中心,一方面我们需要从数据中学习这个模型的参数,另一方面,对于新输入的句子,我们需要使用这个模型得到最佳的译文。下面介绍句子级翻译的建模方法。
\noindent\hspace{2em}在获得单词翻译概率的基础上,本节继续介绍如何获取句子级翻译概率。如图\ref{figureC3.10}所示,条件概率$\textrm{P}(t|s)$表示给出源语言句子$s$的情况下译文为$t$的概率。这也是整个句子级翻译模型的核心,一方面我们需要从数据中学习这个模型的参数,另一方面,对于新输入的句子,我们需要使用这个模型得到最佳的译文。下面介绍句子级翻译的建模方法。
%----------------------------------------------
% 图3.10
\begin{figure}[htp]
......@@ -291,29 +286,30 @@
\noindent\textbf{(一)句子级翻译的基础模型}\index{Chapter3.2.4.1}
\vspace{0.5em}
\noindent\hspace{2em}计算句子级翻译概率并不容易。因为自然语言句子非常灵活,任何数据无法覆盖足够多的句子,因此也我们无法像公式\ref{eqC3.5}一样直接用简单计数的方式对句子的翻译概率进行估计。这里,我们采用一个退而求其次的方法:找到一个函数$g(s,t)$来衡量翻译结果的质量。我们假设:$g(s,t) \ge 0$翻译结果$t$的质量越好,$g(s,t)$的值越大;$t$的翻译质量越差,$g(s,t)$的值越小。换句话说,$g(s,t)$的单调性和翻译质量呈正相关。如果存在这样的函数$g(s,t)$,可以利用$g(s,t)$近似表示句子级翻译概率,如下:
\noindent\hspace{2em}计算句子级翻译概率并不简单。因为自然语言非常灵活,任何数据无法覆盖足够多的句子,因此也我们无法像公式\ref{eqC3.5}一样直接用简单计数的方式对句子的翻译概率进行估计。这里,我们采用一个退而求其次的方法:找到一个函数$g(s,t)\ge 0$来模拟翻译概率对译文可能性进行评价这种行为。我们假设:给定$s$,翻译结果$t$出现的可能性越大,$g(s,t)$的值越大;$t$出现的可能性越小,$g(s,t)$的值越小。换句话说,$g(s,t)$的单调性和翻译概率呈正相关。如果存在这样的函数$g(s,t)$,可以利用$g(s,t)$近似表示句子级翻译概率,如下:
\begin{equation}
\textrm{P}(t|s) \approx \frac{g(s,t)}{\sum_{t'}g(s,t')}
\label{eqC3.7}
\end{equation}
\noindent\hspace{2em}公式\ref{eqC3.7}相当于在函数$g$上做了归一化,这样等式右端的结果具有一些概率的属性,比如,$0 \le \frac{g(s,t)}{\sum_{t}g(s,t)} \le 1$。具体来说,对于源语句枚举其所有的翻译结果,并把这些翻译结果所对应的函数$g(\cdot)$的计算结果相加作为分母,而分子是某个翻译结果$t$所对应的$g(\cdot)$的值。
\noindent\hspace{2em}公式\ref{eqC3.7}相当于在函数$g(\cdot)$上做了归一化,这样等式右端的结果具有一些概率的属性,比如,$0 \le \frac{g(s,t)}{\sum_{t}g(s,t)} \le 1$。具体来说,对于源语言句子$s$枚举其所有的翻译结果,并把这些翻译结果所对应的函数$g(\cdot)$的计算结果相加作为分母,而分子是某个翻译结果$t$所对应的$g(\cdot)$的值。
\noindent\hspace{2em}上述过程初步建立了句子级翻译模型,我们并没有求句子翻译概率的值,而是把问题转为对$g(\cdot)$的设计和计算上。但是,面临着两个新的问题:
\vspace{0.5em}
\begin{itemize}
\item 如何定义函数$g(s,t)$定义?即,在知道单词翻译概率的前提下,如何计算$g(s,t)$
\item 如何定义函数$g(s,t)$?即,在知道单词翻译概率的前提下,如何计算$g(s,t)$
\vspace{0.5em}
\item 公式\ref{eqC3.7}中分母$\sum_{t}g(s,t')$需要累加所有翻译结果所对应函数$g(s,t')$的计算结果,但枚举所有$t'$是不可能的。
\item 公式\ref{eqC3.7}中分母$\sum_{t}g(s,t')$需要累加所有翻译结果$g(s,t')$,但枚举所有$t'$是不可能实现的。
\end{itemize}
\vspace{0.5em}
\noindent 当然,最核心的问题还是函数$g(s,t)$的定义。而第二个问题其实不需要解决,因为我们通常只关注于可能性最大的翻译结果,即$g(s,t)$的计算结果最大时对应译文。这个问题会在随后进行讨论。
\noindent\hspace{2em} 当然,这里最核心的问题还是函数$g(s,t)$的定义。而第二个问题其实不需要解决,因为我们通常只关注于可能性最大的翻译结果,即$g(s,t)$的计算结果最大时对应的译文。这个问题会在后面进行讨论。
\noindent\hspace{2em}回到设计$g(s,t)$的问题上。这里,我们采用``大题小作''的方法,这个技巧在第二章已经进行了充分的介绍。具体来说,直接建模句子之间的对应比较困难,但可以利用词之间的对应来描述句子之间的对应关系。这里,就用到了上一小节所介绍的单词翻译概率。
\noindent\hspace{2em}回到设计$g(s,t)$的问题上。这里,我们采用``大题小作''的方法,这个技巧在第二章已经进行了充分的介绍。具体来说,直接建模句子之间的对应比较困难,但可以利用词之间的对应来描述句子之间的对应关系。这里,就用到了上一小节所介绍的单词翻译概率。
\noindent\hspace{2em}我们首先引入一个非常重要的概念\ \ \textbf{词对齐},它是统计机器翻译中最基本的概念之一。词对齐描述了并行句对中单词之间的对应关系,它体现了一种观点:本质上句子之间的对应是由词之间的对应表示的。当然,这个观点在神经机器翻译或者其它模型中可能会有不同的理解,但是翻译句子的过程中我们考虑词一级的对应关系是符合我们对语言的认知的。图\ref{figureC3.11}展示了一个句对$s$$t$,单词的右下标数字表示了该词在句中的位置,而虚线表示的是句子$s$$t$中的词对齐关系。比如,``满意''的右下标数字5表示在句子$s$中处于第5个位置,``satisfied''的右下标数字3表示在句子$t$中处于第3个位置,``满意''和``satisfied''之间的虚线表示两个单词之间是对齐的。为方便描述,我们用二元组$(j,i)$来描述词对齐,它表示源语句第$j$个单词对应目标语句第$i$个单词,即单词$s_j$$t_i$对应。通常,也会把$(j,i)$称作一条词对齐连接。图\ref{figureC3.11}中共有5条虚线,表示有5组单词之间的词对齐连接。我们把这些词对齐连接构成的集合称$A$,即$A={\{(1,1),(2,4),(3,5),(4,2)(5,3)}\}$
\noindent\hspace{2em}我们首先引入一个非常重要的概念\ \ \textbf{词对齐},它是统计机器翻译中最核心的概念之一。词对齐描述了平行句对中单词之间的对应关系,它体现了一种观点:本质上句子之间的对应是由词之间的对应表示的。当然,这个观点在神经机器翻译或者其它模型中可能会有不同的理解,但是翻译句子的过程中我们考虑词一级的对应关系是符合我们对语言的认知的。图\ref{figureC3.11}展示了一个句对$s$$t$,单词的右下标数字表示了该词在句中的位置,而虚线表示的是句子$s$$t$中的词对齐关系。比如,``满意''的右下标数字5表示在句子$s$中处于第5个位置,``satisfied''的右下标数字3表示在句子$t$中处于第3个位置,``满意''和``satisfied''之间的虚线表示两个单词之间是对齐的。为方便描述,我们用二元组$(j,i)$来描述词对齐,它表示源语言句子的第$j$个单词对应目标语言句子的第$i$个单词,即单词$s_j$$t_i$对应。通常,也会把$(j,i)$称作一条\textbf{词对齐连接}。图\ref{figureC3.11}中共有5条虚线,表示有5组单词之间的词对齐连接。我们把这些词对齐连接构成的集合作为词对齐的一种表示,记$A$,即$A={\{(1,1),(2,4),(3,5),(4,2)(5,3)}\}$
%----------------------------------------------
% 图3.11
\begin{figure}[htp]
......@@ -324,14 +320,14 @@
\end{figure}
%---------------------------
\noindent\hspace{2em}对于源语和目标语的句对$(s,t)$,假设我们可以得到最优词对齐$\widehat{A}$,于是可以使用单词翻译概率计算$g(s,t)$,如下
\noindent\hspace{2em}对于句对$(s,t)$,假设可以得到最优词对齐$\widehat{A}$,于是我们可以使用单词翻译概率计算$g(s,t)$,如下
\begin{equation}
g(s,t) = \prod_{(j,i)\in \widehat{A}}\textrm{P}(s_j,t_i)
\label{eqC3.8}
\end{equation}
\noindent其中$g(s,t)$被定义为句子$s$中的单词和句子$t$中的单词的翻译概率的乘积,并且这两个单词之间必须有对齐连接。$\textrm{P}(s_j,t_i)$表示具有对齐链接的源语$s_j$和目标语词$t_i$的单词翻译概率。以图\ref{figureC3.11}中的句对为例,其中``我''与``I''、``对''与``with''、``你''与``you''\\等相互对应,可以把它们的翻译概率相乘得到$g(s,t)$的计算结果,如下:
\noindent其中$g(s,t)$被定义为句子$s$中的单词和句子$t$中的单词的翻译概率的乘积,并且这两个单词之间必须有对齐连接。$\textrm{P}(s_j,t_i)$表示具有对齐链接的源语言单词$s_j$和目标语言单词$t_i$的单词翻译概率。以图\ref{figureC3.11}中的句对为例,其中``我''与``I''、``对''与``with''、``你'' 与``you''\\等相互对应,可以把它们的翻译概率相乘得到$g(s,t)$的计算结果,如下:
\begin{eqnarray}
{g(s,t)}&= & \textrm{P}(\textrm{``我'',``I''}) \times \textrm{P}(\textrm{``对'',``with''}) \times \textrm{P}(\textrm{``你'',``you''}) \times \nonumber \\
......@@ -339,47 +335,49 @@ g(s,t) = \prod_{(j,i)\in \widehat{A}}\textrm{P}(s_j,t_i)
\label{eqC3.9}
\end{eqnarray}
\noindent 显然,如果每个词对齐连接所对应的翻译概率变大,那么整个句子翻译的得分也会提高。也就是说,词对齐越准确,翻译模型的打分越高,$s$$t$之间存在翻译关系的可能性越大。
\noindent\hspace{2em} 显然,如果每个词对齐连接所对应的翻译概率变大,那么整个句子翻译的得分也会提高。也就是说,词对齐越准确,翻译模型的打分越高,$s$$t$之间存在翻译关系的可能性越大。
\vspace{0.5em}
\textbf{(二)生成流畅的译文}\index{Chapter3.2.4.2}
\vspace{0.5em}
\noindent\hspace{2em}公式\ref{eqC3.8}定义的$g(s,t)$存在的问题是没有考虑词序信息。我们用一个简单的例子说明这个问题。如图\ref{figureC3.12}所示,源语句``我 对 你 感到 满意''有两个翻译结果,第一个翻译结果是``I am satisfied with you'',第二个是``I with you am satisfied''。虽然这两个译文包含的目标语单词是一样的,但词序存在很大差异。比如,它们都选择了``satisfied''作为源语单词``满意''的译文,但是在第一个翻译结果中``satisfied''处于第3个位置,而第二个结果中处于最后的位置。显然第一个翻译结果更符合英文的表达习惯,翻译的质量更高。可遗憾的,对于有明显差异的两个译文,公式\ref{eqC3.8}计算得到的函数$g(\cdot)$的值却是一样的。
\noindent\hspace{2em}公式\ref{eqC3.8}定义的$g(s,t)$存在的问题是没有考虑词序信息。我们用一个简单的例子说明这个问题。如图\ref{figureC3.12}所示,源语言句子``我 对 你 感到 满意''有两个翻译结果,第一个翻译结果是``I am satisfied with you'',第二个是``I with you am satisfied''。虽然这两个译文包含的目标语单词是一样的,但词序存在很大差异。比如,它们都选择了``satisfied''作为源语单词``满意''的译文,但是在第一个翻译结果中``satisfied''处于第3个位置,而第二个结果中处于最后的位置。显然第一个翻译结果更符合英文的表达习惯,翻译的质量更高。遗憾的是,对于有明显差异的两个译文,公式\ref{eqC3.8}计算得到的函数$g(\cdot)$的值却是一样的。
%----------------------------------------------
% 图3.12
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure312}
\caption{此处为图片的描述...蓝色的虚线表示的是对齐关系(词对齐)}
\caption{同一个源语言句子的不同译文所对应的$g(\cdot)$得分}
\label{figureC3.12}
\end{figure}
%---------------------------
\noindent\hspace{2em}如何在$g(s,t)$引入词序信息呢?我们希望函数$g(s,t)$对符合自然语言表达习惯的翻译结果给出更高的分数,对于不合符的或不通顺的句子给出更低的分数。这里很自然想到使用语言模型,因为语言模型可以度量一个句子出现的可能性流畅的句子语言模型得分越高,反之越低。
\noindent\hspace{2em}如何在$g(s,t)$引入词序信息呢?我们希望函数$g(s,t)$对符合自然语言表达习惯的翻译结果给出更高的分数,对于不合符的或不通顺的句子给出更低的分数。这里很自然想到使用语言模型,因为语言模型可以度量一个句子出现的可能性流畅的句子语言模型得分越高,反之越低。
\noindent\hspace{2em}我们可以使用第二章介绍的$n$-gram语言模型,它也是统计机器翻译中确保流畅翻译结果的重要模型之一。$n$-gram语言模型用概率化方法描述了句子的生成过程。以2-gram语言模型为例,可以使用如下公式计算一个词串的概率:
\noindent\hspace{2em}我们可以使用第二章介绍的$n$-gram语言模型,它也是统计机器翻译中确保流畅翻译结果的重要手段之一。$n$-gram语言模型用概率化方法描述了句子的生成过程。以2-gram语言模型为例,可以使用如下公式计算一个词串的概率:
\begin{eqnarray}
\textrm{P}_{lm}(t) & = & \textrm{P}_{lm}(t_1...t_m) \nonumber \\
& = & \textrm{P}(t_1)\times \textrm{P}(t_2|t_1)\times \textrm{P}(t_3|t_2)\times ... \times \textrm{P}(t_m|t_{m-1})
\textrm{P}_{\textrm{lm}}(t) & = & \textrm{P}_{\textrm{lm}}(t_1...t_l) \nonumber \\
& = & \textrm{P}(t_1)\times \textrm{P}(t_2|t_1)\times \textrm{P}(t_3|t_2)\times ... \times \textrm{P}(t_l|t_{l-1})
\label{eqC3.10}
\end{eqnarray}
\noindent 其中,$t=t_1...t_m$表示由$m$个单词组成的句子,$\textrm{P}_{lm}(t)$表示语言模型给句子$t$的打分。具体而言,$\textrm{P}_{lm}(t)$被定义为$\textrm{P}(t_i|t_{i-1})(i=1,2,...,m)$的连乘\footnote{为了确保数学表达的准确性,我们定义$\textrm{P}(t_1|t_0) \equiv \textrm{P}(t_1)$},其中$\textrm{P}(t_i|t_{i-1})(i=1,2,...,m)$表示前面一个单词是$t_{i-1}$时,当前单词是$t_i$的概率。语言模型的训练方法可以参看第二章相关内容,这里将不再对语言模型做过多的介绍。
\noindent 其中,$t=t_1...t_l$表示由$l$个单词组成的句子,$\textrm{P}_{\textrm{lm}}(t)$表示语言模型给句子$t$的打分。具体而言,$\textrm{P}_{\textrm{lm}}(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\hspace{2em}回到翻译问题的建模问题上来。我们已经又了语言模型可以帮助系统度量衡每个译文的流畅度,因此可以把它加入模型打分中。一种简单的方法是把语言模型$\textrm{P}_{lm}{(t)}$和公式\ref{eqC3.8}中的$g(s,t)$相乘,这样就得到了一个新的$g(s,t)$,它同时考虑了翻译准确性($\prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}$)和流畅度($\textrm{P}_{lm}(t)$):
\noindent\hspace{2em}回到翻译问题的建模问题上来。我们已经有了语言模型可以帮助系统度量每个译文的流畅度,因此可以把它加入模型打分中。一种简单的方法是把语言模型$\textrm{P}_{\textrm{lm}}{(t)}$和公式\ref{eqC3.8}中的$g(s,t)$相乘,这样就得到了一个新的$g(s,t)$,它同时考虑了翻译准确性($\prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}$)和流畅度($\textrm{P}_{\textrm{lm}}(t)$):
\begin{equation}
g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P}_{lm}(t)
g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P}_{\textrm{lm}}(t)
\label{eqC3.13}
\end{equation}
\noindent\hspace{2em}如图\ref{figureC3.14}所示,语言模型$\textrm{P}_{lm}(t)$给分别$t^{'}$$t^{''}$赋予0.0107和0.0009的概率,这表明句子$t^{'}$更符合英文的表达。这与我们的期望是相吻合的。它们再分别乘以$\prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}$的值,就得到公式\ref{eqC3.13}定义的函数$g(\cdot)$的值。显然句子$t^{'}$的分数更高。同时它也是我们希望得到的翻译结果。至此,我们完成了对函数$g(s,t)$的一个简单定义,把它带入公式\ref{eqC3.7}就得到了同时考虑准确性和流畅性的句子级统计翻译模型。
\noindent\hspace{2em}如图\ref{figureC3.14}所示,语言模型$\textrm{P}_{\textrm{lm}}(t)$分别给$t^{'}$$t^{''}$赋予0.0107和0.0009的概率,这表明句子$t^{'}$更符合英文的表达。这与我们的期望是相吻合的。它们再分别乘以$\prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}$的值,就得到公式\ref{eqC3.13}定义的函数$g(\cdot)$的值。显然句子$t^{'}$的分数更高。同时它也是我们希望得到的翻译结果。至此,我们完成了对函数$g(s,t)$的一个简单定义,把它带入公式\ref{eqC3.7}就得到了同时考虑准确性和流畅性的句子级统计翻译模型。
%----------------------------------------------
% 图3.14
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure314}
\caption{不同译文的语言模型得分和翻译模型得分}
\caption{同一个源语言句子的不同译文所对应的语言模型得分和翻译模型得分}
\label{figureC3.14}
\end{figure}
%---------------------------
......@@ -389,7 +387,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}
\noindent\hspace{2em}\textbf{解码}是指,在得到翻译模型后,对于新输入的句子生成最佳译文的过程。具体来说,当给定任意的源语$s$,解码系统要找到翻译概率最大的目标语译文$\hat{t}$。这个过程可以被形式化描述为:
\noindent\hspace{2em}\textbf{解码}是指,在得到翻译模型后,对于新输入的句子生成最佳译文的过程。具体来说,当给定任意的源语言句子$s$,解码系统要找到翻译概率最大的目标语译文$\hat{t}$。这个过程可以被形式化描述为:
\begin{equation}
\widehat{t}=\argmax_{t} \textrm{P}(t|s)
......@@ -409,9 +407,9 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\label{eqC3.16}
\end{equation}
\noindent\hspace{2em}公式\ref{eqC3.16}定义了解码的目标,剩下的问题是实现$\argmax$并快速准确的找到最佳译文$\hat{t}$。但是,简单枚举所有可能的译文并计算$g(s,t)$的值是不可行的,因为所有潜在译文构成的搜索空间是十分巨大的。为了理解机器翻译的搜索空间的规模,我们假设源语句$s$$m$个词,每个词有$n$个可能的翻译候选。如果从左到右一步步翻译每个源语言单词,每个源语言单词有$n$翻译候选,那么简单的顺序翻译会有$n^m$种组合。如果进一步考虑目标语单词的任意调序,每一种对翻译候选进行选择的结果又会对应$m!$种不同的排序。因此,源语句子$s$至少有$n^m \cdot m!$个不同的译文。
\noindent\hspace{2em}公式\ref{eqC3.16}定义了解码的目标,剩下的问题是实现$\argmax$,并快速准确的找到最佳译文$\hat{t}$。但是,简单遍历所有可能的译文并计算$g(s,t)$的值是不可行的,因为所有潜在译文构成的搜索空间是十分巨大的。为了理解机器翻译的搜索空间的规模,我们假设源语言句子$s$$m$个词,每个词有$n$个可能的翻译候选。如果从左到右一步步翻译每个源语言单词,每个源语言单词有$n$翻译候选,那么简单的顺序翻译会有$n^m$种组合。如果进一步考虑目标语单词的任意调序,每一种对翻译候选进行选择的结果又会对应$m!$种不同的排序。因此,源语句子$s$至少有$n^m \cdot m!$个不同的译文。
\noindent\hspace{2em}$n^{m}\cdot m!$是什么样的概念呢?如表\ref{figureC3.16}{\red 此处应该是表,不是图})所示,当$m$$n$分别为2和10时,译文只有200个,不算多。但是当$m$$n$分别为20和10时,即源语句的词数为20,每个词有10个候选译文,我们会面对$2.4329 \times 10^{38}$个不同的译文,这几乎是不可计算的。
\noindent\hspace{2em}$n^{m}\cdot m!$是什么样的概念呢?如表\ref{figureC3.16}{\red 此处应该是表,不是图})所示,当$m$$n$分别为2和10时,译文只有200个,不算多。但是当$m$$n$分别为20和10时,即源语言句子的长度20,每个词有10个候选译文,我们会面对$2.4329 \times 10^{38}$个不同的译文,这几乎是不可计算的。
%----------------------------------------------
% 图3.16
\begin{figure}[htp]
......@@ -422,9 +420,9 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
\end{figure}
%---------------------------
\noindent\hspace{2em}对于如此巨大的搜索空间,我们需要一种十分有效的搜索算法才能实现机器翻译的解码。这里介绍一种贪婪的解码算法,把解码分成若干步骤,每步只翻译一个单词,并保留当前``最好''的结果,直至所有源语言单词都被翻译完毕。
\noindent\hspace{2em}对于如此巨大的搜索空间,我们需要一种十分有效的搜索算法才能实现机器翻译的解码。这里介绍一种贪婪的解码算法,把解码分成若干步骤,每步只翻译一个单词,并保留当前``最好''的结果,直至所有源语言单词都被翻译完毕。
\noindent\hspace{2em}\ref{figureC3.18}给出了贪婪解码算法的伪代码。其中$\pi$保存所有源语单词的候选译文,$\pi[j]$表示第$j$个源语单词的候选翻译集合,$best$保存当前最好翻译结果,$h$保存当前步生成的所有译文候选。算法的主体有两层循环,在内层循环中如果第$j$个源语单词没有被翻译过,则用$best$和它的候选译文$\pi[j]$生成新的翻译,再存于$h$中,即操作$h=h\cup{\textrm{JOIN}(best,\pi[j])}$。外层循环再从$h$中选择得分最好的结果存于$best$中,即操作$best=\textrm{PruneForTop1}(h)$,并标识相应的源语单词已翻译,即$used[best.j]=true$。该算法的核心在于,我们一直维护一个当前最好的结果,之后每一步考虑扩展这个结果的所有可能,并计算模型得分,然后再保留扩展后的最好结果。注意,在每一步中,只有排名第一的结果才会被保留,其它结果都会被丢弃。这也体现了贪婪的思想。显然这个方法不能保证搜索到全局最优的结果,但是由于每次扩展只考虑一个最好的结果,因此该方法速度很快。图\ref{figureC3.18-2}给出了算法执行过程的简单示例。当然,机器翻译的解码方法有很多,这里我们仅仅使用简单的贪婪搜索方法来解决机器翻译的解码问题,在后续章节会对更加优秀的解码方法进行介绍。
\noindent\hspace{2em}\ref{figureC3.18}给出了贪婪解码算法的伪代码。其中$\pi$保存所有源语单词的候选译文,$\pi[j]$表示第$j$个源语单词的翻译候选的集合,$best$保存当前最好的翻译结果,$h$保存当前步生成的所有译文候选。算法的主体有两层循环,在内层循环中如果第$j$个源语单词没有被翻译过,则用$best$和它的候选译文$\pi[j]$生成新的翻译,再存于$h$中,即操作$h=h\cup{\textrm{JOIN}(best,\pi[j])}$。外层循环再从$h$中选择得分最高的结果存于$best$中,即操作$best=\textrm{PruneForTop1}(h)$,并标识相应的源语单词已翻译,即$used[best.j]=true$。该算法的核心在于,我们一直维护一个当前最好的结果,之后每一步考虑扩展这个结果的所有可能,并计算模型得分,然后再保留扩展后的最好结果。注意,在每一步中,只有排名第一的结果才会被保留,其它结果都会被丢弃。这也体现了贪婪的思想。显然这个方法不能保证搜索到全局最优的结果,但是由于每次扩展只考虑一个最好的结果,因此该方法速度很快。图\ref{figureC3.18-2}给出了算法执行过程的简单示例。当然,机器翻译的解码方法有很多,这里我们仅仅使用简单的贪婪搜索方法来解决机器翻译的解码问题,在后续章节会对更加优秀的解码方法进行介绍。
%----------------------------------------------
% 图3.18
......@@ -1089,7 +1087,7 @@ p_0+p_1 & = & 1 \label{eqC3.5.12}
\noindent\hspace{2em}利用这些新引进的概念,模型4对模型3的扭曲度进行了修改。主要是把扭曲度分解为两类参数。对于$[j]$对应的源语言单词列表($\tau_{[j]}$)中的第一个单词($\tau_{[j]1}$),它的扭曲度用如下等式计算:
\begin{equation}
\textrm{P}(\pi_{[j]1}=i|{\pi}_1^{[j]-1},{\tau}_0^l,_0^l,t)=d_{1}(i-{\odot}_{[j]}|\textrm{A}(e_{[j-1]}),\textrm{B}(f_i))
\textrm{P}(\pi_{[j]1}=i|{\pi}_1^{[j]-1},{\tau}_0^l,{\varphi}_0^l,t)=d_{1}(i-{\odot}_{[j]}|\textrm{A}(e_{[j-1]}),\textrm{B}(f_i))
\label{eqC3.6.1}
\end{equation}
......
......@@ -5,7 +5,7 @@
\begin{tabular}{l | l | l}
$m$ & $n$ & $n^m \cdot m!$ \\ \hline
句子长度$m$ & 单词翻译候选数量$n$ & 译文数量$n^m \cdot m!$ \\ \hline
1 & 1 & 1 \\
1 & 10 & 10 \\
2 & 10 & 200 \\
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论