Commit 1b18dab4 by 曹润柘

合并分支 'master' 到 'caorunzhe'

Master

查看合并请求 !85
parents e7b34e08 29939616
...@@ -772,13 +772,13 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll} ...@@ -772,13 +772,13 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{训练}}\index{训练}(Training\index{Training}):从训练数据上获得语言模型的参数; \item {\small\bfnew{训练}}\index{训练}(Training\index{Training}):从训练数据上估计出语言模型的参数;
\vspace{0.5em} \vspace{0.5em}
\item {\small\bfnew{预测}}\index{预测}(Prediction\index{Prediction}):用训练好的语言模型对新输入的句子进行评价,或者生成新的句子。 \item {\small\bfnew{预测}}\index{预测}(Prediction\index{Prediction}):用训练好的语言模型对新输入的句子进行概率评估,或者生成新的句子。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 模型训练的内容已经在前文进行了介绍,这里重点讨论语言模型的预测。实际上,预测是统计自然语言处理中的常用概念。比如,深度学习中的{\small\bfnew{推断}}\index{推断}(Inference\index{Inference})、统计机器翻译中的{\small\bfnew{解码}}\index{解码}(Decoding\index{Decoding})本质上都是预测。具体到语言建模的问题上,预测往往对应两类问题: \parinterval 模型训练的内容已经在前文进行了介绍,这里重点讨论语言模型的预测。实际上,预测是统计自然语言处理中的常用概念。比如,深度学习中的{\small\bfnew{推断}}\index{推断}(Inference\index{Inference})、统计机器翻译中的{\small\bfnew{解码}}\index{解码}(Decoding\index{Decoding})本质上都是预测。具体到语言建模的问题上,预测通常对应两类问题:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -801,14 +801,14 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll} ...@@ -801,14 +801,14 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\hspace{10em} The boy caught \ \ \underline{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ } \hspace{10em} The boy caught \ \ \underline{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }
\vspace{0.8em} \vspace{0.8em}
下划线的部分是缺失的内容,现在要将缺失的部分生成出来。理论上,所有可能的单词串都可以构成缺失部分的内容。这时可以使用语言模型得到所有可能词串构成句子的概率,之后找到概率最高的词串作为缺失部分的内容 下划线的部分是缺失的内容,现在要将缺失的部分生成出来。理论上,所有可能的单词串都可以构成缺失部分的内容。这时可以使用语言模型得到所有可能词串构成句子的概率,之后找到概率最高的词串填入下划线处
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 从词序列建模的角度看,这两类预测问题本质上是一样的。因为,它们都在使用语言模型对单词序列进行概率评估。但是,从实现上看,单词序列生成更难。因为,它不仅要对所有可能的词序列进行打分,同时要“找到”最好的词序列。由于潜在的词序列不计其数,因此这个“找”最优词序列的过程并不简单。 \parinterval 从词序列建模的角度看,这两类预测问题本质上是一样的。因为,它们都在使用语言模型对词序列进行概率评估。但是,从实现上看,词序列的生成问题更难。因为,它不仅要对所有可能的词序列进行打分,同时要“找到”最好的词序列。由于潜在的词序列不计其数,因此这个“找”最优词序列的过程并不简单。
\parinterval 实际上,生成最优词序列的问题也对应着自然语言处理中的一大类问题\ \dash\ {\small\bfnew{序列生成}}\index{序列生成}(Sequence Generation)\index{Sequence Generation}。机器翻译就是一个非常典型的序列生成问题:在机器翻译任务中,需要根据源语言序列直接生成与之相对应的目标语言序列。但是语言模型本身并不能“制造”单词序列的。因此,严格地说,序列生成问题的本质并非是语言模型凭空“生成”序列,而是使用语言模型在所有候选的单词序列中“找出”最佳序列。这个过程对应着经典的{\small\bfnew{搜索问题}}\index{搜索问题}(Search Problem)\index{Search Problem}。下面将着重介绍序列生成背后的问题建模方法,以及在序列生成里常用的搜索技术。 \parinterval 实际上,生成最优词序列的问题也对应着自然语言处理中的一大类问题\ \dash\ {\small\bfnew{序列生成}}\index{序列生成}(Sequence Generation)\index{Sequence Generation}。机器翻译就是一个非常典型的序列生成问题:在机器翻译任务中,需要根据源语言词序列生成与之相对应的目标语言词序列。但是语言模型本身并不能“制造”单词序列的。因此,严格地说,序列生成问题的本质并非让语言模型凭空“生成”序列,而是使用语言模型在所有候选的单词序列中“找出”最佳序列。这个过程对应着经典的{\small\bfnew{搜索问题}}\index{搜索问题}(Search Problem)\index{Search Problem}。下面将着重介绍序列生成背后的建模方法,以及在序列生成里常用的搜索技术。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -816,17 +816,18 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll} ...@@ -816,17 +816,18 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\subsection{搜索问题的建模} \subsection{搜索问题的建模}
\parinterval 具体来说,基于语言模型的序列生成问题的本质是在无数任意排列的单词序列中搜索出最合理、最流畅的“最优解”。这里单词序列$w = w_1 w_2 \ldots w_m$的合理性和流畅性可以通过语言模型的打分$\funp{P}(w)$衡量。因此在序列生成任务中,基于语言模型的搜索问题可以被建模为如下形式: \parinterval 基于语言模型的序列生成问题可以被定义为:在无数任意排列的单词序列中找到概率最高的序列。这里单词序列$w = w_1 w_2 \ldots w_m$的语言模型得分$\funp{P}(w)$度量了这个序列的合理性和流畅性。在序列生成任务中,基于语言模型的搜索问题可以被描述为:
\begin{eqnarray} \begin{eqnarray}
w^{'} = \argmax_{w \in \chi}\funp{P}(w) \hat{w} = \argmax_{w \in \chi}\funp{P}(w)
\label{eq:2-40} \label{eq:2-40}
\end{eqnarray} \end{eqnarray}
\parinterval 这里$\arg$即argument,$\argmax_{w \in \chi}\funp{P}(w)$表示想要找到使语言模型得分$\funp{P}(w)$达到最大的单词序列$w$$\chi$是搜索问题的解空间 \footnote[1]{解空间,是一个算法执行后,所得到的所有解构成的集合。},它是所有可能的单词序列$w$的集合。$w^{'}$可以被看做该搜索问题中的“最优解”,即“出现概率最大的单词序列” \noindent 这里$\arg$即argument(参数),$\argmax_x f(x)$表示返回使$f(x)$达到最大的$x$$\argmax_{w \in \chi}\funp{P}(w)$表示找到使语言模型得分$\funp{P}(w)$达到最大的单词序列$w$$\chi$ 是搜索问题的解空间,它是所有可能的单词序列$w$的集合。$\hat{w}$可以被看做该搜索问题中的“最优解”,即概率最大的单词序列
\parinterval 在序列生成任务中,最简单的策略就是对词表中的词汇进行任意组合,通过这种枚举的方式得到全部可能的序列。但是,很多时候并没有预先指定生成序列的长度。比如,机器翻译中目标语序列的长度是无法预先知道的。那么怎样判断一个序列何时完成了生成过程呢?回顾人类书写文字的过程可以发现,句子的生成首先从一片空白开始,然后从左到右逐词生成,除了第一个单词,所有单词的生成都依赖于前面已经生成的单词。为了方便计算机实现,通常定义单词序列从一个特殊的符号<sos>后开始生成。同样地,一个单词序列的结束也用一个特殊的符号<eos>来表示。 \parinterval 在序列生成任务中,最简单的策略就是对词表中的词汇进行任意组合,通过这种枚举的方式得到全部可能的序列。但是,很多时候并生成序列的长度是无法预先知道的。比如,机器翻译中目标语序列的长度是任意的。那么怎样判断一个序列何时完成了生成过程呢?这里借用人类书写中文和英文的过程:句子的生成首先从一片空白开始,然后从左到右逐词生成,除了第一个单词,所有单词的生成都依赖于前面已经生成的单词。为了方便计算机实现,通常定义单词序列从一个特殊的符号<sos>后开始生成。同样地,一个单词序列的结束也用一个特殊的符号<eos>来表示。
\parinterval 对于一个序列$<$sos$>$\ \ I\ \ agree\ \ $<$eos$>$,图\ref{fig:2-13}展示语言模型视角该序列的生成过程。该过程通过在序列的末尾不断附加词表中的单词来逐渐扩展序列,直到这段序列结束。这种生成单词序列的过程被称作{\small\bfnew{自左向右生成}}\index{自左向右生成}(Left-To-Right Generation)\index{Left-To-Right Generation} \parinterval 对于一个序列$<$sos$>$\ \ I\ \ agree\ \ $<$eos$>$,图\ref{fig:2-13}展示语言模型视角下该序列的生成过程。该过程通过在序列的末尾不断附加词表中的单词来逐渐扩展序列,直到这段序列结束。这种生成单词序列的过程被称作{\small\bfnew{自左向右生成}}\index{自左向右生成}(Left-To-Right Generation)\index{Left-To-Right Generation}。注意,这种序列生成策略与$n$-gram的思想天然契合,因为$n$-gram语言模型中,每个词的生成概率依赖前面(左侧)若干词,因此$n$-gram语言模型也是一种自左向右的计算模型
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -837,7 +838,10 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -837,7 +838,10 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 在这种序列生成方式的基础上,实现对候选序列的搜索过程通常有两种方法\ \dash\ 深度优先遍历和宽度优先遍历\upcite{DBLP:books/mg/CormenLR89}。在深度优先遍历中,每次从词表中可重复地选择一个单词,然后从左至右地生成序列,直到<eos>被选择,此时一个完整的单词序列被生成出来。然后从<eos>回退到上一个单词,选择之前词表中未被选择到的候选单词代替<eos>,并继续挑选下一个单词直到<eos>被选到,如果上一个单词的所有可能都被枚举过,那么回退到上上一个单词继续枚举,直到回退到<sos>,这时候枚举结束。在宽度优先遍历中,每次不是只选择一个单词而是枚举所有单词。一个简单的例子是一个只有两个单词\{a, b\}的词表,从<sos>开始枚举所有单词,可以生成: \parinterval 在这种序列生成方式的基础上,实现搜索通常有两种方法\ \dash\ 深度优先遍历和宽度优先遍历\upcite{DBLP:books/mg/CormenLR89}。在深度优先遍历中,每次从词表中可重复地选择一个单词,然后从左至右地生成序列,直到<eos>被选择,此时一个完整的单词序列被生成出来。然后从<eos>回退到上一个单词,选择之前词表中未被选择到的候选单词代替<eos>,并继续挑选下一个单词直到<eos>被选到,如果上一个单词的所有可能都被枚举过,那么回退到上上一个单词继续枚举,直到回退到<sos>,这时候枚举结束。在宽度优先遍历中,每次不是只选择一个单词,而是枚举所有单词。
有一个一个简单的例子。假设词表只含两个单词\{a, b\},从<sos>开始枚举所有单词,有三种可能:
\begin{eqnarray} \begin{eqnarray}
\text{\{<sos> a, <sos> b, <sos> <eos>\}} \nonumber \text{\{<sos> a, <sos> b, <sos> <eos>\}} \nonumber
\end{eqnarray} \end{eqnarray}
...@@ -864,16 +868,19 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -864,16 +868,19 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\end{itemize} \end{itemize}
\parinterval 当任务对单词序列长度没有限制时,上述两种方法枚举出的单词序列也是无穷无尽的。因此这两种枚举策略并不具备完备性而且会导致枚举过程无法停止。由于日常生活中通常不会见到特别长的句子,因此可以通过限制单词序列的最大长度来避免这个问题。一旦单词序列的最大长度被确定,以上两种枚举策略就可以在一定时间内枚举出所有可能的单词序列,因而一定可以找到最优的单词序列,即具备最优性。 \parinterval 当任务对单词序列长度没有限制时,上述两种方法枚举出的单词序列也是无穷无尽的。因此这两种枚举策略并不具备完备性而且会导致枚举过程无法停止。由于日常生活中通常不会见到特别长的句子,因此可以通过限制单词序列的最大长度来避免这个问题。一旦单词序列的最大长度被确定,以上两种枚举策略就可以在一定时间内枚举出所有可能的单词序列,因而一定可以找到最优的单词序列,即具备最优性。
\parinterval 此时上述生成策略虽然可以满足完备性和最优性,但其仍然算不上是优秀的生成策略,因为这两种算法在时间复杂度和空间复杂度上的表现很差,如表\ref{tab:2-3}所示。其中$|V|$为词表大小,$m$ 为序列长度值得注意的是,在之前的遍历过程中,除了在序列开头一定会挑选<sos>之外,其他位置每次可挑选的单词并不只有词表中的单词,还有结束符号<eos>,因此实际上生成过程中每个位置的单词候选数量为$|V|+1$
\vspace{0.5em} \vspace{0.5em}
%------------------------------------------------------ %------------------------------------------------------
\begin{table}[htp]{ \begin{table}[htp]{
\begin{center} \begin{center}
\caption{枚举的两种实现方式比较} \caption{枚举的两种实现方式比较}
{ {
\begin{tabular}{c|c|c|c|c} \begin{tabular}{c|c|c}
\rule{0pt}{10pt} & 完备性 & 最优性 & 时间复杂度 & 空间复杂度\\ \hline \rule{0pt}{10pt} & 时间复杂度 & 空间复杂度\\ \hline
\rule{0pt}{10pt} 深度优先 & $\surd^{\ast}$ & $\surd^{\ast}$ & $\textrm{O}({(|V|+1)}^{m-1})$ & $\textrm{O}(m)$ \\ \rule{0pt}{10pt} 深度优先 & $\textrm{O}({(|V|+1)}^{m-1})$ & $\textrm{O}(m)$ \\
\rule{0pt}{10pt} 宽度优先 & $\surd$ & $\surd^{\ast}$ & $\textrm{O}({(|V|+1)}^{m-1}$) & $\textrm{O}({(|V|+1)}^{m})$ \\ \rule{0pt}{10pt} 宽度优先 & $\textrm{O}({(|V|+1)}^{m-1}$) & $\textrm{O}({(|V|+1)}^{m})$ \\
\end{tabular} \end{tabular}
\label{tab:2-3} \label{tab:2-3}
} }
...@@ -881,9 +888,7 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -881,9 +888,7 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
}\end{table} }\end{table}
%------------------------------------------------------ %------------------------------------------------------
\parinterval 此时上述生成策略虽然可以满足完备性和最优性,但其仍然算不上是优秀的生成策略,因为这两种算法在时间复杂度和空间复杂度上的表现很差,如表\ref{tab:2-3}所示。其中$|V|$为词表大小,$m$为序列长度,$\ast$表示“当且仅当在单词序列的最大长度被确定”。值得注意的是,在之前的遍历过程中,除了在序列开头一定会挑选<sos>之外,其他位置每次可挑选的单词并不只有词表中的单词,还有结束符号<eos>,因此实际上生成过程中每个位置的单词候选数量为$|V|+1$ \parinterval 那么是否有比枚举策略更高效的方法呢?答案是肯定的。一种直观的方法是将搜索的过程表示成树型结构,称为解空间树。它包含了搜索过程中可生成的全部序列。该树的根节点恒为$<$sos$>$,代表序列均从$<$sos$>$ 开始。该树结构中非叶子节点的兄弟节点有$|V|$个,由词表和结束符号$<$eos$>$构成。从图\ref{fig:2-14}可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树中从根节点<sos> 开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词$i$也就是在上图选择$w_i$一列的一个节点,语言模型就可以为当前的树节点$w_i$给出一个分值,即$\funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$。对于$n$-gram语言模型,这个分值$\funp{P}(w_i | w_1 w_2 \ldots w_{i-1})=\funp{P}(w_i | w_{i-n+1} \ldots w_{i-1})$
\parinterval 那么是否有比枚举策略更高效的方法呢?答案是肯定的。从图\ref{fig:2-14}可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树\footnote[2]{解空间树是搜索路径的树型表示,它包含了搜索过程中可生成的全部序列。该树的根节点恒为$<$sos$>$,代表序列均从$<$sos$>$开始。该树结构中非叶子节点的兄弟节点有$|V|$个,由词表和结束符号$<$eos$>$构成。}中从根节点<sos>开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词$i$也就是在上图选择$w_i$一列的一个节点,语言模型就可以为当前的树节点$w_i$给出一个分值,即$\funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -894,11 +899,19 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -894,11 +899,19 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 从这个角度来看,可以很自然地引入语言模型打分来对枚举的解空间树的遍历进行增广:在解空间树中引入节点的权重\ \dash\ 将当前节点$i$的得分重设为语言模型打分$\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$,其中$w_1 w_2 \ldots w_{i-1}$是该节点的全部祖先。与先前不同的是,由于在使用语言模型打分时,词的概率通常小于1,因此句子很长时概率会非常小,容易造成浮点误差,所以这里使用概率的对数形式$\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$代替$\funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$。此时对于图中一条包含<eos>的完整序列来说,它的最终得分为$\log \funp{P}(w_1 w_2 \ldots w_m) = \sum_{i=1}^{m}\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$。如图\ref{fig:2-15}所示,可知红线所示单词序列“<sos>\ I\ agree\ <eos>”的得分为: \parinterval 从这个角度来看,在树的遍历中,可以很自然地引入语言模型打分:在解空间树中引入节点的权重\ \dash\ 将当前节点$i$的得分重设为语言模型打分$\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$,其中$w_1 w_2 \ldots w_{i-1}$是该节点的全部祖先。与先前不同的是,由于在使用语言模型打分时,词的概率通常小于1,因此句子很长时概率会非常小,容易造成浮点误差,所以这里使用概率的对数形式$\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$代替$\funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$。此时对于图中一条包含<eos>的完整序列来说,它的最终得分$\textrm{score}(\cdot)$可以被定义为:
\begin{eqnarray}
\textrm{score}(w_1 w_2 \ldots w_m) & = & \log \funp{P}(w_1 w_2 \ldots w_m) \nonumber \\
& = & \sum_{i=1}^{m}\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})
\end{eqnarray}
通常,$\textrm{score}(\cdot)$也被称作{\small\bfnew{模型得分}}\index{模型得分}(Model Score\index{Model Score})。如图\ref{fig:2-15}所示,可知红线所示单词序列“<sos>\ I\ agree\ <eos>”的模型得分为:
\begin{eqnarray} \begin{eqnarray}
&&\textrm{score(<sos>\ I\ agree\ <eos>)} \nonumber \\ &&\textrm{score(<sos>\ I\ agree\ <eos>)} \nonumber \\
& = & \log \funp{P}(\textrm{I} | \textrm{<sos>}) + \log \funp{P}(\textrm{agree} | \textrm{<sos>\ I}) + \log \funp{P}(\textrm{<sos>}| \textrm{<sos>\ I\ agree}) \nonumber \\ & = & \log \funp{P}(\textrm{<sos>}) + \log \funp{P}(\textrm{I} | \textrm{<sos>}) + \log \funp{P}(\textrm{agree} | \textrm{<sos>\ I}) + \log \funp{P}(\textrm{<sos>}| \textrm{<sos>\ I\ agree}) \nonumber \\
& = & -0.5-0.2-0.8 \nonumber \\ & = & 0-0.5-0.2-0.8 \nonumber \\
& = & -1.5 & = & -1.5
\label{eq:2-41} \label{eq:2-41}
\end{eqnarray} \end{eqnarray}
...@@ -912,7 +925,7 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -912,7 +925,7 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 现在已经把枚举过程跟语言模型打分过程统一起来,变成解空间树的遍历问题。而单词序列生成的问题即可定义为这样一个搜索问题:寻找所有单词序列组成的解空间树中权重总和最大的一条路径。前面提到的两种枚举的实现方式就是经典搜索里{\small\bfnew{深度优先搜索}}\index{深度优先搜索}(Depth-first Search)\index{Depth-first Search}{\small\bfnew{宽度优先搜索}}\index{宽度优先搜索}(Breadth-first Search)\index{Breadth-first Search}的雏形。在后面的内容中可以看到,从遍历解空间树的角度出发,可以对原始的枚举策略的效率进行优化。 \parinterval 这样,语言模型的打分与解空间树的遍历就融合了在一起。于是,序列生成的问题可以被重新描述为:寻找所有单词序列组成的解空间树中权重总和最大的一条路径。在这个定义下,前面提到的两种枚举词序列的方法就是经典的{\small\bfnew{深度优先搜索}}\index{深度优先搜索}(Depth-first Search)\index{Depth-first Search}{\small\bfnew{宽度优先搜索}}\index{宽度优先搜索}(Breadth-first Search)\index{Breadth-first Search}的雏形。在后面的内容中可以看到,从遍历解空间树的角度出发,可以对原始这些搜索策略的效率进行优化。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -920,13 +933,15 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -920,13 +933,15 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\subsection{经典搜索} \subsection{经典搜索}
人工智能领域有很多经典的搜索策略,这里将对无信息搜索和启发性搜索进行简要介绍。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{1.无信息搜索策略} \subsubsection{1.无信息搜索}
\parinterval 上述搜索过程中,在每次对当前节点进行扩展的时候,可以借助语言模型计算当前节点的权重。因此很自然的一个想法是:在单词序列的生成过程中使用权重信息可以帮助系统更快地找到合适的解。 \parinterval 在解空间树中,在每次对一个节点进行扩展的时候,可以借助语言模型计算当前节点的权重。因此很自然的一个想法是:使用权重信息可以帮助系统更快地找到合适的解。
\parinterval 在深度优先搜索中,每次总是先挑选一个单词,等枚举完当前单词全部子节点构成的序列后,才会选择下一个兄弟节点继续进行搜索。但是在挑选过程中先枚举词表中的哪个词是未定义的,也就是先选择哪个兄弟节点进行搜索是随机的。既然最终目标是寻找权重之和最大的路径,那么可以优先挑选分数较高的单词进行枚举。如图\ref{fig:2-16}所示,红色线表示了第一次搜索的路径。在路径长度有限的情况下,权重和最大的路径上每个节点的权重也会比较大,先尝试分数较大的单词可以让系统更快地找到最优解,这是对深度优先搜索的一个自然的扩展。 \parinterval 在深度优先搜索中,每次总是先挑选一个单词,等枚举完当前单词全部子节点构成的序列后,才会选择下一个兄弟节点继续进行搜索。但是在挑选过程中先枚举词表中的哪个词是未定义的,也就是先选择哪个兄弟节点进行搜索是随机的。既然最终目标是寻找权重之和最大的路径,那么可以优先挑选分数较高的单词进行枚举。如图\ref{fig:2-16}所示,红色线表示了第一次搜索的路径。在路径长度有限的情况下,权重和最大的路径上每个节点的权重也会比较大,先尝试分数较大的单词可以让系统更快地找到最优解,这是对深度优先搜索的一个自然的扩展。
...@@ -950,21 +965,25 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -950,21 +965,25 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 上面描述的两个改进后的搜索方法属于无信息搜索策略\upcite{sahni1978fundamentals},因为他们依赖的信息仍然来源于问题本身而不是问题以外。改进后的方法虽然有机会更快寻找到分数最高的单词序列,也就是最优解。但是由于没有一个通用的办法来判断当前找到的解是否为最优解,这种策略不会在找到最优解后自动停止,因此最终仍然需要枚举所有可能的单词序列,寻找最优解需要的时间复杂度没有产生任何改变。尽管如此,如果只是需要一个相对好的解而不是最优解,改进后的搜索策略仍然是比原始的枚举策略更优秀的算法。 \parinterval 上面描述的两个改进后的搜索方法属于{\small\bfnew{无信息搜索}}\index{无信息搜索}(Uninformed Search\index{Uninformed Search}\upcite{sahni1978fundamentals},因为它们依赖的信息仍然来源于问题本身而不是问题以外。改进后的方法虽然有机会更早的找到分数最高的单词序列(也就是最优解)。但是由于没有一个通用的办法来判断当前找到的解是否为最优解,这种策略不会在找到最优解后自动停止,因此最终仍然需要枚举所有可能的单词序列,寻找最优解需要的时间复杂度没有产生任何改变。尽管如此,如果只是需要一个相对好的解而不是最优解,改进后的搜索策略仍然是比原始的枚举策略更优秀的算法。
\parinterval 此外,由于搜索过程中将语言模型的打分作为搜索树的节点权重,另一种改进思路是:能否借助语言模型的特殊性质来对搜索树进行{\small\bfnew{剪枝}}\index{剪枝}(Pruning)\index{Pruning},从而避免在搜索空间中访问一些不可能产生比当前解更好的结果的区域,提高搜索策略在实际运用当中的效率。简单来说,剪枝是一种可以缩小搜索空间的手段,比如,在搜索的过程中,动态的“丢弃”一些搜索路径,从而减少搜索的总代价。剪枝的程度在一定范围内影响了搜索系统的效率,剪枝越多搜索效率越高,一般找到最优解的可能性也越低;反之,搜索效率越低,但是找到最优解的可能性越大。在{\chapterten}介绍的贪婪搜索和束搜索都可以被看作是剪枝方法的一种特例。 \parinterval 此外,由于搜索过程中将语言模型的打分作为搜索树的节点权重,另一种改进思路是:能否借助语言模型的特殊性质来对搜索树进行{\small\bfnew{剪枝}}\index{剪枝}(Pruning)\index{Pruning},从而避免在搜索空间中访问一些不可能产生比当前解更好的结果的区域,提高搜索策略在实际运用当中的效率。简单来说,剪枝是一种可以缩小搜索空间的手段,比如,在搜索的过程中,动态的“丢弃”一些搜索路径,从而减少搜索的总代价。剪枝的程度在一定范围内影响了搜索系统的效率,剪枝越多搜索效率越高,一般找到最优解的可能性也越低;反之,搜索效率越低,但是找到最优解的可能性越大。在本章后面即将介绍的贪婪搜索和束搜索都可以被看作是剪枝方法的一种特例。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{2.启发式搜索策略} \subsubsection{2.启发式搜索}
\parinterval 在搜索问题中,一个单词序列的生成可以分为两部分:已生成部分和未生成部分。既然最终目标是使得一个完整的单词序列得分最高,那么关注未生成部分的得分也许能为现有搜索策略的改进提供思路。 \parinterval 在搜索问题中,一个单词序列的生成可以分为两部分:已生成部分和未生成部分。既然最终目标是使得一个完整的单词序列得分最高,那么关注未生成部分的得分也许能为搜索策略的改进提供思路。
\parinterval 但是,问题在于未生成部分来自搜索树中未被搜索过的区域,直接得到其得分并不现实。既然仅依赖于问题本身的信息无法得到未生成部分的得分,那么是否可以通过一些外部信息来估计未生成部分得分$h(w_1 w_2 \ldots w_m)$呢?在前面所提到的剪枝技术中,借助语言模型的特性可以使得搜索变得高效。与其类似,利用语言模型的其他特性也可以实现对未生成部分得分的估计。这个对未生成部分得分的估计通常被称为{\small\bfnew{启发式函数}}\index{启发式函数}(Heuristic Function)\index{Heuristic Function}。在扩展假设过程中,可以优先挑选当前得分$\log \funp{P}(w_1 w_2 \ldots w_m)$和启发式函数值$h(w_1 w_2 \ldots w_m)$最大的候选进行扩展,从而大大提高搜索的效率。这种基于启发式函数的一致代价搜索通常也被称为$\textrm{A}^{\ast}$搜索或{\small\bfnew{启发式搜索}}\index{启发式搜索}(Heuristically Search)\index{Heuristically Search}\upcite{hart1968a} \parinterval 但是,问题在于未生成部分来自搜索树中未被搜索过的区域,因此也无法直接计算其得分。既然仅依赖于问题本身的信息无法得到未生成部分的得分,那么是否可以通过一些外部信息来估计未生成部分的得分呢?在前面所提到的剪枝技术中,借助语言模型的特性可以使得搜索变得高效。与其类似,利用语言模型的其他特性也可以实现对未生成部分得分的估计。这个对未生成部分得分的估计通常被称为{\small\bfnew{启发式函数}}\index{启发式函数}(Heuristic Function)\index{Heuristic Function}。在扩展假设过程中,可以优先挑选当前得分$\log \funp{P}(w_1 w_2 \ldots w_m)$和启发式函数值$h(w_1 w_2 \ldots w_m)$最大的候选进行扩展,从而大大提高搜索的效率。这时,模型得分可以被定义为:
\begin{eqnarray}
\textrm{score}(w_1 w_2 \ldots w_m) = \log \funp{P}(w_1 w_2 \ldots w_m) + h(w_1 w_2 \ldots w_m)
\end{eqnarray}
\parinterval 通常可以把启发式函数看成是计算当前状态跟最优解的距离的一种方法,并把关于最优解的一些性质的猜测放到启发式函数里。比如,在序列生成中,一般认为最优序列应该在某个特定的长度附近,那么就可以把启发式函数定义成该长度与当前单词序列长度的差值。这样,在搜索过程中,启发式函数会引导搜索先生成当前得分高且序列长度接近预设长度的单词序列。此外除了手工设计启发式函数,还可以借助强化学习的手段,学习关于未来得分的估计\upcite{DBLP:conf/nips/HeLXQ0L17} \parinterval 这种基于启发式函数的一致代价搜索通常也被称为$\textrm{A}^{\ast}$搜索或{\small\bfnew{启发式搜索}}\index{启发式搜索}(Heuristic Search)\index{Heuristic Search}\upcite{hart1968a}。通常可以把启发式函数看成是计算当前状态跟最优解的距离的一种方法,并把关于最优解的一些性质的猜测放到启发式函数里。比如,在序列生成中,一般认为最优序列应该在某个特定的长度附近,那么就可以把启发式函数定义成该长度与当前单词序列长度的差值。这样,在搜索过程中,启发式函数会引导搜索优先生成当前得分高且序列长度接近预设长度的单词序列
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -1001,7 +1020,7 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -1001,7 +1020,7 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\parinterval 贪婪搜索会产生质量比较差的解是由于当前单词的错误选择造成的。既然每次只挑选一个单词可能会产生错误,那么可以通过同时考虑更多候选单词来缓解这个问题,也就是对于一个位置,可以同时将其扩展到若干个节点。这样就扩大了搜索的范围,进而使得优质解被找到的概率增大。 \parinterval 贪婪搜索会产生质量比较差的解是由于当前单词的错误选择造成的。既然每次只挑选一个单词可能会产生错误,那么可以通过同时考虑更多候选单词来缓解这个问题,也就是对于一个位置,可以同时将其扩展到若干个节点。这样就扩大了搜索的范围,进而使得优质解被找到的概率增大。
\parinterval 常见的做法是每一次生成新单词的时候都挑选得分最高的前$B$个单词,然后扩展这$B$个单词的$V$个孩子节点,得到$BV$条新路径,最后保留其中得分最高的$B$条路径。从另外一个角度理解,它相当于比贪婪搜索看到了更多的假设,因而它更有可能找到好的解。这个方法通常被称为{\small\bfnew{束搜索}}\index{束搜索}(Beam Search)\index{Beam Search}。图\ref{fig:2-19}展示了一个束大小为3的例子,其中束大小代表每次选择单词时保留的词数。比起贪婪搜索,束搜索在实际表现中非常优秀,它的时间、空间复杂度仅为贪婪搜索的常数倍,也就是$\textrm{O}(Bm)$ \parinterval 常见的做法是每一次生成新单词的时候都挑选得分最高的前$B$个单词,然后扩展这$B$个单词的$T$个孩子节点,得到$BT$条新路径,最后保留其中得分最高的$B$条路径。从另外一个角度理解,它相当于比贪婪搜索看到了更多的路径,因而它更有可能找到好的解。这个方法通常被称为{\small\bfnew{束搜索}}\index{束搜索}(Beam Search)\index{Beam Search}。图\ref{fig:2-19}展示了一个束大小为3的例子,其中束大小代表每次选择单词时保留的词数。比起贪婪搜索,束搜索在实际表现中非常优秀,它的时间、空间复杂度仅为贪婪搜索的常数倍,也就是$\textrm{O}(Bm)$
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -1012,11 +1031,11 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -1012,11 +1031,11 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 束搜索也有很多的改进版本。比如,在无信息搜索策略中可以使用剪枝技术来提升搜索的效率。而实际上,束搜索本身也是一种剪枝方法。因此有时也把束搜索称作{\small\bfnew{束剪枝}}\index{束剪枝}(Beam Pruning)\index{Beam Pruning}。在这里有很多其它的剪枝策略可供选择,例如可以只保留与当前最佳路径得分相差在$\theta$之内的路径,也就是搜索只保留得分差距在一定范围内的路径,这种方法也被称作{\small\bfnew{直方图剪枝}}\index{直方图剪枝}(Histogram Pruning)\index{Histogram Pruning} \parinterval 束搜索也有很多的改进版本。回忆一下,在无信息搜索策略中可以使用剪枝技术来提升搜索的效率。而实际上,束搜索本身也是一种剪枝方法。因此有时也把束搜索称作{\small\bfnew{束剪枝}}\index{束剪枝}(Beam Pruning)\index{Beam Pruning}。在这里有很多其它的剪枝策略可供选择,例如可以只保留与当前最佳路径得分相差在$\theta$之内的路径,也就是搜索只保留得分差距在一定范围内的路径,这种方法也被称作{\small\bfnew{直方图剪枝}}\index{直方图剪枝}(Histogram Pruning)\index{Histogram Pruning}
\parinterval 对于语言模型来说,当进行搜索时正在搜索的多个路径中最高得分比当前搜索到的最好的解的得分低时,可以立刻停止搜索。因为此时序列越长语言模型得分$\log \funp{P}(w_1 w_2 \ldots w_m)$会越低,继续扩展这些路径不会产生更好的结果。这个技术通常也被称为{\small\bfnew{最佳停止条件}}\index{最佳停止条件}(Optimal Stopping Criteria)\index{Optimal Stopping Criteria} \parinterval 对于语言模型来说,当多个路径中最高得分比当前搜索到的最好的解的得分低时,可以立刻停止搜索。因为此时序列越长语言模型得分$\log \funp{P}(w_1 w_2 \ldots w_m)$会越低,继续扩展这些路径不会产生更好的结果。这个技术通常也被称为{\small\bfnew{最佳停止条件}}\index{最佳停止条件}(Optimal Stopping Criteria)\index{Optimal Stopping Criteria}。类似的思想也被用于机器翻译等任务{\color{red} (此处引用liang huang的论文)}
\parinterval 总的来说,虽然局部搜索由于没有遍历完整的解空间,使得这类方法无法保证找到最优解。但是,局部搜索算法大大降低了搜索过程的时间、空间复杂度。因此在语言模型生成和机器翻译的解码过程中常常使用局部搜索算法。在{\chapterseven}{\chapterten}{\chaptereleven}中还将介绍这些算法的具体应用。 \parinterval 总的来说,虽然局部搜索由于没有遍历完整的解空间,使得这类方法无法保证找到最优解。但是,局部搜索算法大大降低了搜索过程的时间、空间复杂度。因此在语言模型生成和机器翻译的解码过程中常常使用局部搜索算法。在{\chapterseven}{\chapterten}中还将介绍这些算法的具体应用。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
...@@ -1025,20 +1044,20 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w) ...@@ -1025,20 +1044,20 @@ w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\sectionnewpage \sectionnewpage
\section{小结及深入阅读} \label{sec2:summary} \section{小结及深入阅读} \label{sec2:summary}
\parinterval 本章重点介绍了如何对自然语言处理问题进行统计建模,并从数据中自动学习统计模型的参数,最终使用学习到的模型对新的问题进行处理。之后,将这种思想应用到语言建模任务中,该任务与机器翻译有着紧密的联系。通过系统化的建模,可以发现:经过适当的假设和化简,统计模型可以很好的描述复杂的自然语言处理问题。相关概念和方法也会在后续章节的内容中被广泛使用。 \parinterval 本章重点介绍了如何对自然语言处理问题进行统计建模,并从数据中自动学习统计模型的参数,最终使用学习到的模型对新的问题进行处理。之后,将这种思想应用到语言建模任务中,该任务与机器翻译有着紧密的联系。通过系统化的建模,可以发现:经过适当的假设和化简,统计模型可以很好的描述复杂的自然语言处理问题。进一步,本章对面向语言模型预测的搜索方法进行了介绍。相关概念和方法也会在后续章节的内容中被广泛使用。
\parinterval 此外,有几方面内容,读者可以继续深入了解: \parinterval 此外,有几方面内容,读者可以继续深入了解:
\begin{adjustwidth}{1em}{} \begin{adjustwidth}{1em}{}
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item本章介绍的$n$-gram语言模型中,通过对语料库中词汇频率进行统计,进而计算句子的概率。但是由于语料中存在大量的低频词汇以及未登录词,这些概率为0或接近0的词汇将导致语言模型无法给出合理的句子概率。因此本章介绍了三种平滑方法,以解决上述问题。实际上,平滑方法是语言建模中的重要研究方向。除了上述三种方法之外,还有Jelinek–Mercer平滑\upcite{jelinek1980interpolated}、Katz平滑\upcite{katz1987estimation}以及Witten–Bell平滑等等\upcite{bell1990text}\upcite{witten1991the}。相关工作也对这些平滑方法进行了详细对比\upcite{chen1999an}\upcite{goodman2001a} \item$n$-gram语言模型中,由于语料中往往存在大量的低频词以及未登录词,模型会产生不合理的概率预测结果。因此本章介绍了三种平滑方法,以解决上述问题。实际上,平滑方法是语言建模中的重要研究方向。除了上述三种方法之外,还有Jelinek–Mercer平滑\upcite{jelinek1980interpolated}、Katz 平滑\upcite{katz1987estimation}以及Witten–Bell平滑等等\upcite{bell1990text,witten1991the}。 相关工作也对这些平滑方法进行了详细对比\upcite{chen1999an,goodman2001a}
\vspace{0.5em} \vspace{0.5em}
\item 除了平滑方法,也有很多$n$-gram语言模型的改进工作。比如,对于形态学丰富的语言,可以考虑对单词的形态学变化来进行建模。这类语言模型在一些机器翻译系统中也体现出了很好的潜力\upcite{kirchhoff2005improved}\upcite{sarikaya2007joint}\upcite{koehn2007factored}。此外,如何使用超大规模数据进行语言模型训练也是备受关注的研究方向。比如,有研究者探索了对超大语言模型进行压缩和存储的方法\upcite{federico2007efficient}\upcite{federico2006how}\upcite{heafield2011kenlm}。另一个有趣的方向是,利用随机存储算法对大规模语言模型进行有效存储\upcite{talbot2007smoothed}\upcite{talbot2007randomised},比如,在语言模型中使用Bloom\ Filter等随机存储的数据结构。 \item 除了平滑方法,也有很多工作对$n$-gram语言模型进行改进。比如,对于形态学丰富的语言,可以考虑对单词的形态学变化进行建模。这类语言模型在一些机器翻译系统中也体现出了很好的潜力\upcite{kirchhoff2005improved}\upcite{sarikaya2007joint,koehn2007factored}。此外,如何使用超大规模数据进行语言模型训练也是备受关注的研究方向。比如,有研究者探索了对超大语言模型进行压缩和存储的方法\upcite{federico2007efficient,federico2006how,heafield2011kenlm}。另一个有趣的方向是,利用随机存储算法对大规模语言模型进行有效存储\upcite{talbot2007smoothed,talbot2007randomised},比如,在语言模型中使用Bloom\ Filter等随机存储的数据结构。
\vspace{0.5em} \vspace{0.5em}
\item 本章更多地关注了语言模型的基本问题和求解思路,但是基于$n$-gram的方法并不是语言建模的唯一方法。从现在自然语言处理的前沿看,基于端到端学习的深度学习方法在很多任务中都取得了领先的性能。语言模型同样可以使用这些方法\upcite{jing2019a},而且在近些年取得了巨大成功\upcite{DBLP:conf/nips/BengioDV00}。例如,最早提出的前馈神经语言模型\upcite{bengio2003a}和后来的基于循环单元的语言模型\upcite{mikolov2010recurrent}、基于长短期记忆单元的语言模型\upcite{sundermeyer2012lstm}以及现在非常流行的Transformer\upcite{vaswani2017attention}\upcite{dai2019transformer}关于神经语言模型的内容,会在{\chapternine}进行进一步介绍。 \item 本章更多地关注了语言模型的基本问题和求解思路,但是基于$n$-gram的方法并不是语言建模的唯一方法。从现在自然语言处理的前沿看,端到端的深度学习方法在很多任务中都取得了领先的性能。语言模型同样可以使用这些方法\upcite{jing2019a},而且在近些年取得了巨大成功。例如,最早提出的前馈神经语言模型\upcite{bengio2003a}和后来的基于循环单元的语言模型\upcite{mikolov2010recurrent}、基于长短期记忆单元的语言模型\upcite{sundermeyer2012lstm}以及现在非常流行的Transformer\upcite{vaswani2017attention}关于神经语言模型的内容,会在{\chapternine}进行进一步介绍。
\vspace{0.5em} \vspace{0.5em}
\item 最后,本章结合语言模型的序列生成任务对搜索技术进行了介绍。类似地,机器翻译任务也需要从大量的翻译后选中快速寻找最优译文。因此在机器翻译任务中也使用了搜索方法,这个过程通常被称作{\small\bfnew{解码}}\index{解码}(Decoding)\index{Decoding}。例如,有研究者在基于词的翻译模型中尝试使用启发式搜索\upcite{DBLP:conf/acl/OchUN01,DBLP:conf/acl/WangW97}以及贪婪搜索方法\upcite{germann2001fast}\upcite{germann2003greedy},也有研究者在基于短语的栈解码中使用$\textrm{A}^{\ast}$搜索\upcite{tillmann1997a}\upcite{wang1997decoding}。此外,解码方法还包括有限状态机解码\upcite{bangalore2001a}\upcite{bangalore2000stochastic}以及基于语言学约束的解码\upcite{venugopal2007an}\upcite{huang2007forest}。相关内容将在{\chaptereight}{\chapterfourteen}进行介绍。 \item 最后,本章结合语言模型的序列生成任务对搜索技术进行了介绍。类似地,机器翻译任务也需要从大量的翻译后选中快速寻找最优译文。因此在机器翻译任务中也使用了搜索方法,这个过程通常被称作{\small\bfnew{解码}}\index{解码}(Decoding)\index{Decoding}。例如,有研究者在基于词的翻译模型中尝试使用启发式搜索\upcite{DBLP:conf/acl/OchUN01,DBLP:conf/acl/WangW97,tillmann1997a}以及贪婪搜索方法\upcite{germann2001fast}\upcite{germann2003greedy},也有研究者研究基于短语的栈解码方法{\color{red}(引用Moses)}。此外,解码方法还包括有限状态机解码\upcite{bangalore2001a}\upcite{bangalore2000stochastic}以及基于语言学约束的解码\upcite{venugopal2007an}{\color{red}(找SAMT、树到串、串到树翻译、Hiero的论文)}。相关内容将在{\chaptereight}{\chapterfourteen} 进行介绍。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\end{adjustwidth} \end{adjustwidth}
...@@ -410,13 +410,127 @@ ...@@ -410,13 +410,127 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% chapter 5------------------------------------------------------ %%%%% chapter 5------------------------------------------------------
@article{brown1990statistical,
author = {Peter F. Brown and
John Cocke and
Stephen Della Pietra and
Vincent J. Della Pietra and
Frederick Jelinek and
John D. Lafferty and
Robert L. Mercer and
Paul S. Roossin},
title = {A Statistical Approach to Machine Translation},
journal = {Computational Linguistics},
volume = {16},
number = {2},
pages = {79--85},
year = {1990}
}
@article{Peter1993The,
author = {Peter F. Brown and
Stephen Della Pietra and
Vincent J. Della Pietra and
Robert L. Mercer},
title = {The Mathematics of Statistical Machine Translation: Parameter Estimation},
journal = {Computational Linguistics},
volume = {19},
number = {2},
pages = {263--311},
year = {1993}
}
@article{knight1999decoding,
author = {Kevin Knight},
title = {Decoding Complexity in Word-Replacement Translation Models},
journal = {Computational Linguistics},
volume = {25},
number = {4},
pages = {607--615},
year = {1999}
}
@article{shannon1949communication,
title ={Communication theory of secrecy systems},
author ={Shannon, Claude E},
journal ={Bell system technical journal},
volume ={28},
number ={4},
pages ={656--715},
year ={1949},
publisher ={Wiley Online Library}
}
%%%%% chapter 5------------------------------------------------------ %%%%% chapter 5------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% chapter 6------------------------------------------------------ %%%%% chapter 6------------------------------------------------------
@article{Peter1993The,
author = {Peter F. Brown and
Stephen Della Pietra and
Vincent J. Della Pietra and
Robert L. Mercer},
title = {The Mathematics of Statistical Machine Translation: Parameter Estimation},
journal = {Computational Linguistics},
volume = {19},
number = {2},
pages = {263--311},
year = {1993}
}
@inproceedings{ittycheriah2005maximum,
author = {Abraham Ittycheriah and
Salim Roukos},
title = {A Maximum Entropy Word Aligner for Arabic-English Machine Translation},
publisher = {The Association for Computational Linguistics},
year = {2005}
}
@inproceedings{koehn2003statistical,
author = {Philipp Koehn and
Franz Josef Och and
Daniel Marcu},
title = {Statistical Phrase-Based Translation},
publisher = {The Association for Computational Linguistics},
year = {2003}
}
@book{manning1999foundations,
title ={Foundations of statistical natural language processing},
author ={Manning, Christopher D and Manning, Christopher D and Sch{\"u}tze, Hinrich},
year ={1999},
publisher ={Massachusetts Institute of Technology Press}
}
@article{och2003systematic,
author = {Franz Josef Och and
Hermann Ney},
title = {A Systematic Comparison of Various Statistical Alignment Models},
journal = {Computational Linguistics},
volume = {29},
number = {1},
pages = {19--51},
year = {2003}
}
@article{och2004alignment,
author = {Franz Josef Och and
Hermann Ney},
title = {The Alignment Template Approach to Statistical Machine Translation},
journal = {Computational Linguistics},
volume = {30},
number = {4},
pages = {417--449},
year = {2004}
}
@inproceedings{vogel1996hmm,
author = {Stephan Vogel and
Hermann Ney and
Christoph Tillmann},
title = {HMM-Based Word Alignment in Statistical Translation},
pages = {836--841},
year = {1996}
}
@article{xiao2013unsupervised,
title ={Unsupervised sub-tree alignment for tree-to-tree translation},
author ={Xiao, Tong and Zhu, Jingbo},
journal ={Journal of Artificial Intelligence Research},
volume ={48},
pages ={733--782},
year ={2013}
}
%%%%% chapter 6------------------------------------------------------ %%%%% chapter 6------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论