Commit 20d19d47 by 曹润柘

update chapter3 and follow master to 3.2

parent b0a2f83e
......@@ -221,7 +221,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{(三)如何从大量的双语平行数据中学习?}\index{Chapter3.2.3.3}
\parinterval 上面提到的方法需要能在更多的句子上使用。假设,有多个互译句对$(s^1,t^1)$,...,$(s^n,t^n)$。这时,我们仍然可以使用基于相对频度的方法进行估计,具体方法如下
\parinterval 上面提到的方法需要能在更多的句子上使用。假设,有多个互译句对$(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)}}}
\label{eqC3.5}
......@@ -319,7 +319,7 @@ g(s,t) = \prod_{(j,i)\in \widehat{A}}\textrm{P}(s_j,t_i)
\noindent 显然,如果每个词对齐连接所对应的翻译概率变大,那么整个句子翻译的得分也会提高。也就是说,词对齐越准确,翻译模型的打分越高,$s$$t$之间存在翻译关系的可能性越大。
\subsubsection{语言模型加强的句子翻译概率}\index{Chapter3.2.4.2}
\subsubsection{(二)生成流畅的译文}\index{Chapter3.2.4.2}
\parinterval 公式\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)$的值却是一样的。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......@@ -366,129 +366,110 @@ g(s,t) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)} \times \textrm{P
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{解码}\index{Chapter3.2.5}
\noindent\hspace{2em}当我们得到句子级翻译模型后,做的一件事就是对于输入模型的任意句子翻译为对应的目标语译文,这个过程称为解码。具体地说,当给定任意的源语句$s$,找到翻译概率最大的目标语译文$\widehat{t}$。如公式\ref{eqC3.14}所示。这里$\emph{argmax}_t{\textrm{P}(t|s)}$表示找到使$\textrm{P}(t|s)$达到最大时的$t$进行输出。换句话说,我们想找到这样一个$t$,它使得$\textrm{P}(t|s)$的计算结果最大。
\parinterval \textbf{解码}是指,在得到翻译模型后,对于新输入的句子生成最佳译文的过程。具体来说,当给定任意的源语句$s$,解码系统要找到翻译概率最大的目标语译文$\hat{t}$。这个过程可以被形式化描述为:
\begin{equation}
\widehat{t}=\emph{argmax}\textrm{P}(t|s)
\widehat{t}=\argmax_{t} \textrm{P}(t|s)
\label{eqC3.14}
\end{equation}
\noindent\hspace{2em}结合上一小节对句子级翻译模型的定义和公式\ref{eqC3.14}得到一个新的解码描述。如公式\ref{eqC3.15}所示。
\noindent 其中$\argmax_{t} \textrm{P}(t|s)$表示找到使$\textrm{P}(t|s)$达到最大时的译文$t$。结合上一小节中关于$\textrm{P}(t|s)$的定义,把公式\ref{eqC3.7}带入公式\ref{eqC3.14}得到:
\begin{equation}
\widehat{t}=\argmax_{t}\frac{g(s,t)}{\sum_{t^{'}g(s,t^{'})}}
\label{eqC3.15}
\end{equation}
\noindent\hspace{2em}在公式\ref{eqC3.15}中,我们发现${\sum_{t^{'}g(s,t^{'})}}$仅是关于$s$的函数,当给定源语句$s$时,它是一个常数,不影响对$\widehat{t}$的求解,因此可以进行化简。化简后的解码形式化描述,如公式\ref{eqC3.16}所示。其中g函数的计算见公式\ref{eqC3.13}
\parinterval 在公式\ref{eqC3.15}中,我们发现${\sum_{t^{'}g(s,t^{'})}}$是一个关于$s$的函数,当给定源语句$s$时,它是一个常数,而且$g(\cdot) \ge 0$,因此${\sum_{t^{'}g(s,t^{'})}}$不影响对$\widehat{t}$的求解,也不需要计算。基于此,公式\ref{eqC3.15}可以被化简为:
\begin{equation}
\widehat{t}=\argmax_{t}g(s,t)
\label{eqC3.16}
\end{equation}
\noindent\hspace{2em}现在的问题是当面对一个新的源语句$s$时,我们怎么实现公式\ref{eqC3.16}。一个简单粗暴的做法是枚举所有可能的$t$,然后计算函数$g(s,t)$,将分数最高对于的$t$作为最终的翻译结果。
\noindent\hspace{2em}如何枚举所有的$t$呢?假设源语句$s$$m$个词,每个词有$n$个翻译候选。我们从左到右一步步地扩展译文单词。因为词的候选翻译可以任意调序,所以每一步需要扩展所有没有被翻译的源语单词的翻译候选。换句话说,第一步扩展$m \times n$个候选翻译;第二步扩展$(m-1)\times n$个单词;...... ;第$m-1$步扩展$2\times n$个单词;第$m$步扩展$1 \times n$个单词,直到源语句的全部单词都被翻译。上述过程可以用图3.15表示。其中$\phi$表示空,$w_j^i$表示第$i$步的第$j$个候选翻译,实线表示连接成句。因此源语句$S$对应的可能译文至少有$n^m \bullet m!$。计算见公式\ref{eqC3.17}
\begin{equation}
(m \times n) \times((m-1)\times n) \times((m-2) \times n) \times ...\times (1 \times n)= n^m \bullet m!
\label{eqC3.17}
\end{equation}
%----------------------------------------------
% 图3.15
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure315}
\caption{此处为图片的描述...}
\label{figureC3.15}
\end{figure}
%---------------------------
\parinterval 公式\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}\bullet m!$是什么样的概念呢?当$m$$n$分别为2和10时,译文可能有200个,这个计算量并不大。但是当$m$$n$分别为20和10时,即源语句的词数20,每个词有10个候选译文。此时约有$2.4329 \times 10^{38}$个候选翻译,这几乎是不可计算的。这说明潜在翻译结果的非常多,几乎无法枚举,因此我们需要高效的搜索算法找到理想的解
\parinterval $n^{m}\cdot m!$是什么样的概念呢?如表\ref{tab:MT-search-space}所示,当$m$$n$分别为2和10时,译文只有200个,不算多。但是当$m$$n$分别为20和10时,即源语句的词数为20,每个词有10个候选译文,我们会面对$2.4329 \times 10^{38}$个不同的译文,这几乎是不可计算的
%----------------------------------------------
% 表3.1
\begin{table}[h]
\centering
% 表3.2
\begin{table}[htp]{
\begin{center}
\caption{机器翻译搜索空间大小的示例}
\label{tab:MT-search-space}
\begin{tabular}{l | l | l}
\toprule
$m$ & $n$ & $n^m \cdot m!$\\
\midrule
$m$ & $n$ & $n^m \cdot m!$ \\ \hline
1 & 1 & 1 \\
1 & 10 & 10 \\
2 & 10 & 200 \\
10 & 10 & 36288000000000000 \\
20 & 10 & 2.43290200817664 $\times 10^{38}$ \\
20 & 30 & 8.48300477127188 $\times 10^{47}$ \\
\bottomrule
\end{tabular}
\caption{}
\label{}
\end{table}
%---------------------------
\end{center}
}\end{table}
%-----------------------------------
\parinterval 对于如此巨大的搜索空间,我们需要一种十分有效的搜索算法才能实现机器翻译的解码。这里介绍一种贪婪的解码算法,把解码分成若干步骤,每步只翻译一个单词,并保留当前``最好''的结果,直至所有源语言单词都被翻译完毕。
\parinterval\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}这里介绍一种贪婪的解码算法,它并不从整体最优考虑译文的生成。换句话说,贪婪算法不枚举所有可能的译文,而是每步选择一个源语言单词,利用它的翻译候选扩展译文,并只保留当前步“最好”的结果,直到所有源语言的单词都被翻译。
%----------------------------------------------
% 图3.17
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure317}
\caption{此处为图片的描述...}
\label{figureC3.17}
\end{figure}
%---------------------------
\noindent\hspace{2em}如图\ref{figureC3.17}所示,表示的是贪婪解码的示意图。其中红色实线上的单词串联在一起就得到最终的翻译结果。每一步的计算都是基于上一步的翻译结果,比如在第二步的计算,是基于第一步生成的译文$w_1^1$进行扩展的。换句话说,我们需要选择一个单词$w_{?}^2$,使得$w_1^1$$w_{?}^2$的句子级翻译概率最大。
%----------------------------------------------
% 图3.18
% 图3.17
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure318}
\caption{此处为图片的描述...}
\input{./Chapter3/Figures/figure318-1}
\input{./Chapter3/Figures/figure318-2}
\caption{贪婪的机器翻译解码过程实例}
\label{figureC3.18}
\end{figure}
%---------------------------
\noindent\hspace{2em}贪婪解码的伪代码见图\ref{figureC3.18}。简略地分析下代码。其中$\pi$保存所有源语单词的候选译文,$\pi[j]$表示第$j$个源语单词的候选翻译集合,$best$保存当前最好翻译结果,$h$保存当前步生成的所有译文候选。主体是两层循环,在内层循环中如果第$j$个源语单词没有被翻译过,则用$best$和它的候选译文$\pi[j]$生成新的译文翻译,再存于$h$中,即操作$h=h\cup{JOIN(best,\pi[j])}$。外层循环再从$h$中选择得分最好的结果存于$best$中,即操作$best=PruneForTop1(h)$,并标识相应的源语单词已翻译,即$used[best.j]=true$
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{基于词的翻译建模}\index{Chapter3.3}
\noindent\hspace{2em}在上一节中,我们以实现为目的简单地介绍了基于词的机器翻译的建模、训练和解码,但很多问题并没有深入思考。比如如何用更严密的数学模型描述翻译过程,更科学的优化方法完成训练以及更多系统化的方法进行解码,还包括空翻译问题、调序模型问题等等还待解决。只有把这些问题解决了才能接近今天的机器翻译水平。本节将介绍统计机器翻译模型基础,即噪声信道模型以及建模方法,这也是IBM模型中最基本的建模思想。
\parinterval 在上一节中,我们以实现为目的简单地介绍了基于词的机器翻译的建模、训练和解码,但很多问题并没有深入思考。比如如何用更严密的数学模型描述翻译过程,更科学的优化方法完成训练以及更多系统化的方法进行解码,还包括空翻译问题、调序模型问题等等还待解决。只有把这些问题解决了才能接近今天的机器翻译水平。本节将介绍统计机器翻译模型基础,即噪声信道模型以及建模方法,这也是IBM模型中最基本的建模思想。
\subsection{噪声信道模型}\index{Chapter3.3.1}
\noindent\hspace{2em}首先分析下统计机器翻译或IBM模型是从什么角度去完成翻译的。人在做翻译时比较简单。对于给定的源语句$s$,不会尝试太多的可能性,而是快速地翻译一个或者若干个正确的译文$\widehat{t}$。因此在人看来除了正确的译文外,其他的翻译都是不正确的。而统计机器翻译更多地强调可能性大小,即所有的译文都是可能的。换句话说,对于源语句$s$,所有可能的目标语词串$t$都是可能的译文,只是可能性大小不同。即每对$(s,t)$都有一个概率值$\textrm{P}(t|s)$来描述$s$翻译为$t$的好与坏。如图\ref{figureC3.19}所示。
\parinterval 首先分析下统计机器翻译或IBM模型是从什么角度去完成翻译的。人在做翻译时比较简单。对于给定的源语句$s$,不会尝试太多的可能性,而是快速地翻译一个或者若干个正确的译文$\widehat{t}$。因此在人看来除了正确的译文外,其他的翻译都是不正确的。而统计机器翻译更多地强调可能性大小,即所有的译文都是可能的。换句话说,对于源语句$s$,所有可能的目标语词串$t$都是可能的译文,只是可能性大小不同。即每对$(s,t)$都有一个概率值$\textrm{P}(t|s)$来描述$s$翻译为$t$的好与坏。如图\ref{figureC3.19}所示。
%----------------------------------------------
% 图3.19
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure319}
\caption{此处为图片的描述...}
\caption{不同翻译候选空间的对比:人(左)vs 机器翻译 (右)}
\label{figureC3.19}
\end{figure}
%---------------------------
\noindent\hspace{2em}总之统计机器翻译模型是用概率化的思想指导翻译过程。那如何对这种思想进行建模呢?在IBM模型中使用的建模方式是噪声信道模型,它是由香农在上世纪40年代末提出来的,并于上世纪80年代应用在语言识别领域,后来又被Brown等人用于统计机器翻译中。
\parinterval IBM模型也是建立在如上统计模型之上。具体来说,IBM模型的基础是\textbf{噪声信道模型}(Noise Channel Model),它是由香农在上世纪40年代末提出来的({\red 参考文献?}),并于上世纪80年代应用在语言识别领域,后来又被Brown等人用于统计机器翻译中({\red 参考文献?2篇 Brown等人还有一篇})
\parinterval 在噪声信道模型中,源语言句子$s$(信宿)被看作是由目标语言句子$t$(信源)经过一个有噪声的信道得到的。如果知道了$s$和信道的性质,我们可以通过$\textrm{P}(t|s)$得到信源的信息,这个过程如图\ref{figureC3.20}所示。
\noindent\hspace{2em}噪声信道模型这样看待翻译问题,即源语言句子$s$(信宿)是由目标语句子$t$(信源)经过一个有噪声的信道得到的。如果知道了$s$和信道的性质,我们可以通过$\textrm{P}(t|s)$得到可能的信源的概率,这个过程如图\ref{figureC3.20}所示。
%----------------------------------------------
% 图3.20
\begin{figure}[htp]
\centering
\input{./Chapter3/Figures/figure320}
\caption{此处为图片的描述...}
\caption{噪声信道模型,其中$s$表示信宿,$t$表示信源}
\label{figureC3.20}
\end{figure}
%---------------------------
\noindent\hspace{2em}举个例子来说明噪声信道模型。对于汉译英的翻译任务,汉语句子$s$可以看做英语句子$t$加入噪声后得到的。换句话说,英语经过噪声-信道传输时发生了扭曲变形,在信道的输出端呈现汉语。于是我们需要根据观察到的汉语特征,通过概率$\textrm{P}(t|s)$猜测最为可能的英语句子。
\parinterval 举个例子。对于汉译英的翻译任务,汉语句子$s$可以被看作是英语句子$t$加入噪声通过信道后得到的结果。换句话说,英语句子经过噪声-信道传输时发生了变化,在信道的输出端呈现为汉语句子。于是我们需要根据观察到的汉语特征,通过概率$\textrm{P}(t|s)$猜测最为可能的英语句子。这个找到最可能的目标语句(信源)的过程也被称为\textbf{解码}(decoding)。直到今天,解码这个概念也被广泛的使用在机器翻译及相关任务中。这个过程也可以表述为:给定输入$s$,找到最可能的输出$t$,使得$\textrm{P}(t|s)$达到最大:
\noindent\hspace{2em}通过上述过程找到最可能的目标语句(信源)的过程称之为解码或翻译。该过程也可以表述为给定源语句$s$,寻找最可能的目标语译文$t$,使得概率$\textrm{P}(\widehat{t}|s)$最大。如公式\ref{eqC3.18}所示。
\begin{equation}
\widehat{t}=\argmax_t\textrm{P}(t|s)
\label{eqC3.18}
\end{equation}
\noindent\hspace{2em}对于公式\ref{eqC3.18}中的 ,我们利用贝叶斯公式进行简单的变换,变换后的形式见公式\ref{eqC3.19}
\begin{equation}
\textrm{P}(t|s)=\frac{\textrm{P}(s,t)}{\textrm{P}(s)}=\frac{\textrm{P}(s|t)\textrm{P(t)}}{\textrm{P}(s)}
\noindent\hspace{2em}公式\ref{eqC3.18}的核心内容之一是定义$\textrm{P}(t|s)$。在IBM模型中,我们使用贝叶斯准则对$\textrm{P}(t|s)$进行如下变换:
\begin{eqnarray}
\textrm{P}(t|s) & = &\frac{\textrm{P}(s,t)}{\textrm{P}(s)} \nonumber \\
& = & \frac{\textrm{P}(s|t)\textrm{P(t)}}{\textrm{P}(s)}
\label{eqC3.19}
\end{equation}
\end{eqnarray}
\noindent\hspace{2em}公式\ref{eqC3.19}可以分为三部分。第一部分是$\textrm{P}(s|t)$,也称为翻译模型。它表示给定目标语句$t$生成源语句$s$的概率,需要注意翻译的方向已经从$\textrm{P}(s|t)$转向了$\textrm{P}(t|s)$,但无须刻意的区分,可以简单地理解为翻译模型刻画了$s$$t$的翻译对应程度。第二部分是$\textrm{P}(t)$,也称为语言模型。它表示的是目标语句$t$的通顺程度。第三部分是$\textrm{P}(s)$,也是语言模型,但刻画的是源语句$s$的通顺程度,在后续的建模中这一项是可以被化简的。
......@@ -505,7 +486,7 @@ $m$ & $n$ & $n^m \cdot m!$\\
\noindent\hspace{2em}上述就是IBM模型的建模思想。其中的过程就是为了引入$\textrm{P}(t)$,而非简单地为了使用贝叶斯变换。
\subsection{建模}\index{Chapter3.3.2}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\noindent\hspace{2em}IBM模型把翻译问题描述为:给定源语句$s$,在所有可能的译文中找到使翻译模型$\textrm{P}(s|t)$和语言模型$\textrm{P}(t)$乘积最大的译文$\widehat{t}$,如公式\ref{eqC3.20}所示。在具体解决翻译问题时,需要面临三个基本问题,如下所示。
\noindent\hspace{2em}1. 建模:如何描述计算$\textrm{P}(s|t)$$\textrm{P}(t)$的计算方式。换句话说,如何用可计算的方式把概率描述出来。这也是最核心的问题。
......
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\begin{scope}
{
\node [pos=0.5,left,xshift=-0.5em,yshift=2.0em] (label2) {\footnotesize{{$t^1$ =$<$s$>$ {\color{red}machine}\; {\color{red}translation}\; is\; just\; translation\; by\; computer\; $<$/s$>$ }}};
\node [anchor=north west] (label2part2) at ([yshift=0.3em]label2.south west) {\footnotesize{{$t^2$ =$<$s$>$ how\; does\;this\; {\color{red}machine}\;work\; $?$ $<$/s$>$ }}};
\node [anchor=north west] (label2part3) at ([yshift=0.3em]label2part2.south west) {\footnotesize{{$t^3$ =$<$s$>$ we\; are\;replaced\;the\; old\; adding\; {\color{red}machine}\;with\;a\; computer\; $<$/s$>$ }}};
\node [anchor=north west] (label2part4) at ([yshift=0.3em]label2part3.south west) {\footnotesize{{$t^4$ =$<$s$>$ several\; approaches\; to\;{\color{red}machine}\;learning\; are\; used\; to\; solve\; problems\; $?$\; $<$/s$>$ }}};
}
\end{scope}
\end{tikzpicture}
%---------------------------------------------------------------------
\begin{tikzpicture}
{
\node [anchor=north west,inner sep=2pt,align=left] (line1) at (0,0) {\textrm{\textbf{Function} \textsc{WordDecoding}($s$)}};
\node [anchor=north west,inner sep=2pt,align=left] (line2) at ([yshift=-1pt]line1.south west) {\textrm{1: $\pi = $\textsc{GetTransOptions}($s$)}};
\node [anchor=north west,inner sep=2pt,align=left] (line3) at ([yshift=-1pt]line2.south west) {\textrm{2: $best = \phi$}};
\node [anchor=north west,inner sep=2pt,align=left] (line4) at ([yshift=-1pt]line3.south west) {\textrm{3: \textbf{for} $i$ in $[1,m]$ \textbf{do}}};
\node [anchor=north west,inner sep=2pt,align=left] (line5) at ([yshift=-1pt]line4.south west) {\textrm{4: \hspace{1em} $h = \phi$}};
\node [anchor=north west,inner sep=2pt,align=left] (line6) at ([yshift=-1pt]line5.south west) {\textrm{5: \hspace{1em} \textbf{foreach} $j$ in $[1,m]$ \textbf{do}}};
\node [anchor=north west,inner sep=2pt,align=left] (line7) at ([yshift=-1pt]line6.south west) {\textrm{6: \hspace{2em} \textbf{if} $used[j]=$ \textbf{true} \textbf{then}}};
\node [anchor=north west,inner sep=2pt,align=left] (line8) at ([yshift=-1pt]line7.south west) {\textrm{7: \hspace{3em} $h = h \cup \textrm{\textsc{Join}}(best,\pi[j])$}};
\node [anchor=north west,inner sep=2pt,align=left] (line9) at ([yshift=-1pt]line8.south west) {\textrm{8: \hspace{1em} $best = \textrm{\textsc{PruneForTop1}}(h)$}};
\node [anchor=north west,inner sep=2pt,align=left] (line10) at ([yshift=-1pt]line9.south west) {\textrm{9: \hspace{1em} $used[best.j] = \textrm{\textsc{\textbf{true}}}$}};
\node [anchor=north west,inner sep=2pt,align=left] (line11) at ([yshift=-1pt]line10.south west) {\textrm{10: \textbf{return} $best.translatoin$}};
\node [anchor=south west,inner sep=2pt,align=left] (head1) at ([yshift=1pt]line1.north west) {输出: 找的最佳译文};
\node [anchor=south west,inner sep=2pt,align=left] (head2) at ([yshift=1pt]head1.north west) {输入: 源语句子$s=s_1...s_m$};
}
\begin{pgfonlayer}{background}
\node[rectangle,draw=ublue,thick,inner sep=0.2em,fill=white,drop shadow,minimum height=1.6cm] [fit = (head2) (line8) (line11)] (algorithm) {};
%% highlights
%\begin{pgfonlayer}{background}
{
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=2.21in] (line2highlight) at (line2.west) {};
}
{
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=2.21in] (line3highlight) at (line3.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=2.21in] (line5highlight) at (line5.west) {};
}
%\end{pgfonlayer}
\end{pgfonlayer}
{
%% remark 1
\begin{scope}
{
\node [anchor=north west,align=left] (remark1) at ([xshift=0.4in]algorithm.north east) {获取每个单词\\的翻译候选};
\node [anchor=west,draw,thick,circle,minimum size=0.3em,inner sep=2.1pt,red] (s1) at ([yshift=-0.7em,xshift=0.5em]remark1.north east){1};
\node [anchor=west,draw,thick,circle,minimum size=0.3em,inner sep=2.1pt,ugreen] (s2) at ([xshift=0.4em]s1.east) {2};
\node [anchor=west,draw,thick,circle,minimum size=0.3em,inner sep=2.1pt,orange] (s3) at ([xshift=0.4em]s2.east) {3};
\node [anchor=west,draw,thick,circle,minimum size=0.3em,inner sep=3.0pt,ublue] (s4) at ([xshift=0.4em]s3.east) {...};
\node [anchor=west,draw,thick,circle,minimum size=0.3em,inner sep=1.5pt,purple] (s5) at ([xshift=0.4em]s4.east) {$m$};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,red,fill=red] (t1) at ([yshift=-1.7em]s1.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,ugreen,fill=ugreen] (t2) at ([yshift=-1.7em]s2.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,orange,fill=orange] (t3) at ([yshift=-1.7em]s3.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,ublue,fill=ublue] (t4) at ([yshift=-1.7em]s4.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,purple,fill=purple] (t5) at ([yshift=-1.7em]s5.center) {{\color{white} $n$}};
\draw [->,thick] ([yshift=-0.1em]s1.south) -- ([yshift=0.1em]t1.north);
\draw [->,thick] ([yshift=-0.1em]s2.south) -- ([yshift=0.1em]t2.north);
\draw [->,thick] ([yshift=-0.1em]s3.south) -- ([yshift=0.1em]t3.north);
\draw [->,thick] ([yshift=-0.1em]s4.south) -- ([yshift=0.1em]t4.north);
\draw [->,thick] ([yshift=-0.1em]s5.south) -- ([yshift=0.1em]t5.north);
\begin{pgfonlayer}{background}
{
\node[rectangle,draw,inner sep=0.2em,fill=blue!10] [fit = (remark1) (t5)] (remark1label) {};
}
\end{pgfonlayer}
}
\end{scope}
%% end of remark 1
%% remark 2
\begin{scope}
{
\node [anchor=north west,draw,inner sep=2pt,fill=blue!10] (remark2) at ([xshift=-0.2em,yshift=-1em]remark1.south west) {$best$用于保存当前最好的翻译结果};
}
\end{scope}
%% end of remark 2
\node [anchor=north west] (remark4) at ([xshift=21.8em,yshift=-0.6em]line7.east) {};
%% remark 3
\begin{scope}
{
\node [anchor=north west,draw,inner sep=2pt,fill=blue!10] (remark3) at ([yshift=-0.5em]remark2.south west) {$h$用于保存每步生成的所有译文候选};
}
\end{scope}
%% end of remark 3
{
\draw [->,thick] (line2highlight.east) ..controls +(east:1em) and +(west:1em).. (remark1label.west);
}
{
\draw [->,thick] (line3highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.3em]remark2.south west);
\draw [->,thick] (line5highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.3em]remark3.south west);
}
}
\end{tikzpicture}
......@@ -139,7 +139,7 @@
\end{pgfonlayer}
}
\end{scope}
\%% end of remark 5
% end of remark 5
%% remark 6
\begin{scope}
......@@ -162,7 +162,7 @@
\end{pgfonlayer}
}
\end{scope}
\%% end of remark 6
% end of remark 6
{
\draw [->,thick] (line2highlight.east) ..controls +(east:1em) and +(west:1em).. (remark1label.west);
......
......@@ -13,7 +13,7 @@
\draw [->,thick,] (s1.north east) .. controls +(north east:1em) and +(north west:1em).. (t.north west) node[pos=0.5,below] {\tiny{正确翻译}};
\node [draw,red,fill=red!10,thick,anchor=center,circle,inner sep=3.5pt] (s) at ([xshift=10em,yshift=0em]s1.east) {\black{$s$}};
\node [draw,red,fill=red!10,thick,anchor=center,circle,inner sep=3.5pt] (s) at ([xshift=13em,yshift=0em]s1.east) {\black{$s$}};
\node [draw,ublue,fill=blue!10,thick,anchor=center,circle,inner sep=2pt] (t1) at ([xshift=1in]s.east) {\black{$t_1$}};
\node [draw,ublue,fill=blue!10,thick,anchor=center,circle,inner sep=2pt] (t2) at ([xshift=3em,yshift=2em]t1.north east) {\black{$t_2$}};
\node [draw,ublue,fill=blue!10,thick,anchor=center,circle,inner sep=2pt] (t3) at ([xshift=1em,yshift=4em]t1.north east) {\black{$t_3$}};
......@@ -28,6 +28,10 @@
\draw [->,thick,] (s.north) .. controls +(70:4em) and +(west:1em).. (t3.west) node[pos=0.5,above,xshift=-1em] {\tiny{P($t_3|s$)=0.3}};
\draw [->,thick,] (s.south east) .. controls +(300:3em) and +(south west:1em).. (t4.south west) node[pos=0.5,below] {\tiny{P($t_4|s$)=0.1}};
\node [anchor=center] (foot1) at ([xshift=3.8em,yshift=-3em]s1.south) {\footnotesize{人的翻译候选空间}};
\node [anchor=center] (foot2) at ([xshift=7em,yshift=-3em]s.south) {\footnotesize{机器的翻译候选空间}};
\end{tikzpicture}
......
......@@ -99,8 +99,8 @@
% CHAPTERS
%----------------------------------------------------------------------------------------
%\include{Chapter1/chapter1}
\include{Chapter2/chapter2}
%\include{Chapter3/chapter3}
%\include{Chapter2/chapter2}
\include{Chapter3/chapter3}
......@@ -111,7 +111,7 @@
%\chapter*{Bibliography}
%\addcontentsline{toc}{chapter}{\textcolor{ocre}{Bibliography}} % 增加一个标题
%\printbibliography[heading=bibempty]
%\printbibliography
\printbibliography
%------------------------------------------------
......
......@@ -363,7 +363,7 @@ innerbottommargin=5pt]{cBox}
%----------------------------------------------------------------------------------------
% SECTION NUMBERING IN THE MARGIN
%----------------------------------------------------------------------------------------
%调整各级标题的段前段后间距
\makeatletter
\renewcommand{\@seccntformat}[1]{\llap{\textcolor{ocre}{\csname the#1\endcsname}\hspace{1em}}}
\renewcommand{\section}{\@startsection{section}{1}{\z@}
......@@ -376,7 +376,7 @@ innerbottommargin=5pt]{cBox}
{\normalfont\sffamily\bfseries}}
\renewcommand{\subsubsection}{\@startsection {subsubsection}{3}{\z@}
{-3ex \@plus -0.1ex \@minus -.4ex}
{.2ex \@plus.2ex }
{.4ex \@plus.2ex }
{\normalfont\small\sffamily\bfseries}}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}
{-2ex \@plus-.2ex \@minus .2ex}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论