Commit 5cc504ae by 曹润柘

update chapter1-3's figures

parent 00fbfce7
......@@ -39,12 +39,13 @@
\node [anchor=north west] (entry3) at ([yshift=0.0em]entry2.south west) {\textbf{3:} Yes, you are right .};
\node [anchor=north west] (entry4) at ([yshift=0.0em]entry3.south west) {\hspace{1em} ...};
\node [anchor=north west] (entry5) at ([yshift=0.1em]entry4.south west) {\hspace{1em}{\quad}};
\node [anchor=north west] (entry6) at ([xshift=10.97em,yshift=0.65em]entry5.south west) {};
\node [anchor=south west] (monodatalabel) at (entry1.north west) {{\color{ublue}\small{资源2:单语语料}}};
}
\begin{pgfonlayer}{background}
{
\node[rectangle,draw=ublue, inner sep=0mm] [fit = (entry1) (entry2) (entry3) (entry4) (entry5)(monodatalabel)] (monodata) {};
\node[rectangle,draw=ublue, inner sep=0mm] [fit = (entry1) (entry2) (entry3) (entry4) (entry5)(entry6)(monodatalabel)] (monodata) {};
}
\end{pgfonlayer}
......@@ -62,12 +63,13 @@
\node [anchor=north west] (phrase5) at ([yshift=0.1em]phrase4part2.south west) {$\textrm{Pr}(\textrm{满意} \to \textrm{satisfied})$};
\node [anchor=north west] (phrase5part2) at ([yshift=0.5em]phrase5.south west) {$ = 0.4$};
\node [anchor=north west] (phrase6) at ([yshift=0.0em]phrase5part2.south west) {...\vspace{2em}};
\node [anchor=north west] (phrase7) at ([yshift=0.6em]phrase6.south west) {};
\node [anchor=south west] (phrasetablelabel) at (phrase1.north west) {{\color{ublue} \small{翻译模型}}};
}
\begin{pgfonlayer}{background}
{
\node[rectangle,draw=ublue, inner sep=0mm] [fit = (phrase1) (phrase2) (phrase3) (phrase4) (phrase4part2) (phrase5) (phrase5part2) (phrase6) (phrasetablelabel)] (phrasetable) {};
\node[rectangle,draw=ublue, inner sep=0mm] [fit = (phrase1) (phrase2) (phrase3) (phrase4) (phrase4part2) (phrase5) (phrase5part2) (phrase6)(phrase7) (phrasetablelabel)] (phrasetable) {};
}
\end{pgfonlayer}
......
......@@ -32,7 +32,7 @@
{
\node [anchor=north west] (entry1) at (0,0) {\textbf{1:}$\to$ I $\mid$ me};
\node [anchor=north west] (entry2) at ([yshift=0.1em]entry1.south west) {\textbf{2:}$\to$ you};
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {\textbf{3:} 满意 \hspace{-0.4em} $\to$ \hspace{-0.4em} satisfy \hspace{-0.2em}$\mid$\hspace{-0.1em} satisfied ... };
\node [anchor=north west] (entry3) at ([yshift=0.1em]entry2.south west) {\textbf{3:} 满意 \hspace{-0.4em} $\to$ \hspace{-0.4em} satisfy \hspace{-0.12em}$\mid$\hspace{-0.12em} satisfied ... };
\node [anchor=north west] (entry4) at ([yshift=0.1em]entry3.south west) {\hspace{1em} ...};
\node [anchor=south west] (dictionarylabel) at (entry1.north west) {{\color{ublue} 资源2:翻译词典}};
}
......
......@@ -15,7 +15,7 @@
\draw [-,dashed] (-0.5,4) -- (2,4); %%图中横轴虚线
\node [anchor=north] at (-0.8,-1.2) {O};
\node [anchor=north] at (2,-1.2) {$\mu$};
\node [anchor=north] at (-1.1,4.5) {$\frac{1}{\sqrt{2\pi}\sigma}$};
\node [anchor=north] at (-1.4,4.75) {$\frac{1}{\sqrt{2\pi}\sigma}$};
\node [anchor=north] at (-1.2,6.2) {\scriptsize{$f(x)$}};
\node [anchor=north] at (9.6,-1.2) {\footnotesize{$x$}};
......
......@@ -69,9 +69,9 @@
{
\node [anchor=east,draw,dashed,red,thick,minimum width=13em,minimum height=1.5em] (final) at (p2seg2.east) {};
\node [anchor=west,red] (finallabel) at ([xshift=2em]sentlabel.east) {输出概率最大};
\node [anchor=west,red] (finallabel) at ([xshift=2.5em]sentlabel.east) {输出概率最大};
\node [anchor=north east,red] (finallabel2) at ([yshift=0.5em]finallabel.south east) {的结果};
\draw [->,thick,red] ([xshift=-1.5em]final.north east) ..controls +(north:0.5) and +(south:0.5).. (finallabel2.south);
\draw [->,thick,red] ([xshift=0.0em,yshift=-0.5em]final.north east) ..controls +(east:0.3) and +(south:0.0).. ([xshift=1.0em]finallabel2.south);
}
}
......@@ -81,3 +81,29 @@
%---------------------------------------------------------------------
......@@ -18,11 +18,11 @@
\parinterval 语言分析部分将以汉语为例介绍词法和句法分析。它们都是自然语言处理中的基本问题,而且在机器翻译中也会经常被使用。同样,我们会介绍这两个任务的定义和解决问题的思路。
\parinterval 语言建模是机器翻译中最常用的一种技术,它主要用于句子的生成和流畅度评价。我们会以传统$n$-gram语言模型为例,对语言建模的相关概念进行介绍。但是,这里并不深入探讨语言模型技术,在后面的章节中还有会单独的内容对神经网络语言模型等前沿技术进行讨论。
\parinterval 语言建模是机器翻译中最常用的一种技术,它主要用于句子的生成和流畅度评价。我们会以传统语言模型为例,对语言建模的相关概念进行介绍。但是,这里并不深入探讨语言模型技术,在后面的章节中还有会单独的内容对神经网络语言模型等前沿技术进行讨论。
%--问题概述-----------------------------------------
\section{问题概述 }\index{Chapter2.1}
\parinterval 很多时候机器翻译系统被看作是孤立的“黑盒”系统(图 \ref {figureC2.1} (a))。我们将一段文本作为输入送入机器翻译系统得到翻译好的译文输出。但是真实的机器翻译系统要复杂的多。因为系统看到的输入和输出的实际上只是一些符号串,这些符号并没有任何其它意义,因此需要进一步对这些符号串进行处理才能使机器翻译系统更好的使用它们,比如,需要定义翻译中最基本的单元是什么?符号串是否还有结构信息?如何用数学工具刻画这些基本单元和结构?
\parinterval 很多时候机器翻译系统被看作是孤立的“黑盒”系统(图 \ref {figureC2.1} (a))。我们将一段文本作为输入送入机器翻译系统,之后得到翻译好的译文输出。但是真实的机器翻译系统要复杂的多。因为系统看到的输入和输出的实际上只是一些符号串,这些符号并没有任何其它意义,因此需要进一步对这些符号串进行处理才能使机器翻译系统更好的使用它们,比如,需要定义翻译中最基本的单元是什么?符号串是否还有结构信息?如何用数学工具刻画这些基本单元和结构?
%----------------------------------------------
% 图2.1
......@@ -35,7 +35,7 @@
\end{figure}
%-------------------------------------------
\parinterval\ref{figureC2.1} (b)展示了一个机器翻译系统处理输入输出的例子。可以看到,输入的中文字串“猫喜欢吃鱼”被加工成一个新的结构
\parinterval\ref{figureC2.1} (b)展示了一个机器翻译系统处理输入输出的例子。可以看到,输入的中文字串“猫喜欢吃鱼”被加工成一个新的结构
%----------------------------------------------
% 图2.2
\begin{figure}[htp]
......@@ -58,13 +58,13 @@
\parinterval 类似的,机器翻译输出的结果也可以包含同样的信息。甚至系统输出英文译文之后,还有一个额外的步骤来把部分英文单词的大小写恢复出来,比如,上例中句首单词Cats的首字母要大写。
\parinterval 一般来说,在送入机器翻译系统前需要对文字序列进行处理和加工的过程被称为预处理。同理,在机器翻译模型输出译文后的处理作被称作后处理。这两个过程对机器翻译性能影响很大,比如,在神经机器翻译里,预处理使用不同策略的切分可能会造成翻译性能的天差地别。
\parinterval 一般来说,在送入机器翻译系统前需要对文字序列进行处理和加工的过程被称为\textbf{预处理}。同理,在机器翻译模型输出译文后的处理作被称作\textbf{后处理}。这两个过程对机器翻译性能影响很大,比如,在神经机器翻译里,预处理使用不同策略的切分可能会造成翻译性能的天差地别。
\parinterval 值得注意的是,不论是分词还是句法分析,对于机器翻译来说并不是必须要求符合人的认知和语言学约束。换句话说,机器翻译所使用的“单词”和“结构”本身并不是为了符合人类的解释,它直接目的是更好的进行翻译。从系统的角度,有时候即使一些处理和我们的语言习惯有差别的“单词”和“结构”,仍然会带来性能的提升,比如在神经机器翻译中,在传统分词的基础上进一步使用双字节编码(Byte Pair Encoding,BPE)子词切分会使得机器翻译性能大幅提高。当然,自然语言处理中语言学信息的使用一直是学界关注的焦点。甚至关于语言学结构对机器翻译是否有作用这个问题也有争论。但是不能否认的是,无论是语言学的知识,还是计算机自己学习到的知识,对机器翻译都是有价值的。在后续章节会看到,这两种类型的知识对机器翻译帮助很大 \footnote[1]{笔者并不认同语言学结构对机器翻译的帮助有限,相反机器翻译需要更多的人类先验知识的指导。当然,这个问题不是这里讨论的重点。}
\parinterval 剩下的问题是如何进行句子的切分和结构的分析。思路有很多,一种常用的方法是对问题进行概率化,用统计模型来描述问题并求解。比如,一个句子切分的好坏,并不是非零即一的判断,而是要估计出这种切分的可能性大小,最终选择可能性最大的结果进行输出。这也是一种典型的用统计建模的方式来描述自然语言处理问题。
\parinterval 本章将会对上述问题及方法进行介绍。首先,会用一个例子给出统计建模的基本思路,之后会应用这种方法进行中文分词、语言建模和句法分析。这种统计建模的思想也会在后续章节中使用。
\parinterval 本章将会对上述问题及方法进行介绍。首先,会用一个例子给出统计建模的基本思路,之后会应用这种方法进行中文分词、语言建模和句法分析。
%--概率论基础-----------------------------------------
\section{概率论基础}\index{Chapter2.2}
......@@ -75,7 +75,7 @@
\subsection{随机变量和概率}\index{Chapter2.2.1}
\parinterval 在自然界中,有这样一类具有偶然性的事件,它在一定条件下是否会发生是不确定的。例如,明天会下雨、掷一枚硬币是正面朝上、扔一个骰子的点数是5……这类可能会发生也可能不会发生,通过大量的重复试验,能发现其发生具有某种规律性的事件叫做\textbf{随机事件}
\parinterval \textbf{随机变量}是对随机事件发生可能状态的描述,是随机事件的数量表征。设$\Omega= \{ \omega \}$为一个随机试验的样本空间,X=X$(\omega)$就是定义在样本空间$\omega$上的、取值为实数的单值函数,即X=X$(\omega)$为随机变量,记为X。随机变量是一种能随机选取数值的变量,常用大写的英文字母或希腊字母表示,其取值通常用小写字母来表示。例如,用$A$表示一个随机变量,用$a$表示变量$A$的一个取值。根据随机变量可以选取的值,可以将其划分为离散变量和连续变量。
\parinterval \textbf{随机变量(random variable)}是对随机事件发生可能状态的描述,是随机事件的数量表征。设$\Omega= \{ \omega \}$为一个随机试验的样本空间,X=X$(\omega)$就是定义在样本空间$\omega$上的、取值为实数的单值函数,即X=X$(\omega)$为随机变量,记为X。随机变量是一种能随机选取数值的变量,常用大写的英文字母或希腊字母表示,其取值通常用小写字母来表示。例如,用$A$表示一个随机变量,用$a$表示变量$A$的一个取值。根据随机变量可以选取的值,可以将其划分为离散变量和连续变量。
\parinterval 离散变量是指在其取值区间内可以被一一列举,总数有限并且可计算的数值变量。例如,用随机变量$X$代表某次投骰子出现的点数,点数只可能取1$\sim$6这6个整数,$X$是一个离散变量。
......@@ -103,7 +103,7 @@
\parinterval 除此之外,概率函数$\textrm{P(·)}$还具有非负性、归一性等特点,非负性是指,所有的概率函数$\textrm{P(·)}$都必须是大于等于0的数值,概率函数中不可能出现负数:$\forall{x},\textrm{P}{(x)}\geq{0}$。归一性,又称规范性,简单的说就是所有可能发生的事件的概率总和为一,$\sum_{x}\textrm{P}{(x)}={1}$
\parinterval 对于离散变量$A$$\textrm{P}(A=a)$是个确定的值,可以表示事件$A=a$的可能性大小;而对于连续变量,求在某个定点处的概率是无意义的,只能求其落在某个取值区间内的概率。因此,用概率分布函数$\textrm{F}(x)$和概率密度函数$\textrm{f}(x)$来统一描述随机变量的取值分布情况。概率分布函数$\textrm{F}(x)$取值小于某个值的概率,是概率的累加形式。假设$A$是一个随机变量,$a$是任意实数,将函数$\textrm{F}(a)=\textrm{P}\{A\leq a\}$$-\infty<a<\infty $定义为$A$的分布函数。通过分布函数,我们可以清晰地表示任何随机变量的概率。
\parinterval 对于离散变量$A$$\textrm{P}(A=a)$是个确定的值,可以表示事件$A=a$的可能性大小;而对于连续变量,求在某个定点处的概率是无意义的,只能求其落在某个取值区间内的概率。因此,用\textbf{概率分布函数$\textrm{F}(x)$}\textbf{概率密度函数$\textrm{f}(x)$}来统一描述随机变量的取值分布情况。概率分布函数$\textrm{F}(x)$取值小于某个值的概率,是概率的累加形式。假设$A$是一个随机变量,$a$是任意实数,将函数$\textrm{F}(a)=\textrm{P}\{A\leq a\}$$-\infty<a<\infty $定义为$A$的分布函数。通过分布函数,我们可以清晰地表示任何随机变量的概率。
\parinterval 对于连续变量,我们不能像离散变量一样列出所有的概率取值,而是用概率密度函数来描述分布情况。概率密度函数反映了变量在某个区间内的概率变化快慢,概率密度函数的值是概率的变化率,该连续变量的概率也就是对概率密度函数求积分得到的结果。设$\textrm{f}(x) \geq 0$是连续变量$X$的概率密度函数,$X$的分布函数就可以用$\textrm{F}(X)=\int_{-\infty}^x \textrm{f}(x)dx \ (x\in R)$来表示。
......@@ -118,9 +118,9 @@
%-------------------------------------------
\subsection{联合概率、条件概率和边缘概率}\index{Chapter2.2.2}
\parinterval 联合概率是指多个事件同时发生,每个随机变量满足各自条件的概率,表示为$\textrm{P}(AB)$
\parinterval \textbf{联合概率(joint probability)}是指多个事件同时发生,每个随机变量满足各自条件的概率,表示为$\textrm{P}(AB)$
\parinterval 条件概率是指$A$$B$为任意的两个事件,在事件$A$已出现的前提下,事件$B$出现的概率,使用$\textrm{P}(B \mid A)$表示。通常来说,$\textrm{P}(B \mid A) \neq \textrm{P}(B)$
\parinterval \textbf{条件概率(conditional probability)}是指$A$$B$为任意的两个事件,在事件$A$已出现的前提下,事件$B$出现的概率,使用$\textrm{P}(B \mid A)$表示。通常来说,$\textrm{P}(B \mid A) \neq \textrm{P}(B)$
\parinterval 贝叶斯法则是条件概率计算时的重要依据,条件概率可以表示为
......@@ -131,7 +131,7 @@
\end{eqnarray}
%----------------------------------------------
\parinterval 边缘概率是和联合概率对应的,它指的是$\textrm{P}(X=a)$$\textrm{P}(Y=b)$,即仅与单个随机变量有关的概率称为边缘概率。
\parinterval \textbf{边缘概率(marginal probability)}是和联合概率对应的,它指的是$\textrm{P}(X=a)$$\textrm{P}(Y=b)$,即仅与单个随机变量有关的概率称为边缘概率。
\parinterval 对于离散随机变量$X$$Y$,我们知道$\textrm{P}(X,Y)$,则边缘概率$\textrm{P}(X)$可以通过求和的方式得到,如下式所示
......@@ -173,7 +173,7 @@
\subsection{链式法则}\index{Chapter2.2.3}
\parinterval 由条件概率公式$\textrm{P}(a \mid b)=\textrm{P}(ab)/\textrm{P}(b)$,我们知道条件概率的定义$\textrm{P}(a \mid b)$,其描述的是两个事件$a$$b$,在$b$事件发生的条件下,$a$发生的概率。如果我们将其推广到三个事件$a$$b$$c$,为了计算$\textrm{P}(a,b,c)$我们可以运用两次$\textrm{P}(a \mid b)=\textrm{P}(ab)/\textrm{P}(b)$,计算过程如下:
\parinterval 由条件概率公式$\textrm{P}(a \mid b)=\textrm{P}(ab)/\textrm{P}(b)$反应了事件b发生的条件下事件a发生的概率。如果我们将其推广到三个事件$a$$b$$c$,为了计算$\textrm{P}(a,b,c)$我们可以运用两次$\textrm{P}(a \mid b)=\textrm{P}(ab)/\textrm{P}(b)$,计算过程如下:
%----------------------------------------------
\begin{eqnarray}
......@@ -193,7 +193,7 @@
\end{eqnarray}
%----------------------------------------------
\parinterval 我们可以通过下面这个例子更好的理解链式法则,如图所示,$A$$B$$C$$D$$E$分别代表五个事件,其中,$A$只和$B$有关,$C$只和$B$$D$有关,$E$只和$C$有关,$B$$D$不依赖其他任何事件。则$\textrm{P}(A,B,C,D,E)$的表达式如下式:
\parinterval 我们可以通过下面这个例子更好的理解链式法则,如图所示,$A$$B$$C$$D$\\ $E$分别代表五个事件,其中,$A$只和$B$有关,$C$只和$B$$D$有关,$E$只和$C$有关,$B$\\ $D$不依赖其他任何事件。则$\textrm{P}(A,B,C,D,E)$的表达式如下式:
%----------------------------------------------
% 图2.5
......@@ -245,7 +245,9 @@
\parinterval 举个例子,小张从家到公司有三条路分别为a,b,c,选择每条路的概率分别为0.5,0.3,0.2,那么:
\parinterval $S_a$: 选择a路去上班,$S_b$: 选择b路去上班,$S_c$: 选择c路去上班 $S$:小张去上班,这四件事的关系即为:$S_a$$S_b$$S_c$$S$的划分。
\parinterval $S_a$: 选择a路去上班,$S_b$: 选择b路去上班,$S_c$: 选择c路去上班 $S$:小张去上班
\parinterval 这四件事的关系即为:$S_a$$S_b$$S_c$$S$的划分。
\parinterval 如果三条路不拥堵的概率分别为$\textrm{P}({S_{a}^{'}})$=0.2,$\textrm{P}({S_{b}^{'}})$=0.4,$\textrm{P}({S_{c}^{'}})$=0.7,那么事件L:小张上班没有遇到拥堵情况的概率就是:
%--------------------------------------------
......@@ -260,13 +262,14 @@
\parinterval \textbf{贝叶斯法则(Bayes’ rule)}是概率论中的一个定理,通常用于知$\textrm{P}(A \mid B)$$\textrm{P}(B \mid A)$。其内容如下:
%--------------------------------------------
\parinterval$B_1,…,B_n$是S的一个划分,A为事件,则对于$i=1,…,n$,有如下公式
\begin{eqnarray}
\textrm{P}(B_i \mid A)=\frac {\textrm{P}(A \mid B_i)\textrm{P}(B_i) } { \sum_{k=1}^n\textrm{P}(A \mid B_k)\textrm{P}(B_k) }
\label{eqC2.10}
\end{eqnarray}
\parinterval 下面我们来看看贝叶斯公式的推导。由前面的知识,我们知道条件概率的公式为
\parinterval 来看一下贝叶斯公式的推导。由前面的知识,我们知道条件概率的公式为
\begin{eqnarray}
\textrm{P}(B \mid A)= \frac {\textrm{P}(AB)} {\textrm{P}(A)}
\label{eqC2.11}
......@@ -307,7 +310,7 @@
\subsubsection{(一)信息熵}\index{Chapter2.2.5.1}
\parinterval 熵是热力学中的一个概念,同时也是对系统无序性的一种度量标准,在机器翻译领域,最常用到的是信息熵这一概念。一条信息的信息量大小与它的不确定性有着直接的关系,如果我们需要确认一件非常不确定甚至于一无所知的事情,那么需要理解大量的相关信息才能确认清楚;同样的,如果我们对某件事已经非常确定,那么就不需要太多的信息就可以把它搞清楚。
\parinterval \textbf{熵(entropy)}是热力学中的一个概念,同时也是对系统无序性的一种度量标准,在自然语言处理领域也会使用到信息熵这一概念,比如描述文字的信息量大小。一条信息的信息量大小与它的不确定性有着直接的关系,如果我们需要确认一件非常不确定甚至于一无所知的事情,那么需要理解大量的相关信息才能确认清楚;同样的,如果我们对某件事已经非常确定,那么就不需要太多的信息就可以把它搞清楚。
\begin{example}
确定性和不确定性的事件
......@@ -376,7 +379,7 @@
\section{中文分词}\index{Chapter2.3}
\parinterval 对于机器翻译系统而言,输入的是已经切分好的单词序列,而不是原始的字符串。比如,对于一个中文句子,单词之间是没有间隔的,因此我们需要把一个个的单词切分出来,这样机器翻译系统可以区分不同单元。甚至,我们可以对语言学上的单词进行进一步切分,得到词片段序列(比如:中国人=>中国 人)。我们可以把上述过程看作是一种分词过程,即:将一个输入的自然语言字符串切割成单元序列(token序列),每个单元都对应可以处理的最小单位。
\parinterval 对于机器翻译系统而言,输入的是已经切分好的单词序列,而不是原始的字符串。比如,对于一个中文句子,单词之间是没有间隔的,因此我们需要把一个个的单词切分出来,这样机器翻译系统可以区分不同单元。甚至,我们可以对语言学上的单词进行进一步切分,得到词片段序列(比如:中国人=>中国 人)。我们可以把上述过程看作是一种\textbf{分词(segmentation)}过程,即:将一个输入的自然语言字符串切割成单元序列(token序列),每个单元都对应可以处理的最小单位。
%----------------------------------------------
% 图2.7
......@@ -427,14 +430,14 @@
\parinterval 不过,机器翻译并不仅仅局限在语言学定义的单词,因此机器翻译系统所使用的分词也不仅仅把句子按照词切开,比如,神经机器翻译中广泛使用的BPE子词切分方法,可以被理解为将词的一部分也进行切开,也就是得到词片段送给机器翻译系统使用。比如,对如下英文字符串,可以得到如下切分结果\\
\parinterval Interesting -> Interest/ing selection -> se/lect/ion procession -> pro/cess/ion
\parinterval Interesting \; -> \; Interest/ing selection \;->\;se/lect/ion procession \hspace{0.23em} -> \; pro/cess/ion
\parinterval Interested -> Interest/ed selecting -> se/lect/ing processing -> pro/cess/ing
\parinterval Interested \hspace{0.62em} -> \; Interest/ed selecting \hspace{0.34em} -> \; se/lect/ing processing -> \; pro/cess/ing
\parinterval Interests -> Interest/s selected -> se/lect/ed processed -> pro/cess/ed \\
\parinterval Interests \hspace{1.17em} -> \; Interest/s selected \hspace{1.24em} -> \; se/lect/ed processed \hspace{0.42em} -> \; pro/cess/ed \\
\parinterval 词法分析的重要性在自然语言处理领域已经有共识。句子基本单元切分的颗粒度直接关系到后续系统的性能。如果切分的颗粒度很大,获得的单词的歧义也很小,比如“中华人民共和国”整体作为一个单词不存在歧义,而如果单独的一个单词“国”,可能会代表“中国”、“美国”等不同的国家,存在歧义。但是随着切分颗粒度的增大,特定单词出现的频度也随之降低,低频词容易和噪音混淆,系统很难进行学习。因此,处理这些问题并开发适合翻译任务的分词系统是机器翻译的第一步。
\parinterval 词法分析的重要性在自然语言处理领域已经有共识。如果切分的颗粒度很大,获得的单词的歧义也很小,比如“中华人民共和国”整体作为一个单词不存在歧义,而如果单独的一个单词“国”,可能会代表“中国”、“美国”等不同的国家,存在歧义。但是随着切分颗粒度的增大,特定单词出现的频度也随之降低,低频词容易和噪音混淆,系统很难进行学习。因此,处理这些问题并开发适合翻译任务的分词系统是机器翻译的第一步。
\subsection{基于词典的分词方法}\index{Chapter2.3.1}
......@@ -530,7 +533,7 @@
\label{eqC2.22}
\end{eqnarray}
\parinterval 这里$\theta_1 \sim \theta_5$可以被看作是模型的参数。对于这样的模型,参数确定了,模型也就确定了。但是,新的问题来了,在定义骰子每个面的概率后,如何求出具体的值呢?一种常用的方法是,从大量实例中学习模型参数,这个方法也是常说的参数估计。我们可以将这个不均匀的骰子先实验性的掷很多次,这可以被看作是独立同分布的若干次采样,比如X次,发现“1”出现X1次,“2”出现X2次,以此类推,得到了各个面出现的次数。假设掷骰子中每个面出现的概率符合多项式分布,通过简单的概率论知识可以知道每个面出现概率的极大似然估计为:
\parinterval 这里$\theta_1 \sim \theta_5$可以被看作是模型的参数。对于这样的模型,参数确定了,模型也就确定了。但是,新的问题来了,在定义骰子每个面的概率后,如何求出具体的值呢?一种常用的方法是,从大量实例中学习模型参数,这个方法也是常说的参数估计。我们可以将这个不均匀的骰子先实验性的掷很多次,这可以被看作是独立同分布的若干次采样,比如$X$次,发现“1”出现$X_1$次,“2”出现$X_2$次,以此类推,得到了各个面出现的次数。假设掷骰子中每个面出现的概率符合多项式分布,通过简单的概率论知识可以知道每个面出现概率的极大似然估计为:
\begin{eqnarray}
\textrm{P}("i")=\frac {X_i}{X}
\label{eqC2.23}
......@@ -562,7 +565,7 @@
在这样的预先实验基础上,我们知道如果再次玩掷骰子游戏的话,选则数字“4”获胜的可能性是最大的。
\parinterval 通过上面这个掷骰子的游戏,可以得到一个道理:上帝是不公平的。因为在“公平”的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的“不公平”实际上这是客观事物中蕴含的一种偏置(bias),也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题绝大多数都存在着偏置。比如,我们翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。我们设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\parinterval 通过上面这个掷骰子的游戏,可以得到一个道理:\textbf{上帝是不公平的}。因为在“公平”的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的“不公平”实际上这是客观事物中蕴含的一种\textbf{偏置(bias)},也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题绝大多数都存在着偏置。比如,我们翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。我们设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\subsubsection{全概率分词方法}\index{Chapter2.3.2.3}
......@@ -576,7 +579,7 @@
\end{itemize}
\vspace{0.5em}
\parinterval 如果把投掷这个新的骰子,可能会得到这样的结果,
\parinterval 如果把投掷这个新的骰子,可能会得到\ref{figureC2.14}这样的结果,
%----------------------------------------------
% 图2.14
......@@ -664,14 +667,14 @@
\parinterval 当然,真正的分词系统还需要解决很多其它问题,比如使用动态规划等方法高效搜索最优解以及如何处理未见过的词等等,由于本节的重点是介绍中文分词的基础方法和统计建模思想,因此无法覆盖所有中文分词的技术内容,有兴趣的读者可以参考2.6节的相关文献做进一步深入研究。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{$n$-gram语言模型 }\index{Chapter2.4}
\section{语言建模 }\index{Chapter2.4}
\parinterval 在基于统计的汉语分词模型中,我们通过“大题小做”的技巧,利用独立性假设把整个句子的单词切分概率转化为每个单个词出现概率的乘积。这里,每个单词也被称作1-gram(或uni-gram),而1-gram概率的乘积实际上也是在度量词序列出现的可能性(记为$\textrm{P}(w_1 w_2...w_m)$)。这种计算整个单词序列概率$\textrm{P}(w_1 w_2...w_m)$的方法被称为统计语言模型。1-gram语言模型是最简单的一种语言模型,它没有考虑任何的上下文。很自然的一个问题是:能否考虑上下文信息构建更强大的语言模型,进而得到跟准确的分词结果。下面我们将进一步介绍更加通用的$n$-gram语言模型,它在机器翻译及其它自然语言处理任务中有更加广泛的应用。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{基于n-gram的语言建模}\index{Chapter2.4.1}
\subsection{$n$-gram语言模型}\index{Chapter2.4.1}
\parinterval 语言模型的目的是描述文字序列出现的规律。如果使用统计建模的方式,语言模型可以被定义为计算$\textrm{P}(w_1 w_2...w_m)$,也就是计算整个词序列$w_1 w_2...w_m$出现的可能性大小。具体定义如下,
\parinterval \textbf{语言模型(language model)}的目的是描述文字序列出现的规律。这个对问题建模的过程被称作\textbf{语言建模(language modeling)}。如果使用统计建模的方式,语言模型可以被定义为计算$\textrm{P}(w_1 w_2...w_m)$,也就是计算整个词序列$w_1 w_2...w_m$出现的可能性大小。具体定义如下,
%----------------------------------------------
% 定义3.1
......@@ -761,7 +764,7 @@ $\textrm{P}(w_m|w_1 ... w_{m-1})$ & $\textrm{P}(w_m)$ & $\textrm{P}(w_m|w_{m-1})
\label{eq:2.4.1.5}
\end{eqnarray}
\parinterval 显然,这个结果是不能接受的。因为即使语料中没有 “确实”和“现在”两个词连续出现,但是这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个切分结果的概率为0。更常见的问题是那些根本没有出现在词表中的词,称为未登录词(Out-of-Vocabulary, OOV),比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0概率。图\ref{fig:2.4.1.1}展示了词语出现频度的分布,可以看到绝大多数词都是低频词。
\parinterval 显然,这个结果是不能接受的。因为即使语料中没有 “确实”和“现在”两个词连续出现,但是这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个切分结果的概率为0。更常见的问题是那些根本没有出现在词表中的词,称为\textbf{未登录词(Out-of-Vocabulary, OOV)},比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0概率。图\ref{fig:2.4.1.1}展示了词语出现频度的分布,可以看到绝大多数词都是低频词。
%----------------------------------------------
% 图2.4.1.1
......@@ -776,7 +779,7 @@ $\textrm{P}(w_m|w_1 ... w_{m-1})$ & $\textrm{P}(w_m)$ & $\textrm{P}(w_m|w_{m-1})
\parinterval 为了解决未登录词引起的零概率问题,常用的做法是对模型进行平滑处理,也就是给可能出现的情况一个非零的概率,使得模型不会对整个序列给出零概率。平滑可以用“劫富济贫”这一思想理解,在保证所有情况的概率和为1的前提下,使极低概率的部分可以从高概率的部分分配一部分概率,从而达到平滑的目的。
\parinterval 语言模型使用的平滑算法有很多,比如、加法平滑方法、古德-图灵估计法、Katz平滑法等。在本节中,主要介绍三种平滑方法:加法平滑法、古德-图灵估计法和Kneser-Ney平滑。
\parinterval 语言模型使用的平滑算法有很多,比如、加法平滑方法、古德-图灵估计法、Katz平滑法等。在本节中,主要介绍三种平滑方法:加法平滑法、古德-图灵估计法和Kneser-Ney平滑。这些方法也可以被使用到机器翻译中其它模型的概率平滑任务中。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{加法平滑方法}\index{Chapter2.4.2.1}
......@@ -790,9 +793,9 @@ $\textrm{P}(w_m|w_1 ... w_{m-1})$ & $\textrm{P}(w_m)$ & $\textrm{P}(w_m|w_{m-1})
\label{eq:2.4.1.6}
\end{eqnarray}
\parinterval 为了避免这种由于数据所产生的评估预测概率为0的问题,采用“数据平滑”的方式对最大似然估计方法进行调整。通常的平滑方法都是为了提高低概率(如零概率),或者降低高概率,这种做法的思想比较类似于“劫富济贫”。
%\parinterval 为了避免这种由于数据所产生的评估预测概率为0的问题,采用“数据平滑”的方式对最大似然估计方法进行调整。通常的平滑方法都是为了提高低概率(如零概率),或者降低高概率,这种做法的思想比较类似于“劫富济贫”。
\parinterval 加法平滑方法(additive smoothing)假设每个n元语法出现的次数比实际统计次数多$\theta$次,$0 \leqslant\theta\leqslant 1$,使得分子部分不为0,那么计算前文例子“确实 现在”的概率时,可以使用如下方法计算。
\parinterval 加法平滑方法(additive smoothing)假设每个$n$-gram出现的次数比实际统计次数多$\theta$次,$0 \leqslant\theta\leqslant 1$,使得分子部分不为0,那么计算前文例子“确实 现在”的概率时,可以使用如下方法计算。
\begin{eqnarray}
\textrm{P}(\textrm{现在}|\textrm{确实}) = \frac{\theta + count(\textrm{确实}\,\textrm{现在})}{\sum_{w}^{|V|}(\theta + count(\textrm{确实}w))} = \frac{\theta + count(\textrm{确实}\,\textrm{现在})}{\theta{|V|} + count(\textrm{确实})}
......@@ -801,7 +804,7 @@ $\textrm{P}(w_m|w_1 ... w_{m-1})$ & $\textrm{P}(w_m)$ & $\textrm{P}(w_m|w_{m-1})
\parinterval 这里面$V$表示所有词汇的词表,$|V|$为词表中单词的个数,$w$为词典中的词。常见的加法平滑方法会将$\theta$取1,这时我们又称为加一平滑或是拉普拉斯平滑。这种方法比较容易理解,也比较简单,但是一些人认为这种方法的表现较差,因此,其实际的使用效果还要视具体情况而定。
\parinterval 举一个例子来形象的描述加法平滑方法。假设在一个英文文档中随机抽取词汇,已经抽到的词包括12个,词典大小$|V|$=20,已抽到的词汇统计结果为:4 look,3 people,2 am,1 what,1 want,1 do。为了更形象的描述在平滑之前和平滑之后的概率分布的区别,如图所示
\parinterval 举一个例子来形象的描述加法平滑方法。假设在一个英文文档中随机抽取词汇,已经抽到的词包括12个,词典大小$|V|$=20,已抽到的词汇统计结果为:4 look,3 people,2 am,1 what,1 want,1 do。为了更形象的描述在平滑之前和平滑之后的概率分布的区别,可以参考下图\ref{fig:2.4.1.2}的示例
%----------------------------------------------
% 图2.19
......@@ -888,7 +891,7 @@ N = \sum_{r>0}{p_r n_r} = 1 - \frac{n_1}{N} < 1
\parinterval 假设我们使用2-gram和1-gram的插值模型预测下面句子中“[BLANK]”处的词:“I can’t see without my reading [BLANK]”,直觉上我们会猜测这个地方的词应该是glasses,但是在训练语料库中Francisco出现的频率非常高。如果在预测时仍然使用的是标准的1-gram模型,那么计算机会由于高概率选择Francisco填入句子的空白处,这结果明显是不合理的。当使用的是混合的插值模型时,如果reading Francisco这种二元语法并没有出现在语料中,就会导致1-gram对结果的影响变大,使得仍然会做出与标准1-gram模型相同的结果,犯下相同的错误。
\parinterval 观察语料的二元语法发现,Francisco的前一个词仅是San,不会出现reading。这个分析提醒了我们,考虑前一个词的影响是有帮助的,比如仅在前一个词时San时,我们才给Francisco赋予一个较高的概率值。基于这种想法,改进原有的1-gram模型,创造一个新的1-gram模型$\textrm{P}_{\textrm{continuation}}$(简写为$\textrm{P}_{\textrm{cont}}$,使这个模型可以通过考虑前一个词的影响评估了当前词作为第二个词出现的可能性。
\parinterval 观察语料的二元语法发现,Francisco的前一个词仅是San,不会出现reading。这个分析提醒了我们,考虑前一个词的影响是有帮助的,比如仅在前一个词时San时,我们才给Francisco赋予一个较高的概率值。基于这种想法,改进原有的1-gram模型,创造一个新的1-gram模型$\textrm{P}_{\textrm{continuation}}$,使这个模型可以通过考虑前一个词的影响评估了当前词作为第二个词出现的可能性。
\parinterval 为了评估$\textrm{P}_{cont}$,统计使用当前词作为第二个词所出现二元语法的种类,二元语法种类越多,这个词作为第二个词出现的可能性越高,呈正比:
......@@ -934,15 +937,13 @@ N = \sum_{r>0}{p_r n_r} = 1 - \frac{n_1}{N} < 1
\label{eq:2.4.1.17}
\end{eqnarray}
\noindent 其中
\noindent 其中continuationcount$(\cdot)$表示的是基于某个单个词作为第$n$个词的$n$元语法的种类数目。
\begin{eqnarray}
\lambda(w_{i-1}) & = & \frac{d}{c_{\textrm{KN}}(w_{i-n+1}^{i-1})}|\{w:c_{\textrm{KN}}(w_{i-n+1}...w_{i-1}w)>0\}| \label{eq:2.4.1.17new} \\
c_{\textrm{KN}}(\cdot) & = & \begin{cases} \textrm{count}(\cdot)\quad for\ the\ highest\ order \\ \textrm{continuationcount}(\cdot)\quad for\ lower\ order \end{cases} \label{eq:2.4.1.17new2}
\end{eqnarray}
\noindent 这里continuationcount$(\cdot)$表示的是基于某个单个词作为第$n$个词的$n$元语法的种类数目。
\parinterval 我们前面提到Kneser-Ney Smoothing 是当前一个标准的、广泛采用的、先进的平滑算法。还有很多基于此为基础衍生出来的算法,有兴趣的读者可以查找更多资料了解。\cite{parsing2009speech}\cite{ney1994structuring}\cite{chen1999empirical}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......@@ -1106,7 +1107,7 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\end{figure}
%-------------------------------------------
\parinterval 通常,可以把推导简记为$\textrm{d}=r_1,r_2,…,r_n$,其中$ \cdot $表示规则的组合。显然,$\textrm{d}$也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用和生成的字符串对应起来。一个推导所生成的字符串,也被称作文法的一个句子。而一个文法所能生成的所有句子是这个文法所对应的语言。
\parinterval 通常,可以把推导简记为$\textrm{d}=r_1 \circ r_2 \circ\circ r_n$,其中$ \circ $表示规则的组合。显然,$\textrm{d}$也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用和生成的字符串对应起来。一个推导所生成的字符串,也被称作文法的一个句子。而一个文法所能生成的所有句子是这个文法所对应的语言。
\parinterval 但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导与之对应,我们称为歧义。甚至同一棵句法树,也可以对应不同的推导。图\ref{fig:2.5.2.4}给出一个同一棵句法树所对应的两种不同的规则推导。
%-------------------------------------------
......
......@@ -2,7 +2,7 @@
\begin{tikzpicture}
{
{\footnotesize
\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$)}};
......@@ -27,11 +27,9 @@
%% 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) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line2highlight) at (line2.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line3highlight) at (line3.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line5highlight) at (line5.west) {};
}
%\end{pgfonlayer}
......@@ -42,20 +40,20 @@
%% remark 1
\begin{scope}
{
\node [anchor=north west,align=left] (remark1) at ([xshift=0.4in]algorithm.north east) {获取每个单词\\的翻译候选};
{\footnotesize
\node [anchor=north west,align=left] (remark1) at ([xshift=0.6in,yshift=-1em]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,red] (s1) at ([yshift=-0.3em,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$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,red,fill=red] (t1) at ([yshift=-2.2em]s1.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,ugreen,fill=ugreen] (t2) at ([yshift=-2.2em]s2.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,orange,fill=orange] (t3) at ([yshift=-2.2em]s3.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,ublue,fill=ublue] (t4) at ([yshift=-2.2em]s4.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,purple,fill=purple] (t5) at ([yshift=-2.2em]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);
......@@ -65,7 +63,7 @@
\begin{pgfonlayer}{background}
{
\node[rectangle,draw,inner sep=0.2em,fill=blue!10] [fit = (remark1) (t5)] (remark1label) {};
\node[rectangle,draw,inner sep=0.2em,fill=blue!10,minimum width=2.4in] [fit = (remark1) (s1) (t5)] (remark1label) {};
}
\end{pgfonlayer}
}
......@@ -74,27 +72,16 @@
%% 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$用于保存当前最好的翻译结果};
{\footnotesize
\node [anchor=north west,draw,inner sep=2pt,fill=blue!10,minimum width=2.4in] (remark2) at ([yshift=-0.5em]remark1label.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$用于保存每步生成的所有译文候选};
{\footnotesize
\node [anchor=north west,draw,inner sep=2pt,fill=blue!10,minimum width=2.4in] (remark3) at ([yshift=-0.5em]remark2.south west) {$h$用于保存每步生成的所有译文候选};
}
\end{scope}
%% end of remark 3
......@@ -102,10 +89,8 @@
{
\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);
\draw [->,thick] (line3highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.6em]remark2.south west);
\draw [->,thick] (line5highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.6em]remark3.south west);
}
}
......@@ -116,3 +101,27 @@
......@@ -5,7 +5,7 @@
\begin{tikzpicture}
{
{\footnotesize
\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$)}};
......@@ -30,20 +30,12 @@
%% 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) {};
}
{
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=2.21in] (line8highlight) at (line8.west) {};
}
{
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=2.21in] (line9highlight) at (line9.west) {};
}
{
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=2.21in] (line10highlight) at (line10.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line2highlight) at (line2.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line3highlight) at (line3.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line5highlight) at (line5.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line8highlight) at (line8.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line9highlight) at (line9.west) {};
\node[anchor=west,fill=blue!20,minimum height=0.16in,minimum width=1.85in] (line10highlight) at (line10.west) {};
}
%\end{pgfonlayer}
......@@ -53,20 +45,20 @@
%% remark 1
\begin{scope}
{
\node [anchor=north west,align=left] (remark1) at ([xshift=0.4in]algorithm.north east) {获取每个单词\\的翻译候选};
{\footnotesize
\node [anchor=north west,align=left] (remark1) at ([xshift=0.6in,yshift=-0.8em]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,red] (s1) at ([yshift=-0.3em,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$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,red,fill=red] (t1) at ([yshift=-2.2em]s1.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,ugreen,fill=ugreen] (t2) at ([yshift=-2.2em]s2.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,orange,fill=orange] (t3) at ([yshift=-2.2em]s3.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,ublue,fill=ublue] (t4) at ([yshift=-2.2em]s4.center) {{\color{white} $n$}};
\node [anchor=center,draw,thick,circle,minimum size=0.3em,inner sep=2pt,purple,fill=purple] (t5) at ([yshift=-2.2em]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);
......@@ -76,7 +68,7 @@
\begin{pgfonlayer}{background}
{
\node[rectangle,draw,inner sep=0.2em,fill=blue!10] [fit = (remark1) (t5)] (remark1label) {};
\node[rectangle,draw,inner sep=0.2em,fill=blue!10,minimum width=2.4in] [fit = (remark1) (s1) (t5)] (remark1label) {};
}
\end{pgfonlayer}
}
......@@ -85,24 +77,24 @@
%% 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$用于保存当前最好的翻译结果};
{\footnotesize
\node [anchor=north west,draw,inner sep=2pt,fill=blue!10,minimum width=2.4in] (remark2) at ([yshift=-0.5em]remark1label.south west) {$best$用于保存当前最好的翻译结果};
}
\end{scope}
%% end of remark 2
%% remark 3
\begin{scope}
{
\node [anchor=north west,draw,inner sep=2pt,fill=blue!10] (remark3) at ([yshift=-0.5em]remark2.south west) {$h$用于保存每步生成的所有译文候选};
{\footnotesize
\node [anchor=north west,draw,inner sep=2pt,fill=blue!10,minimum width=2.4in] (remark3) at ([yshift=-0.5em]remark2.south west) {$h$用于保存每步生成的所有译文候选};
}
\end{scope}
%% end of remark 3
%% remark 4
\begin{scope}
{
\node [anchor=north west,inner sep=2pt,align=left] (remark4) at ([xshift=0.25em,yshift=-0.6em]remark3.south west) {\textsc{Join}($a,b$) 返回\\$a$$b$ 的所有组合};
{\footnotesize
\node [anchor=north west,inner sep=2pt,align=left] (remark4) at ([xshift=0.7em,yshift=-0.8em]remark3.south west) {\textsc{Join}($a,b$) 返回\\$a$$b$ 的所有组合};
{
\node [anchor=north west,inner sep=1pt,align=center,draw] (a1) at ([yshift=-0.2em]remark4.north east) {a1\\a2};
......@@ -114,7 +106,7 @@
\begin{pgfonlayer}{background}
{
\node[rectangle,draw,inner sep=2pt,fill=blue!10] [fit = (remark4) (result)] (remark4label) {};
\node[rectangle,draw,inner sep=2pt,fill=blue!10,minimum width=2.4in] [fit = (remark4) (result)] (remark4label) {};
}
\end{pgfonlayer}
}
......@@ -123,9 +115,9 @@
%% remark 5
\begin{scope}
{
\node [anchor=north west,align=left] (remark5) at ([xshift=0.0em,yshift=-1.3em]remark4.south west) {\textsc{PruneForTop1}\\保留得分最高的结果};
\node [anchor=west,draw,inner sep=1pt] (s1) at ([yshift=-0.5em,xshift=1.2em]remark5.north east){0.234};
{\footnotesize
\node [anchor=north west,align=left] (remark5) at ([xshift=0.3em,yshift=-1.6em]remark4.south west) {\textsc{PruneForTop1}\\保留得分最高的结果};
\node [anchor=west,draw,inner sep=1pt] (s1) at ([yshift=-0.2em,xshift=1.2em]remark5.north east){0.234};
\node [anchor=north west,draw,inner sep=1pt] (s2) at ([yshift=-0.2em]s1.south west){0.197};
\node [anchor=north west,draw,inner sep=1pt] (s3) at ([yshift=-0.2em]s2.south west){0.083};
......@@ -134,7 +126,7 @@
\begin{pgfonlayer}{background}
{
\node[rectangle,draw,inner sep=0.2em,fill=blue!10] [fit = (remark5) (s3) (top1)] (remark5label) {};
\node[rectangle,draw,inner sep=0.2em,fill=blue!10,minimum width=2.4in] [fit = (remark5) (s3) (top1)] (remark5label) {};
}
\end{pgfonlayer}
}
......@@ -143,8 +135,8 @@
%% remark 6
\begin{scope}
{
\node [anchor=north west,align=left] (remark6) at ([xshift=0.0em,yshift=-1.3em]remark5.south west) {记录已经翻译过\\的源语单词};
{\footnotesize
\node [anchor=north west,align=left] (remark6) at ([xshift=-0.3em,yshift=-1.3em]remark5.south west) {记录已经翻译过\\的源语单词};
\node [anchor=west,draw,thick,circle,minimum size=0.3em,inner sep=2.1pt,red] (s1) at ([yshift=-1.3em,xshift=0.5em]remark6.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};
......@@ -157,7 +149,7 @@
\begin{pgfonlayer}{background}
{
\node[rectangle,draw,inner sep=0.2em,fill=blue!10] [fit = (remark6) (s5)] (remark6label) {};
\node[rectangle,draw,inner sep=0.2em,fill=blue!10,minimum width=2.4in] [fit = (remark6) (s5)] (remark6label) {};
}
\end{pgfonlayer}
}
......@@ -168,17 +160,17 @@
\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);
\draw [->,thick] (line3highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.0em]remark2.west);
\draw [->,thick] (line5highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.0em]remark3.west);
}
{
\draw [->,thick] (line8highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.5em]remark4label.west);
\draw [->,thick] (line8highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=1.2em]remark4label.south west);
}
{
\draw [->,thick] (line9highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.5em]remark5label.west);
\draw [->,thick] (line9highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=1.6em]remark5label.south west);
}
{
\draw [->,thick] (line10highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.5em]remark6label.south west);
\draw [->,thick] (line10highlight.east) ..controls +(east:1em) and +(west:1em).. ([yshift=0.0em]remark6label.west);
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论