Commit 1488ff18 by 曹润柘

合并分支 'caorunzhe' 到 'master'

Caorunzhe

查看合并请求 !220
parents c0472484 960e7b6d
......@@ -233,7 +233,7 @@
\draw [-] (glabel.south west) -- ([xshift=3.5in]glabel.south west);
\node [anchor=center,rotate=90] (hlabel2) at ([xshift=-1.3em,yshift=-8.5em]glabel.west) {\tiny{$h$存放临时翻译结果}};
\node [anchor=north west] (foot2) at ([xshift=0.0em,yshift=-23.0em]translabel.south west) {\scriptsize{(b)\; 6: \textbf{if} $used[j]=$ \textbf{true} \textbf{then}}};
\node [anchor=north west] (foot2) at ([xshift=0.0em,yshift=-23.0em]translabel.south west) {\scriptsize{(b)\; 6: \textbf{if} $used[j]=$ \textbf{false} \textbf{then}}};
}
{%大大的join
\node [anchor=center,draw=ublue,circle,thick,fill=white,inner sep=2.5pt,circular drop shadow={shadow xshift=0.1em,shadow yshift=-0.1em}] (join) at ([xshift=4em,yshift=-1em]hlabel.north east) {\tiny{\textsc{Join}}};
......
......@@ -124,7 +124,7 @@ IBM模型由Peter F. Brown等人于上世纪九十年代初提出\cite{DBLP:jour
\subsubsection{机器翻译流程}
\parinterval 人进行翻译的过程比较容易理解,那计算机是如何完成翻译的呢?虽然人工智能这个概念显得很神奇,但是计算机远没有人那么智能,有时甚至还很``笨''。一方面,它没有能力像人一样,在教室里和老师一起学习语言知识;另一方面,即使能列举出每个单词的候选译文,但是还是不知道这些译文怎么拼装成句的,甚至不知道哪些译文是对的。为了更加直观地理解机器在翻译时要解决的挑战,可以将问题归纳如下:
\parinterval 人进行翻译的过程比较容易理解,那计算机是如何完成翻译的呢?虽然人工智能这个概念显得很神奇,但是计算机远没有人那么智能,有时甚至还很``笨''。一方面,它没有能力像人一样,在教室里和老师一起学习语言知识;另一方面,即使能列举出每个单词的候选译文,但是还是不知道这些译文怎么拼装成句的,甚至不知道哪些译文是对的。为了更加直观地理解机器在翻译时要解决的挑战,可以将问题归纳如下:
\begin{itemize}
\vspace{0.5em}
......@@ -134,7 +134,7 @@ IBM模型由Peter F. Brown等人于上世纪九十年代初提出\cite{DBLP:jour
\vspace{0.5em}
\end{itemize}
\parinterval 对于第一个问题,可以给计算机一个翻译词典,这样计算机可以发挥计算方面的优势,尽可能多地把翻译结果拼装出来。比如,可以把每个翻译结果看作是对单词翻译的拼装,这可以被形象地比贯穿多个单词的一条路径,计算机所做的就是尽可能多地生成这样的路径。图\ref{fig:5-4}中蓝色和红色的折线就分别表示了两条不同的译文选择路径,区别在于``满意''和``对''的翻译候选是不一样的,蓝色折线选择的是``satisfy''和``to'',而红色折线是``satisfied''和``with''。换句话说,不同的译文对应不同的路径(即使词序不同也会对应不同的路径)。
\parinterval 对于第一个问题,可以给计算机一个翻译词典,这样计算机可以发挥计算方面的优势,尽可能多地把翻译结果拼装出来。比如,可以把每个翻译结果看作是对单词翻译的拼装,这可以被形象地比贯穿多个单词的一条路径,计算机所做的就是尽可能多地生成这样的路径。图\ref{fig:5-4}中蓝色和红色的折线就分别表示了两条不同的译文选择路径,区别在于``满意''和``对''的翻译候选是不一样的,蓝色折线选择的是``satisfy''和``to'',而红色折线是``satisfied''和``with''。换句话说,不同的译文对应不同的路径(即使词序不同也会对应不同的路径)。
\parinterval 对于第二个问题,尽管机器能够找到很多译文选择路径,但它并不知道哪些路径是好的。说地再直白一些,简单地枚举路径实际上就是一个体力活,没有太多的智能。因此计算机还需要再聪明一些,运用它的能够``掌握''的知识判断翻译结果的好与坏。这一步是最具挑战的,当然也有很多思路。在统计机器翻译中,这个问题被定义为:设计一种统计模型,它可以给每个译文一个可能性,而这个可能性越高表明译文越接近人工翻译。
......@@ -315,7 +315,7 @@ $\vectorn{\emph{t}}^{[2]}$ = So\; ,\; what\; is\; human\; \underline{translation
\subsection{句子级翻译模型}
\label{sec:sentence-level-translation}
\parinterval 下面继续回答如何获取句子级翻译概率的问题,即:对于源语言句子$\vectorn{\emph{s}}$和目标语言句子$\vectorn{\emph{t}}$,计算$\funp{P}(\vectorn{\emph{t}}|\vectorn{\emph{s}})$。这也是整个句子级翻译模型的核心,一方面需要从数据中学习这个模型的参数,另一方面,对于新输入的句子,需要使用这个模型得到最佳的译文。下面介绍句子级翻译的建模方法。
\parinterval 下面继续回答如何获取句子级翻译概率的问题,即:对于源语言句子$\vectorn{\emph{s}}$和目标语言句子$\vectorn{\emph{t}}$,计算$\funp{P}(\vectorn{\emph{t}}|\vectorn{\emph{s}})$。这也是整个句子级翻译模型的核心,一方面需要从数据中学习这个模型的参数,另一方面,对于新输入的句子,需要使用这个模型得到最佳的译文。下面介绍句子级翻译的建模方法。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
......@@ -323,7 +323,7 @@ $\vectorn{\emph{t}}^{[2]}$ = So\; ,\; what\; is\; human\; \underline{translation
\subsubsection{基础模型}
\parinterval 计算句子级翻译概率并不简单。因为自然语言非常灵活,任何数据无法覆盖足够多的句子,因此,无法像公式\ref{eq:5-4}一样直接用简单计数的方式对句子的翻译概率进行估计。这里,采用一个退而求其次的方法:找到一个函数$g(\vectorn{\emph{s}},\vectorn{\emph{t}})\ge 0$来模拟翻译概率对译文可能性进行估计。可以定义一个新的函数$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$,令其满足:给定$\vectorn{\emph{s}}$,翻译结果$\vectorn{\emph{t}}$出现的可能性越大,$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$的值越大;$\vectorn{\emph{t}}$出现的可能性越小,$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$的值越小。换句话说,$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$的单调性和翻译概率$\funp{P}(\vectorn{\emph{t}}|\vectorn{\emph{s}})$呈正相关。如果存在这样的函数$g(\vectorn{\emph{s}},\vectorn{\emph{t}}
\parinterval 计算句子级翻译概率并不简单。因为自然语言非常灵活,任何数据无法覆盖足够多的句子,因此,无法像公式\ref{eq:5-4}一样直接用简单计数的方式对句子的翻译概率进行估计。这里,采用一个退而求其次的方法:找到一个函数$g(\vectorn{\emph{s}},\vectorn{\emph{t}})\ge 0$来模拟翻译概率对译文可能性进行估计。可以定义一个新的函数$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$,令其满足:给定$\vectorn{\emph{s}}$,翻译结果$\vectorn{\emph{t}}$出现的可能性越大,$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$的值越大;$\vectorn{\emph{t}}$出现的可能性越小,$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$的值越小。换句话说,$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$和翻译概率$\funp{P}(\vectorn{\emph{t}}|\vectorn{\emph{s}})$呈正相关。如果存在这样的函数$g(\vectorn{\emph{s}},\vectorn{\emph{t}}
)$,可以利用$g(\vectorn{\emph{s}},\vectorn{\emph{t}})$近似表示$\funp{P}(\vectorn{\emph{t}}|\vectorn{\emph{s}})$,如下:
\begin{eqnarray}
\funp{P}(\vectorn{\emph{t}}|\vectorn{\emph{s}}) \equiv \frac{g(\vectorn{\emph{s}},\vectorn{\emph{t}})}{\sum_{\vectorn{\emph{t}}'}g(\vectorn{\emph{s}},\vectorn{\emph{t}}')}
......@@ -481,7 +481,6 @@ g(\vectorn{\emph{s}},\vectorn{\emph{t}}) \equiv \prod_{j,i \in \widehat{A}}{\fun
\parinterval\ref{fig:5-10}给出了贪婪解码算法的伪代码。其中$\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$
\vspace{0.3em}
%----------------------------------------------
%\begin{figure}[htp]
% \centering
......@@ -504,7 +503,6 @@ g(\vectorn{\emph{s}},\vectorn{\emph{t}}) \equiv \prod_{j,i \in \widehat{A}}{\fun
\end{figure}
%----------------------------------------------
\vspace{-1.8em}
该算法的核心在于,系统一直维护一个当前最好的结果,之后每一步考虑扩展这个结果的所有可能,并计算模型得分,然后再保留扩展后的最好结果。注意,在每一步中,只有排名第一的结果才会被保留,其他结果都会被丢弃。这也体现了贪婪的思想。显然这个方法不能保证搜索到全局最优的结果,但是由于每次扩展只考虑一个最好的结果,因此该方法速度很快。图\ref{fig:5-11}给出了算法执行过程的简单示例。当然,机器翻译的解码方法有很多,这里仅仅使用简单的贪婪搜索方法来解决机器翻译的解码问题,在后续章节会对更加优秀的解码方法进行介绍。
%----------------------------------------------------------------------------------------
......
......@@ -348,9 +348,9 @@ p_0+p_1 & = & 1 \label{eq:6-21}
\label{eq:6-23}
\end{equation}
\parinterval 这里的函数$A(\cdot)$和函数$B(\cdot)$分别把目标语言和源语言的单词射到单词的词类。这么做的目的是要减小参数空间的大小。词类信息通常可以通过外部工具得到,比如Brown聚类等。另一种简单的方法是把单词直接映射为它的词性。这样可以直接用现在已经非常成熟的词性标注工具解决问题。
\parinterval 这里的函数$A(\cdot)$和函数$B(\cdot)$分别把目标语言和源语言的单词射到单词的词类。这么做的目的是要减小参数空间的大小。词类信息通常可以通过外部工具得到,比如Brown聚类等。另一种简单的方法是把单词直接映射为它的词性。这样可以直接用现在已经非常成熟的词性标注工具解决问题。
\parinterval 从上面改进的扭曲度模型可以看出,对于$t_{[i]}$生成的第一个源语言单词,要考虑中心$\odot_{[i]}$和这个源语言单词之间的绝对距离。实际上也就要把$t_{[i]}$生成的所有源语言单词看成一个整体并把它放置在合适的位置。这个过程要依据第一个源语言单词的词类和对应源语中心位置,和前一个非空对目标语言单词$t_{[i-1]}$的词类。而对于$t[i]$生成的其他源语言单词,只需要考虑它与前一个刚放置完的源语言单词的相对位置和这个源语言单词的词类。
\parinterval 从上面改进的扭曲度模型可以看出,对于$t_{[i]}$生成的第一个源语言单词,要考虑中心$\odot_{[i]}$和这个源语言单词之间的绝对距离。实际上也就要把$t_{[i]}$生成的所有源语言单词看成一个整体并把它放置在合适的位置。这个过程要依据第一个源语言单词的词类和对应源语中心位置,和前一个非空对目标语言单词$t_{[i-1]}$的词类。而对于$t_{[i]}$生成的其他源语言单词,只需要考虑它与前一个刚放置完的源语言单词的相对位置和这个源语言单词的词类。
\parinterval 实际上,上述过程就要先用$t_{[i]}$生成的第一个源语言单词代表整个$t_{[i]}$生成的单词列表,并把第一个源语言单词放置在合适的位置。然后,相对于前一个刚生成的源语言单词,把列表中的其他单词放置在合适的地方。这样就可以在一定程度上保证由同一个目标语言单词生成的源语言单词之间可以相互影响,达到了改进的目的。
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论