Commit 9eb8c2ea by 单韦乔

第一章和第二章修改

parent 8fd4e521
......@@ -179,7 +179,7 @@
\vspace{0.5em}
\item 第二,神经网络的连续空间模型有更强的表示能力。机器翻译中的一个基本问题是:如何表示一个句子?统计机器翻译把句子的生成过程看作是短语或者规则的推导,这本质上是一个离散空间上的符号系统。深度学习把传统的基于离散化的表示变成了连续空间的表示。比如,用实数空间的分布式表示代替了离散化的词语表示,而整个句子可以被描述为一个实数向量。这使得翻译问题可以在连续空间上描述,进而大大缓解了传统离散空间模型维度灾难等问题。更重要的是,连续空间模型可以用梯度下降等方法进行优化,具有很好的数学性质并且易于实现。
\vspace{0.5em}
\item 第三,深度网络学习算法的发展和GPU(Graphics Processing Unit)等并行计算设备为训练神经网络提供了可能。早期的基于神经网络的方法一直没有在机器翻译甚至自然语言处理领域得到大规模应用,其中一个重要的原因是这类方法需要大量的浮点运算,而且以前计算机的计算能力无法达到这个要求。随着GPU等并行计算设备的进步,训练大规模神经网络也变为了可能。现在已经可以在几亿、几十亿,甚至上百亿句对上训练机器翻译系统,系统研发的周期越来越短,进展日新月异。
\item 第三,深度网络学习算法的发展和{\small\bfnew{GPU}}\index{GPU}(Graphics Processing Unit)\index{Graphics Processing Unit}等并行计算设备为训练神经网络提供了可能。早期的基于神经网络的方法一直没有在机器翻译甚至自然语言处理领域得到大规模应用,其中一个重要的原因是这类方法需要大量的浮点运算,而且以前计算机的计算能力无法达到这个要求。随着GPU等并行计算设备的进步,训练大规模神经网络也变为了可能。现在已经可以在几亿、几十亿,甚至上百亿句对上训练机器翻译系统,系统研发的周期越来越短,进展日新月异。
\vspace{0.5em}
\end{itemize}
......
......@@ -24,13 +24,6 @@
\chapter{统计语言建模基础}
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\sectionnewpage
\section{前言}
\parinterval 世界上很多事物都具有不确定性,大到宇宙的运行,小到分子的运动。建立统计模型正是描述这种不确定性的一种手段,包括机器翻译在内对众多自然语言处理问题的求解都大量依赖于此模型。本章将会对统计建模的基础数学工具进行介绍,并在此基础上对语言建模问题展开讨论。实际上,统计建模与语言建模任务的结合产生了自然语言处理的一个重要方向\ \dash\ 统计语言建模。这是一个典型的语言生成任务。一方面,它与机器翻译属于同一类型任务,比如,二者都对应了单词串生成的过程,因此在描述问题的思想上有很多相似之处;另一方面,统计语言模型也常常被作为机器翻译系统的组件,对于机器翻译系统研发有着重要意义。本章所讨论的内容对本书后续章节有很好的铺垫作用,特别是运用统计模型的思想对自然语言处理问题进行描述,在本书后面的内容中也会被大量使用。
%----------------------------------------------------------------------------------------
......@@ -146,7 +139,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\subsection{链式法则}
\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)$,计算过程如下:
\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}
\textrm{P}(A,B,C) & = & \textrm{P}(A \mid B ,C)\textrm{P}(B,C) \nonumber \\
& = & \textrm{P}(A \mid B,C)\textrm{P}(B \mid C)\textrm{P}(C)
......@@ -330,7 +323,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\sectionnewpage
\section{掷骰子游戏}
\parinterval 我们在阐述统计建模方法前,先看一个有趣的实例(图\ref{fig:2-5})。掷骰子,一个生活中比较常见的游戏,掷一个骰子,玩家猜一个数字,猜中就算赢,按照常识来说,随便选一个数字,获胜的概率是一样的,即所有选择的获胜概率都是$1/6$。因此这个游戏玩家很难获胜,除非运气很好。假设进行一次游戏,玩家随意选了一个数字,比如是1。当投掷30次骰子,发现我们的运气不错,得到命中$7/30 > 1/6$,还不错
\parinterval 在阐述统计建模方法前,先看一个有趣的实例(图\ref{fig:2-5})。掷骰子,一个生活中比较常见的游戏,掷一个骰子,玩家猜一个数字,猜中就算赢,按照常识来说,随便选一个数字,获胜的概率是一样的,即所有选择的获胜概率都是$1/6$。因此这个游戏玩家很难获胜,除非运气很好。假设进行一次游戏,玩家随意选了一个数字,比如是1。当投掷30次骰子,发现运气不错,得到命中$7/30 > 1/6$
\vspace{-0.5em}
%----------------------------------------------
......@@ -350,7 +343,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\end{eqnarray}
\vspace{-0.5em}
\parinterval 但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。如果骰子的六个面不均匀呢?我们可以用一种更加``聪明''的方式定义一种新的模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。描述如下:
\parinterval 但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。如果骰子的六个面不均匀呢?这里可以用一种更加``聪明''的方式定义一种新的模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。描述如下:
\begin{eqnarray}
\textrm{P(``1'')} &=&\theta_1 \nonumber \\
\textrm{P(``2'')} &=&\theta_2 \nonumber \\
......@@ -378,7 +371,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\end{figure}
%-------------------------------------------
\parinterval 于是,我们可以看到,这是一个有倾向性的模型(图 \ref{fig:2-7}):在这样的预先实验基础上,可以知道这个骰子是不均匀的,如果用这个骰子玩掷骰子游戏,选择数字``4''获胜的可能性是最大的。
\parinterval 此时,可以注意到,这是一个有倾向性的模型(图 \ref{fig:2-7}):在这样的预先实验基础上,可以知道这个骰子是不均匀的,如果用这个骰子玩掷骰子游戏,选择数字``4''获胜的可能性是最大的。
%----------------------------------------------
\begin{figure}[htp]
......@@ -389,7 +382,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\end{figure}
%-------------------------------------------
\parinterval {\small\sffamily\bfseries{上帝是不公平的}},上面这个掷骰子游戏也是如此。在``公平''的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的``不公平''实际上这是客观事物中蕴含的一种{\small\sffamily\bfseries{偏置}}\index{偏置}(Bias)\index{Bias},也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题中绝大多数都存在着偏置。比如,我们翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\parinterval {\small\sffamily\bfseries{上帝是不公平的}},上面这个掷骰子游戏也是如此。在``公平''的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的``不公平''实际上这是客观事物中蕴含的一种{\small\sffamily\bfseries{偏置}}\index{偏置}(Bias)\index{Bias},也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题中绝大多数都存在着偏置。比如,翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\parinterval 在处理语言问题时,为了评价哪些词更容易在一个句子中出现,或者哪些句子在某些语境下更合理,常常也会使用统计方法对词或句子出现的可能性建模。与掷骰子游戏类似,词出现的概率可以这样理解:每个单词的出现就好比掷一个巨大的骰子,与前面的例子中有所不同的是:
......@@ -445,7 +438,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\end{figure}
%-------------------------------------------
\parinterval 通过这个学习过程,我们就可以得到每个词出现的概率,成功使用统计方法对“单词的频率”这个问题进行建模。
\parinterval 通过这个学习过程,就可以得到每个词出现的概率,成功使用统计方法对“单词的频率”这个问题进行建模。
\parinterval 那么又该如何计算一个句子的概率呢?在自然语言处理领域中,句子可以被看作是由单词组成的序列,因而句子的概率可以被建模为若干单词的联合概率,即$\textrm{P}(w_1 w_2 w_3...w_m)$
......@@ -458,7 +451,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\sectionnewpage
\section{$n$-gram语言模型}
\parinterval 在骰子游戏中,我们可以通过一种统计的方式,估计出在文本中词和句子出现的概率。但是在计算句子概率时往往会因为句子的样本过少而无法正确估计出句子出现的频率,为了能够准确地衡量句子出现的频率,我们引入了计算整个单词序列概率$\textrm{P}(w_1 w_2 w_3...w_m)$的方法---统计语言模型的概念,并在本章进一步介绍更加通用的n-gram语言模型,它在机器翻译及其他自然语言处理任务中有更加广泛的应用。
\parinterval 在骰子游戏中,可以通过一种统计的方式,估计出在文本中词和句子出现的概率。但是在计算句子概率时往往会因为句子的样本过少而无法正确估计出句子出现的频率,为了能够准确地衡量句子出现的频率,本章引入了计算整个单词序列概率$\textrm{P}(w_1 w_2 w_3...w_m)$的方法---统计语言模型的概念。并且本章进一步介绍更加通用的n-gram语言模型,它在机器翻译及其他自然语言处理任务中有更加广泛的应用。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -544,7 +537,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\label{eq:2-23}
\end{eqnarray}
\parinterval$n$-gram语言模型为代表的统计语言模型的应用非常广泛。除了将要在第三章中介绍的全概率分词方法,在文本生成、信息检索、摘要等自然语言处理任务中,语言模型都有举足轻重的地位。包括近些年非常受关注的预训练模型,本质上也是统计语言模型。这些技术都会在后续章节进行介绍。值得注意的是,统计语言模型为解决自然语言处理问题提供了一个非常好的建模思路,即:把整个序列生成的问题转化为逐个生成单词的问题。很快我们就会看到,这种建模方式会被广泛地用于机器翻译建模,在统计机器翻译和神经机器翻译中都会有明显的体现。
\parinterval$n$-gram语言模型为代表的统计语言模型的应用非常广泛。除了将要在第三章中介绍的全概率分词方法,在文本生成、信息检索、摘要等自然语言处理任务中,语言模型都有举足轻重的地位。包括近些年非常受关注的预训练模型,本质上也是统计语言模型。这些技术都会在后续章节进行介绍。值得注意的是,统计语言模型为解决自然语言处理问题提供了一个非常好的建模思路,即:把整个序列生成的问题转化为逐个生成单词的问题。实际上,这种建模方式会被广泛地用于机器翻译建模,在统计机器翻译和神经机器翻译中都会有明显的体现。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -560,7 +553,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\label{eq:2-24}
\end{eqnarray}
\parinterval 显然,这个结果是不能接受的。因为即使语料中没有 ``确实''和``现在''两个词连续出现,这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个切分结果的概率为0。 更常见的问题是那些根本没有出现在词表中的词,称为{\small\sffamily\bfseries{未登录词}}\index{未登录词}(Out-of-Vocabulary Word,OOV Word)\index{Out-of-Vocabulary Word,OOV Word},比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0 概率。图\ref{fig:2-11}展示了一个真实语料库中词语出现频度的分布,可以看到绝大多数词都是低频词。
\parinterval 显然,这个结果是不能接受的。因为即使语料中没有 ``确实''和``现在''两个词连续出现,这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个切分结果的概率为0。 更常见的问题是那些根本没有出现在词表中的词,称为{\small\sffamily\bfseries{未登录词}}\index{未登录词}(Out-Of-Vocabulary Word,OOV Word)\index{Out-Of-Vocabulary Word,OOV Word},比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0 概率。图\ref{fig:2-11}展示了一个真实语料库中词语出现频度的分布,可以看到绝大多数词都是低频词。
%----------------------------------------------
\begin{figure}[htp]
......@@ -611,7 +604,7 @@ F(x)=\int_{-\infty}^x f(x)dx
\subsubsection{古德-图灵估计法}
\vspace{-0.5em}
\parinterval {\small\bfnew{古德-图灵估计法}}\index{古德-图灵估计法}(Good-Turing Estimate)\index{Good-Turing Estimate}图灵(Alan Turing)和他的助手古德(I.J.Good)开发的,作为他们在二战期间破解德国密码机Enigma所使用的方法的一部分,在1953 年古德将其发表,这一方法也是很多平滑算法的核心,其基本思路是:把非零的$n$元语法单元的概率降低匀给一些低概率$n$元语法单元,以减小最大似然估计与真实概率之间的偏离\cite{good1953population}\cite{gale1995good}
\parinterval {\small\bfnew{古德-图灵估计法}}\index{古德-图灵估计法}(Good-Turing Estimate)\index{Good-Turing Estimate}Alan Turing和他的助手I.J.Good开发的,作为他们在二战期间破解德国密码机Enigma所使用的方法的一部分,在1953 年I.J.Good将其发表,这一方法也是很多平滑算法的核心,其基本思路是:把非零的$n$元语法单元的概率降低匀给一些低概率$n$元语法单元,以减小最大似然估计与真实概率之间的偏离\cite{good1953population}\cite{gale1995good}
\parinterval 假定在语料库中出现$r$次的$n$-gram有$n_r$个,特别的,出现0次的$n$-gram(即未登录词及词串)出现的次数为$n_0$个。语料库中全部词语的个数为$N$,显然
\begin{eqnarray}
......@@ -690,7 +683,7 @@ N & = & \sum_{r=0}^{\infty}{r^{*}n_r} \nonumber \\
\noindent 其中$d$表示被裁剪的值,$\lambda$是一个正则化常数。可以看到第一项是经过减值调整过的2-gram的概率值,第二项则相当于一个带权重$\lambda$的1-gram的插值项。然而这种插值模型极易受到原始1-gram 模型的干扰。
\parinterval 假设我们使用2-gram和1-gram的插值模型预测下面句子中下划线处的词
\parinterval 假设这里使用2-gram和1-gram的插值模型预测下面句子中下划线处的词
\vspace{0.0em}
\begin{center}
......@@ -700,7 +693,7 @@ I cannot see without my reading \underline{\ \ \ \ \ \ \ \ }
\noindent 直觉上应该会猜测这个地方的词应该是``glasses'',但是在训练语料库中``Francisco''出现的频率非常高。如果在预测时仍然使用的是标准的1-gram模型,那么系统会高概率选择``Francisco''填入下划线出,这个结果明显是不合理的。当使用的是混合的插值模型时,如果``reading Francisco''这种二元语法并没有出现在语料中,就会导致1-gram对结果的影响变大,使得仍然会做出与标准1-gram模型相同的结果,犯下相同的错误。
\parinterval 观察语料中的2-gram发现,``Francisco''的前一个词仅可能是``San'',不会出现``reading''。这个分析提醒了我们,考虑前一个词的影响是有帮助的,比如仅在前一个词是``San''时,才给``Francisco''赋予一个较高的概率值。基于这种想法,改进原有的1-gram模型,创造一个新的1-gram模型$\textrm{P}_{\textrm{continuation}}$,简写为$\textrm{P}_{\textrm{cont}}$。这个模型可以通过考虑前一个词的影响评估当前词作为第二个词出现的可能性。
\parinterval 观察语料中的2-gram发现,``Francisco''的前一个词仅可能是``San'',不会出现``reading''。这个分析证实了,考虑前一个词的影响是有帮助的,比如仅在前一个词是``San''时,才给``Francisco''赋予一个较高的概率值。基于这种想法,改进原有的1-gram模型,创造一个新的1-gram模型$\textrm{P}_{\textrm{continuation}}$,简写为$\textrm{P}_{\textrm{cont}}$。这个模型可以通过考虑前一个词的影响评估当前词作为第二个词出现的可能性。
\parinterval 为了评估$\textrm{P}_{\textrm{cont}}$,统计使用当前词作为第二个词所出现二元语法的种类,二元语法种类越多,这个词作为第二个词出现的可能性越高,呈正比:
\begin{eqnarray}
......@@ -762,9 +755,9 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\sectionnewpage
\section{搜索}
\parinterval 语言模型的应用非常广泛,比如,可以用语言模型来判断一个句子是否通顺;也可以用语言模型在缺失单词的位置选择出最适合的单词;甚至语言模型可以帮助我们完成更加复杂的任务。比如写作文时,并没有指定某个单词序列作为输入,而是要求直接生成一个合理的单词序列,如一个完整的句子甚至一篇完整的文章。这时,语言模型是否能够根据自己的判断来生成一段流畅合理的单词序列呢?
\parinterval 语言模型的应用非常广泛,比如,可以用语言模型来判断一个句子是否通顺;也可以用语言模型在缺失单词的位置选择出最适合的单词;甚至语言模型完成更加复杂的任务。比如写作文时,并没有指定某个单词序列作为输入,而是要求直接生成一个合理的单词序列,如一个完整的句子甚至一篇完整的文章。这时,语言模型是否能够根据自己的判断来生成一段流畅合理的单词序列呢?
\parinterval 这类问题也对应着一大类自然语言处理问题\ \dash\ {\small\bfnew{序列生成}}\index{序列生成}(Sequence Generation)\index{Sequence Generation}。机器翻译就是一个非常典型的序列生成问题:在机器翻译任务中,需要根据源语言序列直接生成与之相对应的目标语言序列。但是语言模型本身并不能``制造''单词序列的,它的基础功能是评判给定的、已经生成的单词序列是否流畅合理。因此严格地说,序列生成问题的本质并非是语言模型凭空``生成''序列,而是使用语言模型在所有候选的单词序列中找出其中的``最佳''序列。实际上,在序列生成任务中寻找最佳单词序列的本质是经典的{\small\bfnew{搜索问题}}\index{搜索问题}(Search Problem)\index{Search Problem}。也就是,在所有可能的序列中,根据语言模型的打分找出最佳的序列作为生成的结果。下面将着重介绍序列生成背后的搜索问题建模方法,以及在序列生成里常用的搜索技术。相关的搜索算法也会在后续统计机器翻译{{\red XXX}})和神经机器翻译({\red XXX}章)中被深入使用。
\parinterval 这类问题也对应着一大类自然语言处理问题\ \dash\ {\small\bfnew{序列生成}}\index{序列生成}(Sequence Generation)\index{Sequence Generation}。机器翻译就是一个非常典型的序列生成问题:在机器翻译任务中,需要根据源语言序列直接生成与之相对应的目标语言序列。但是语言模型本身并不能``制造''单词序列的,它的基础功能是评判给定的、已经生成的单词序列是否流畅合理。因此严格地说,序列生成问题的本质并非是语言模型凭空``生成''序列,而是使用语言模型在所有候选的单词序列中找出其中的``最佳''序列。实际上,在序列生成任务中寻找最佳单词序列的本质是经典的{\small\bfnew{搜索问题}}\index{搜索问题}(Search Problem)\index{Search Problem}。也就是,在所有可能的序列中,根据语言模型的打分找出最佳的序列作为生成的结果。下面将着重介绍序列生成背后的搜索问题建模方法,以及在序列生成里常用的搜索技术。相关的搜索算法也会在后续统计机器翻译和神经机器翻译中被深入使用。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -793,7 +786,7 @@ w^{'} = \argmax_{w \in \chi}\textrm{P}(w)
\end{figure}
%-------------------------------------------
\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}
\parinterval 在这种序列生成方式的基础上,实现对候选序列的搜索过程通常有两种方法\ \dash\ 深度优先遍历和宽度优先遍历\cite{cormen1990introduction}。在深度优先遍历中,每次从词表中可重复地选择一个单词,然后从左至右地生成序列,直到<eos>被选择,此时一个完整的单词序列被生成出来。然后从<eos>回退到上一个单词,选择之前没有被选择到的候选单词代替<eos>,并继续挑选下一个单词直到<eos>被选到,如果上一个单词的所有可能都被枚举过,那么回退到上上一个单词继续枚举,直到回退到<sos>,这时候枚举结束。在宽度优先遍历中,每次不是只选择一个单词而是枚举所有单词。一个简单的例子是一个只有两个单词\{a, b\}的词表,从<sos>开始枚举所有单词,可以生成:
\begin{eqnarray}
......@@ -822,7 +815,7 @@ w^{'} = \argmax_{w \in \chi}\textrm{P}(w)
\end{itemize}
\parinterval 当任务对单词序列长度没有限制时,上述两种方法枚举出的单词序列也是无穷无尽的。因此这两种枚举策略并不具备完备性而且会导致枚举过程无法停止。由于日常生活中通常不会见到特别长的句子,因此可以通过限制单词序列的最大长度来避免这个问题。一旦单词序列的最大长度被确定,以上两种枚举策略就可以在一定时间内枚举出所有可能的单词序列,因而一定可以找到最优的单词序列,即具备最优性。
\vspace{0.5em}
%------------------------------------------------------
\begin{table}[htp]{
\begin{center}
......@@ -870,7 +863,7 @@ w^{'} = \argmax_{w \in \chi}\textrm{P}(w)
\label{eq:2-41}
\end{eqnarray}
\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
......@@ -906,7 +899,7 @@ w^{'} = \argmax_{w \in \chi}\textrm{P}(w)
\end{figure}
%-------------------------------------------
\parinterval 类似的思想也可以应用于宽度优先搜索,由于宽度优先搜索每次都选择了所有的单词,因此简单使用边的权重来选择单词是不可行的。重新回顾宽度优先搜索的过程:它维护了一个未结束单词序列的集合,每次扩展单词序列后根据长度往集合里面加入单词序列。而搜索问题关心的是单词序列的得分而非其长度。因此可以在搜索过程中维护未结束的单词序列集合里每个单词序列的得分,然后优先扩展该集合中得分最高的单词序列,使得扩展过程中未结束的单词序列集合包含的单词序列分数逐渐变高。如图\ref{fig:2-17}所示,由于``<sos>\ I''在图右侧的5条路径中分数最高,因此下一步将要扩展$W_2$一列``I''节点后的全部后继。图中绿色节点表示下一步将要扩展的节点。普通宽度优先搜索中,扩展后生成的单词序列长度相同,但是分数却参差不齐。而改造后的宽度优先搜索则不同,它会优先生成得分较高的单词序列,这种宽度优先搜索也叫做{\small\bfnew{一致代价搜索}}\index{一致代价搜索}(Uniform-cost Search)\index{Uniform-cost Search}\cite{russell2003artificial}
\parinterval 类似的思想也可以应用于宽度优先搜索,由于宽度优先搜索每次都选择了所有的单词,因此简单使用边的权重来选择单词是不可行的。重新回顾宽度优先搜索的过程:它维护了一个未结束单词序列的集合,每次扩展单词序列后根据长度往集合里面加入单词序列。而搜索问题关心的是单词序列的得分而非其长度。因此可以在搜索过程中维护未结束的单词序列集合里每个单词序列的得分,然后优先扩展该集合中得分最高的单词序列,使得扩展过程中未结束的单词序列集合包含的单词序列分数逐渐变高。如图\ref{fig:2-17}所示,由于``<sos>\ I''在图右侧的5条路径中分数最高,因此下一步将要扩展$W_2$一列``I''节点后的全部后继。图中绿色节点表示下一步将要扩展的节点。普通宽度优先搜索中,扩展后生成的单词序列长度相同,但是分数却参差不齐。而改造后的宽度优先搜索则不同,它会优先生成得分较高的单词序列,这种宽度优先搜索也叫做{\small\bfnew{一致代价搜索}}\index{一致代价搜索}(Uniform-Cost Search)\index{Uniform-Cost Search}\cite{russell2003artificial}
\parinterval 上面描述的两个改进后的搜索方法属于无信息搜索策略\cite{sahni1978fundamentals},因为他们依赖的信息仍然来源于问题本身而不是问题以外。改进后的方法虽然有机会更快寻找到分数最高的单词序列,也就是最优解。但是由于没有一个通用的办法来判断当前找到的解是否为最优解,这种策略不会在找到最优解后自动停止,因此最终仍然需要枚举所有可能的单词序列,寻找最优解需要的时间复杂度没有产生任何改变。尽管如此,如果只是需要一个相对好的解而不是最优解,改进后的搜索策略仍然是比原始枚举策略更优秀的算法。
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论