Commit 23482cdc by 单韦乔

合并分支 'shanweiqiao' 到 'caorunzhe'

第一章、第二章修改

查看合并请求 !52
parents 3932b1fb 997cc9cb
...@@ -9,11 +9,11 @@ ...@@ -9,11 +9,11 @@
\begin{scope} \begin{scope}
{ {
{\footnotesize {\footnotesize
\node [anchor=north west] (rule1) at (0,0) {\textbf{1: If} 源=``我'', \textbf{then} 译=``I''}; \node [anchor=north west] (rule1) at (0,0) {\textbf{1: If} 源=“我”, \textbf{then} 译=``I''};
\node [anchor=north west] (rule2) at ([yshift=0.1em]rule1.south west) {\textbf{2: If} 源=``你'', \textbf{then} 译=``you''}; \node [anchor=north west] (rule2) at ([yshift=0.1em]rule1.south west) {\textbf{2: If} 源=“你”, \textbf{then} 译=``you''};
\node [anchor=north west] (rule3) at ([yshift=0.1em]rule2.south west) {\textbf{3: If} 源=``感到 满意'',}; \node [anchor=north west] (rule3) at ([yshift=0.1em]rule2.south west) {\textbf{3: If} 源=“感到\ 满意”,};
\node [anchor=north west] (rule3part2) at ([yshift=0.5em]rule3.south west) {\textbf{\hspace{0.95em} then} 译=``be satisfied with''}; \node [anchor=north west] (rule3part2) at ([yshift=0.5em]rule3.south west) {\textbf{\hspace{0.95em} then} 译=``be satisfied with''};
\node [anchor=north west] (rule4) at ([yshift=0.1em]rule3part2.south west) {\textbf{4: If} 源=``对 ... 动词[表态度]''}; \node [anchor=north west] (rule4) at ([yshift=0.1em]rule3part2.south west) {\textbf{4: If} 源=“对 ... 动词[表态度]”};
\node [anchor=north west] (rule4part2) at ([yshift=0.5em]rule4.south west) {\textbf{\hspace{0.95em} then} 调序[动词 + 对象]}; \node [anchor=north west] (rule4part2) at ([yshift=0.5em]rule4.south west) {\textbf{\hspace{0.95em} then} 调序[动词 + 对象]};
\node [anchor=north west] (rule5) at ([yshift=0.1em]rule4part2.south west) {\textbf{5: If} 译文主语是``I''}; \node [anchor=north west] (rule5) at ([yshift=0.1em]rule4part2.south west) {\textbf{5: If} 译文主语是``I''};
\node [anchor=north west] (rule5part2) at ([yshift=0.5em]rule5.south west) {\textbf{\hspace{0.95em} then} be动词为``am/was''}; \node [anchor=north west] (rule5part2) at ([yshift=0.5em]rule5.south west) {\textbf{\hspace{0.95em} then} be动词为``am/was''};
......
...@@ -9,11 +9,11 @@ ...@@ -9,11 +9,11 @@
{ {
\begin{scope} \begin{scope}
{\scriptsize {\scriptsize
\node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=``他 在 哪 ?''}; \node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=“他\ \ \ ?”};
\node [anchor=north west] (example1part2) at ([yshift=0.2em]example1.south west) {\hspace{1em} 译=``Where is he ?''}; \node [anchor=north west] (example1part2) at ([yshift=0.2em]example1.south west) {\hspace{1em} 译=``Where is he ?''};
\node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=``我 真高兴''}; \node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=“我\ 真高兴”};
\node [anchor=north west] (example2part2) at ([yshift=0.2em]example2.south west) {\hspace{1em} 译=``I'm so happy''}; \node [anchor=north west] (example2part2) at ([yshift=0.2em]example2.south west) {\hspace{1em} 译=``I'm so happy''};
\node [anchor=north west] (example3) at ([yshift=0.1em]example2part2.south west) {\textbf{3:} 源=``出发 !''}; \node [anchor=north west] (example3) at ([yshift=0.1em]example2part2.south west) {\textbf{3:} 源=“出发\ !”};
\node [anchor=north west] (example3part2) at ([yshift=0.2em]example3.south west) {\hspace{1em} 译=``Let's go!''}; \node [anchor=north west] (example3part2) at ([yshift=0.2em]example3.south west) {\hspace{1em} 译=``Let's go!''};
\node [anchor=north west] (example4) at ([yshift=0.1em]example3part2.south west) {\hspace{1em} ...}; \node [anchor=north west] (example4) at ([yshift=0.1em]example3part2.south west) {\hspace{1em} ...};
\node [anchor=north west] (example5) at ([yshift=0.1em]example4.south west) {\hspace{1em}\quad}; \node [anchor=north west] (example5) at ([yshift=0.1em]example4.south west) {\hspace{1em}\quad};
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
{ {
\begin{scope}[yshift=-1.0in] \begin{scope}[yshift=-1.0in]
\node [] (part1label) at (0,0) {\includegraphics[scale=0.10]{./Chapter1/Figures/figure-oil.jpg}}; \node [] (part1label) at (0,0) {\includegraphics[scale=0.10]{./Chapter1/Figures/figure-oil.jpg}};
\node [anchor=north west] (part1text) at ([xshift=-1em,yshift=0.0em]part1label.south west) {\begin{tabular}{l}{\color{red}{资源}}:可以使机器翻译\\系统运行的``汽油''\end{tabular}}; \node [anchor=north west] (part1text) at ([xshift=-1em,yshift=0.0em]part1label.south west) {\begin{tabular}{l}{\color{red}{资源}}:可以使机器翻译\\系统运行的“汽油”\end{tabular}};
\end{scope} \end{scope}
} }
......
...@@ -10,9 +10,9 @@ ...@@ -10,9 +10,9 @@
\begin{scope} \begin{scope}
{ {
{\footnotesize {\footnotesize
\node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=``什么 时候 开始 ?''}; \node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=“什么\ 时候\ 开始\ ?”};
\node [anchor=north west] (example1part2) at ([yshift=0.5em]example1.south west) {\hspace{1em} 译=``When will it start ?''}; \node [anchor=north west] (example1part2) at ([yshift=0.5em]example1.south west) {\hspace{1em} 译=``When will it start ?''};
\node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=``我 对 他 感到 高兴''}; \node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=“我\ \ \ 感到\ 高兴”};
\node [anchor=north west] (example2part2) at ([yshift=0.5em]example2.south west) {\hspace{1em} 译=``I am happy with him''}; \node [anchor=north west] (example2part2) at ([yshift=0.5em]example2.south west) {\hspace{1em} 译=``I am happy with him''};
\node [anchor=north west] (example3) at ([yshift=0.1em]example2part2.south west) {\hspace{1em} ...}; \node [anchor=north west] (example3) at ([yshift=0.1em]example2part2.south west) {\hspace{1em} ...};
\node [anchor=south west] (examplebaselabel) at (example1.north west) {{\color{ublue} 资源1:翻译实例库}}; \node [anchor=south west] (examplebaselabel) at (example1.north west) {{\color{ublue} 资源1:翻译实例库}};
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
} }
{ {
\draw[double,->,thick,ublue] (e3.south)--([yshift=-1.2em]e3.south) node[pos=0.5,right,xshift=0.2em,yshift=0.2em] (step1) {\color{red}{\tiny{`你'替换`他'}}}; \draw[double,->,thick,ublue] (e3.south)--([yshift=-1.2em]e3.south) node[pos=0.5,right,xshift=0.2em,yshift=0.2em] (step1) {\color{red}{\tiny{‘你’替换‘他’}}};
\draw[->,dotted,thick,red] ([xshift=-0.1em]entry2.east)..controls +(east:4) and +(west:4)..([yshift=-0.6em,xshift=-0.5em]e3.south) ; \draw[->,dotted,thick,red] ([xshift=-0.1em]entry2.east)..controls +(east:4) and +(west:4)..([yshift=-0.6em,xshift=-0.5em]e3.south) ;
} }
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
} }
{ {
\draw[double,->,thick,ublue] (e3.south)--([yshift=-1.2em]e3.south) node[pos=0.5,right,xshift=0.2em,yshift=0.2em] (step1) {\color{red}{\tiny{`满意'替换`高兴'}}}; \draw[double,->,thick,ublue] (e3.south)--([yshift=-1.2em]e3.south) node[pos=0.5,right,xshift=0.2em,yshift=0.2em] (step1) {\color{red}{\tiny{‘满意’替换‘高兴’}}};
\draw[->,dotted,thick,red] ([xshift=-1.2em,yshift=-0.6em]entry3.north east)..controls +(east:2) and +(west:3)..([yshift=-0.6em,xshift=-0.5em]e3.south) ; \draw[->,dotted,thick,red] ([xshift=-1.2em,yshift=-0.6em]entry3.north east)..controls +(east:2) and +(west:3)..([yshift=-0.6em,xshift=-0.5em]e3.south) ;
} }
......
...@@ -134,9 +134,9 @@ ...@@ -134,9 +134,9 @@
\parinterval 随着电子计算机的发展,研究者开始尝试使用计算机来进行自动翻译。1954年,美国乔治敦大学在IBM公司支持下,启动了第一次真正的机器翻译实验。翻译的目标是将几个简单的俄语句子翻译成为英文,翻译系统包含6条翻译规则和250词汇。这次翻译实验中测试了50个化学文本句子,取得了初步成功。在某种意义上来说,这个实验显示了采用基于词典和翻译规则的方法可以实现机器翻译过程。虽然只是取得了初步成功,但却一下子引起了苏联、英国和日本研究机构的机器翻译研究热,大大推动了早期机器翻译研究进展。 \parinterval 随着电子计算机的发展,研究者开始尝试使用计算机来进行自动翻译。1954年,美国乔治敦大学在IBM公司支持下,启动了第一次真正的机器翻译实验。翻译的目标是将几个简单的俄语句子翻译成为英文,翻译系统包含6条翻译规则和250词汇。这次翻译实验中测试了50个化学文本句子,取得了初步成功。在某种意义上来说,这个实验显示了采用基于词典和翻译规则的方法可以实现机器翻译过程。虽然只是取得了初步成功,但却一下子引起了苏联、英国和日本研究机构的机器翻译研究热,大大推动了早期机器翻译研究进展。
\parinterval 1957年,Noam\ Chomsky描述了转换生成语法,他使用数学方法来研究自然语言,建立了包括上下文有关语法、上下文无关语法等4种类型的语法\upcite{Chomsky1957Syntactic}。这些工作最终为今天计算机中广泛使用的“形式语言”奠定了基础。而他的思想也深深地影响了同时期的语言学和自然语言处理领域的学者,似乎他的“普遍语法”观点:“人类从出生开始就有某种可以让人类学会任何语言的机制”成为了一个普遍真理,也是在这种认识下,早期基于规则的机器翻译被认为是更加合乎逻辑的。 \parinterval 1957年,Noam\ Chomsky$Syntactic\ Structures$描述了转换生成语法,他使用数学方法来研究自然语言,建立了包括上下文有关语法、上下文无关语法等4种类型的语法\upcite{Chomsky1957Syntactic}。这些工作最终为今天计算机中广泛使用的“形式语言”奠定了基础。而他的思想也深深地影响了同时期的语言学和自然语言处理领域的学者,似乎他的“普遍语法”观点:“人类从出生开始就有某种可以让人类学会任何语言的机制”成为了一个普遍真理,也是在这种认识下,早期基于规则的机器翻译被认为是更加合乎逻辑的。
\parinterval 虽然在这段时间,使用机器进行翻译的议题越加火热,但是事情并不总是一帆风顺,怀疑论者对机器翻译一直存有质疑,并很容易找出一些机器翻译无法解决的问题。自然地,人们也期望能够客观地评估一下机器翻译的可行性。当时美国基金资助组织委任自动语言处理咨询会承担了这项任务。经过近两年的调查与分析,该委员会于1966年11月公布了一个题为$LANGUAGE AND MACHINES$的报告(图\ref{fig:1-5}),即ALPAC报告。该报告全面否定了机器翻译的可行性,为机器翻译的研究泼了一盆冷水。 \parinterval 虽然在这段时间,使用机器进行翻译的议题越加火热,但是事情并不总是一帆风顺,怀疑论者对机器翻译一直存有质疑,并很容易找出一些机器翻译无法解决的问题。自然地,人们也期望能够客观地评估一下机器翻译的可行性。当时美国基金资助组织委任自动语言处理咨询会承担了这项任务。经过近两年的调查与分析,该委员会于1966年11月公布了一个题为$LANGUAGE\ \ AND\ \ MACHINES$的报告(图\ref{fig:1-5}),即ALPAC报告。该报告全面否定了机器翻译的可行性,为机器翻译的研究泼了一盆冷水。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -171,7 +171,7 @@ ...@@ -171,7 +171,7 @@
\subsection{机器翻译的爆发} \subsection{机器翻译的爆发}
\parinterval 2005年拉开了统计机器翻译发展十年黄金时期的序幕。在这一时期,各种基于统计机器翻译模型层出不穷,经典的基于短语的模型和基于句法的模型也先后被提出。在2013年以后,机器学习的进步带来了机器翻译技术的进一步提升。特别是基于神经网络的深度学习方法在机器视觉、语音识别中被成功应用,带来性能的飞跃式提升。很快,相关模型和方法也被用于机器翻译。对于机器翻译任务来说,深度学习的成功也是一种必然,原因如下: \parinterval 2005年拉开了统计机器翻译发展十年黄金时期的序幕。在这一时期,各种基于统计机器翻译模型层出不穷,经典的基于短语的模型和基于句法的模型也先后被提出。在2013年以后,机器学习的进步带来了机器翻译技术的进一步提升。特别是基于神经网络的深度学习方法在机器视觉、语音识别中被成功应用,带来性能的飞跃式提升。很快,相关模型和方法也被用于机器翻译。{\red 对于机器翻译任务来说,深度学习方法的广泛使用也是一种必然},原因如下:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -266,7 +266,7 @@ ...@@ -266,7 +266,7 @@
\parinterval\ref{fig:1-9}展示了一个使用转换法进行翻译的实例。这里,利用一个简单的汉译英规则库完成对句子“我对你感到满意”的翻译。当翻译“我”时,从规则库中找到规则1,该规则表示遇到单词“我”就翻译为``I'';类似地,也可以从规则库中找到规则4,该规则表示翻译调序,即将单词``you''放到``be satisfied with''后面。这种通过规则表示词汇的对应关系,并在翻译中使用的思想也为统计机器翻译方法提供了思路。如统计机器翻译中,基于短语的翻译模型使用短语对对原文进行替换,详细描述可以参考第四章。 \parinterval\ref{fig:1-9}展示了一个使用转换法进行翻译的实例。这里,利用一个简单的汉译英规则库完成对句子“我对你感到满意”的翻译。当翻译“我”时,从规则库中找到规则1,该规则表示遇到单词“我”就翻译为``I'';类似地,也可以从规则库中找到规则4,该规则表示翻译调序,即将单词``you''放到``be satisfied with''后面。这种通过规则表示词汇的对应关系,并在翻译中使用的思想也为统计机器翻译方法提供了思路。如统计机器翻译中,基于短语的翻译模型使用短语对对原文进行替换,详细描述可以参考第四章。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[t] \begin{figure}[htp]
\centering \centering
\input{./Chapter1/Figures/figure-example-rbmt} \input{./Chapter1/Figures/figure-example-rbmt}
\caption{基于规则的机器翻译的示例图(左:规则库;右:规则匹配结果)} \caption{基于规则的机器翻译的示例图(左:规则库;右:规则匹配结果)}
...@@ -427,10 +427,10 @@ ...@@ -427,10 +427,10 @@
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 相比统计机器翻译,神经机器翻译的优势体现在其不需要特征工程,所有信息由神经网络自动从原始输入中提取。而且,相比离散化的表示,词和句子的分布式连续空间表示可以为建模提供更为丰富的信息,同时可以使用相对成熟的基于梯度的方法优化模型。此外,神经网络的存储需求较小,天然适合小设备上的应用。但是,神经机器翻译也存在问题。{\red 如果用的话,enumerate的格式要改一下} \parinterval 相比统计机器翻译,神经机器翻译的优势体现在其不需要特征工程,所有信息由神经网络自动从原始输入中提取。而且,相比离散化的表示,词和句子的分布式连续空间表示可以为建模提供更为丰富的信息,同时可以使用相对成熟的基于梯度的方法优化模型。此外,神经网络的存储需求较小,天然适合小设备上的应用。但是,神经机器翻译也存在问题。
\begin{enumerate} \begin{enumerate}
\vspace{0.5em} \vspace{0.5em}
\item 虽然脱离了特征工程,但神经网络的结构需要人工设计,即使设计好结构,系统的调优、超参数的设置等仍然依赖大量的实验 \item 虽然脱离了特征工程,但神经网络的结构需要人工设计,即使设计好结构,系统的调优、超参数的设置等仍然依赖大量的实验。
\vspace{0.5em} \vspace{0.5em}
\item 神经机器翻译现在缺乏可解释性,其过程和人的认知差异很大,通过人的先验知识干预的程度差。 \item 神经机器翻译现在缺乏可解释性,其过程和人的认知差异很大,通过人的先验知识干预的程度差。
\vspace{0.5em} \vspace{0.5em}
...@@ -493,15 +493,15 @@ ...@@ -493,15 +493,15 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsection{经典书籍} \subsection{经典书籍}
\parinterval 首先,推荐一本书《Statistical Machine Translation》\upcite{koehn2009statistical},其作者是机器翻译领域著名学者Philipp Koehn教授。该书是机器翻译领域内的经典之作,介绍了统计机器翻译技术的进展。该书从语言学和概率学两个方面介绍了统计机器翻译的构成要素,然后介绍了统计机器翻译的主要模型:基于词、基于短语和基于树的模型,以及机器翻译评价、语言建模、判别式训练等方法。此外,作者在该书的最新版本中增加了神经机器翻译的章节,方便研究人员全面了解机器翻译的最新发展趋势\upcite{DBLP:journals/corr/abs-1709-07809} \parinterval 首先,推荐一本书$Statistical\ Machine\ Translation$\upcite{koehn2009statistical},其作者是机器翻译领域著名学者Philipp Koehn教授。该书是机器翻译领域内的经典之作,介绍了统计机器翻译技术的进展。该书从语言学和概率学两个方面介绍了统计机器翻译的构成要素,然后介绍了统计机器翻译的主要模型:基于词、基于短语和基于树的模型,以及机器翻译评价、语言建模、判别式训练等方法。此外,作者在该书的最新版本中增加了神经机器翻译的章节,方便研究人员全面了解机器翻译的最新发展趋势\upcite{DBLP:journals/corr/abs-1709-07809}
\parinterval 《Foundations of Statistical Natural Language Processing》\upcite{manning1999foundations}中文译名《统计自然语言处理基础》,作者是自然语言处理领域的权威Chris Manning教授和Hinrich Sch$\ddot{\textrm{u}}$tze教授。该书对统计自然语言处理方法进行了全面介绍。书中讲解了统计自然语言处理所需的语言学和概率论基础知识,介绍了机器翻译评价、语言建模、判别式训练以及整合语言学信息等基础方法。其中也包含了构建自然语言处理工具所需的基本理论和算法,提供了对数学和语言学基础内容广泛而严格的覆盖,以及统计方法的详细讨论。 \parinterval $Foundations\ of\ Statistical\ Natural\ Language\ Processing$\upcite{manning1999foundations}中文译名《统计自然语言处理基础》,作者是自然语言处理领域的权威Chris Manning教授和Hinrich Sch$\ddot{\textrm{u}}$tze教授。该书对统计自然语言处理方法进行了全面介绍。书中讲解了统计自然语言处理所需的语言学和概率论基础知识,介绍了机器翻译评价、语言建模、判别式训练以及整合语言学信息等基础方法。其中也包含了构建自然语言处理工具所需的基本理论和算法,提供了对数学和语言学基础内容广泛而严格的覆盖,以及统计方法的详细讨论。
\parinterval 《统计自然语言处理(第2版)》\upcite{宗成庆2013统计自然语言处理}由中国科学院自动化所宗成庆教授所著。该书中系统介绍了统计自然语言处理的基本概念、理论方法和最新研究进展,既有对基础知识和理论模型的介绍,也有对相关问题的研究背景、实现方法和技术现状的详细阐述。可供从事自然语言处理、机器翻译等研究的相关人员参考。 \parinterval 《统计自然语言处理(第2版)》\upcite{宗成庆2013统计自然语言处理}由中国科学院自动化所宗成庆教授所著。该书中系统介绍了统计自然语言处理的基本概念、理论方法和最新研究进展,既有对基础知识和理论模型的介绍,也有对相关问题的研究背景、实现方法和技术现状的详细阐述。可供从事自然语言处理、机器翻译等研究的相关人员参考。
\parinterval Ian Goodfellow、Yoshua Bengio、Aaron Courville三位机器学习领域的学者所写的《Deep Learning》\upcite{Goodfellow-et-al-2016}也是值得一读的参考书。其讲解了有关深度学习常用的方法,其中很多都会在深度学习模型设计和使用中用到。同时在该书的应用一章中也简单讲解了神经机器翻译的任务定义和发展过程。 \parinterval Ian Goodfellow、Yoshua Bengio、Aaron Courville三位机器学习领域的学者所写的《Deep Learning》\upcite{Goodfellow-et-al-2016}也是值得一读的参考书。其讲解了有关深度学习常用的方法,其中很多都会在深度学习模型设计和使用中用到。同时在该书的应用一章中也简单讲解了神经机器翻译的任务定义和发展过程。
\parinterval 《Neural Network Methods for Natural Language Processing》\upcite{goldberg2017neural}是Yoav Goldberg编写的面向自然语言处理的深度学习参考书。相比《Deep Learning》,该书聚焦在自然语言处理中的深度学习方法,内容更加易读,非常适合刚入门自然语言处理及深度学习应用的人员参考。 \parinterval $Neural\ Network\ Methods\ for\ Natural\ Language\ Processing$\upcite{goldberg2017neural}是Yoav Goldberg编写的面向自然语言处理的深度学习参考书。相比《Deep Learning》,该书聚焦在自然语言处理中的深度学习方法,内容更加易读,非常适合刚入门自然语言处理及深度学习应用的人员参考。
\parinterval 《机器学习》\upcite{周志华2016机器学习}由南京大学周志华教授所著,作为机器学习领域入门教材,该书尽可能地涵盖了机器学习基础知识的各个方面,试图尽可能少地使用数学知识介绍机器学习方法与思想。 \parinterval 《机器学习》\upcite{周志华2016机器学习}由南京大学周志华教授所著,作为机器学习领域入门教材,该书尽可能地涵盖了机器学习基础知识的各个方面,试图尽可能少地使用数学知识介绍机器学习方法与思想。
......
...@@ -11,16 +11,16 @@ ...@@ -11,16 +11,16 @@
\begin{tikzpicture} \begin{tikzpicture}
\node [anchor=west] (label1) at (0,0) {总词数:$6 + 8 + 5 = 20$}; \node [anchor=west] (label1) at (0,0) {总词数:$6 + 8 + 5 = 20$};
\node [anchor=north west] (p1) at (label1.south west) {$\textrm{P}(\textrm{``很''})=1/20=0.05$}; \node [anchor=north west] (p1) at (label1.south west) {$P(\textrm{``很''})=1/20=0.05$};
\node [anchor=north west] (p2) at (p1.south west) {$\textrm{P}(\textrm{``。''})=3/20=0.15$}; \node [anchor=north west] (p2) at (p1.south west) {$P(\textrm{``。''})=3/20=0.15$};
\node [anchor=north west] (p3) at (p2.south west) {$\textrm{P}(\textrm{``确实''})=1/20=0.05$}; \node [anchor=north west] (p3) at (p2.south west) {$P(\textrm{``确实''})=1/20=0.05$};
\node [anchor=north west] (label11) at ([xshift=18.0em,yshift=1.63em]label1.south west) {更多数据-总词数:100K $\sim$ 1M}; \node [anchor=north west] (label11) at ([xshift=18.0em,yshift=1.63em]label1.south west) {更多数据-总词数:100K $\sim$ 1M};
\node [anchor=north west] (p12) at (label11.south west) {$\textrm{P}(\textrm{``很''})=0.000010$}; \node [anchor=north west] (p12) at (label11.south west) {$P(\textrm{``很''})=0.000010$};
\node [anchor=north west] (p22) at (p12.south west) {$\textrm{P}(\textrm{``。''})=0.001812$}; \node [anchor=north west] (p22) at (p12.south west) {$P(\textrm{``。''})=0.001812$};
\node [anchor=north west] (p32) at (p22.south west) {$\textrm{P}(\textrm{``确实''})=0.000001$}; \node [anchor=north west] (p32) at (p22.south west) {$P(\textrm{``确实''})=0.000001$};
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
\begin{axis}[ \begin{axis}[
width=12cm, width=12cm,
height=4cm, height=4cm,
xlabel={{$\textrm{P}(x)$}}, xlabel={{$P(x)$}},
ylabel={{$\textrm{I}(x)$}}, ylabel={{$\textrm{I}(x)$}},
ylabel style={yshift=-1.5em,font=\footnotesize}, ylabel style={yshift=-1.5em,font=\footnotesize},
xlabel style={yshift=0.3em,font=\footnotesize}, xlabel style={yshift=0.3em,font=\footnotesize},
...@@ -23,7 +23,7 @@ xticklabel style={font=\small}, %坐标轴字体大小 ...@@ -23,7 +23,7 @@ xticklabel style={font=\small}, %坐标轴字体大小
yticklabel style={font=\small} yticklabel style={font=\small}
] ]
\addplot[draw=ublue,samples=100,thick] {-log2(x)}; \addplot[draw=ublue,samples=100,thick] {-log2(x)};
\legend{\footnotesize{$\textrm{I}(x) = -\log \textrm{P}(x)$}} \legend{\footnotesize{$\textrm{I}(x) = -\log P(x)$}}
\end{axis} \end{axis}
\end{tikzpicture} \end{tikzpicture}
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
\parinterval 连续变量是在其取值区间内连续取值,无法被一一列举,具有无限个取值的变量。例如,图书馆的开馆时间是8:30-22:00,用$X$代表某人进入图书馆的时间,时间的取值范围是[8:30,22:00]这个时间区间,$X$就是一个连续变量。 \parinterval 连续变量是在其取值区间内连续取值,无法被一一列举,具有无限个取值的变量。例如,图书馆的开馆时间是8:30-22:00,用$X$代表某人进入图书馆的时间,时间的取值范围是[8:30,22:00]这个时间区间,$X$就是一个连续变量。
\parinterval {\small\bfnew{概率}}\index{概率}(Probability)\index{Probability}是度量随机事件呈现其每个可能状态的可能性的数值,本质上它是一个测度函数\upcite{mao-prob-book-2011}\upcite{kolmogorov2018foundations}。概率的大小表征了随机事件在一次试验中发生的可能性大小。用$P(\cdot )$表示一个随机事件的可能性,即事件发生的概率。比如$P(\textrm{太阳从东方升起})$表示``太阳从东方升起的可能性'',同理,$P(A=B)$ 表示的就是``$A=B$'' 这件事的可能性。 \parinterval {\small\bfnew{概率}}\index{概率}(Probability)\index{Probability}是度量随机事件呈现其每个可能状态的可能性的数值,本质上它是一个测度函数\upcite{mao-prob-book-2011}\upcite{kolmogorov2018foundations}。概率的大小表征了随机事件在一次试验中发生的可能性大小。用$P(\cdot )$表示一个随机事件的可能性,即事件发生的概率。比如$P(\textrm{太阳从东方升起})$表示“太阳从东方升起的可能性”,同理,$P(A=B)$ 表示的就是``$A=B$'' 这件事的可能性。
\parinterval 在实际问题中,往往需要得到随机变量的概率值。但是,真实的概率值可能是无法准确知道的,这时就需要对概率进行{\small\sffamily\bfseries{估计}}\index{估计},得到的结果是概率的{\small\sffamily\bfseries{估计值}}\index{估计值}(Estimate)\index{Estimate}。在概率论中,一个很简单的方法是利用相对频度作为概率的估计值。如果$\{x_1,x_2,\dots,x_n \}$是一个试验的样本空间,在相同情况下重复试验$N$次,观察到样本$x_i (1\leq{i}\leq{n})$的次数为$n (x_i )$,那么$x_i$在这$N$次试验中的相对频率是$\frac{n(x_i )}{N}$。当$N$越来越大时,相对概率也就越来越接近真实概率$P(x_i)$,即$\lim_{N \to \infty}\frac{n(x_i )}{N}=P(x_i)$。 实际上,很多概率模型都等同于相对频度估计,比如,对于一个服从多项式分布的变量的极大似然估计就可以用相对频度估计实现。 \parinterval 在实际问题中,往往需要得到随机变量的概率值。但是,真实的概率值可能是无法准确知道的,这时就需要对概率进行{\small\sffamily\bfseries{估计}}\index{估计},得到的结果是概率的{\small\sffamily\bfseries{估计值}}\index{估计值}(Estimate)\index{Estimate}。在概率论中,一个很简单的方法是利用相对频度作为概率的估计值。如果$\{x_1,x_2,\dots,x_n \}$是一个试验的样本空间,在相同情况下重复试验$N$次,观察到样本$x_i (1\leq{i}\leq{n})$的次数为$n (x_i )$,那么$x_i$在这$N$次试验中的相对频率是$\frac{n(x_i )}{N}$。当$N$越来越大时,相对概率也就越来越接近真实概率$P(x_i)$,即$\lim_{N \to \infty}\frac{n(x_i )}{N}=P(x_i)$。 实际上,很多概率模型都等同于相对频度估计,比如,对于一个服从多项式分布的变量的极大似然估计就可以用相对频度估计实现。
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
\parinterval 概率密度函数反映了变量在某个区间内的概率变化快慢,概率密度函数的值是概率的变化率,该连续变量的概率也就是对概率密度函数求积分得到的结果。设$f(x) \geq 0$是连续变量$X$的概率密度函数,$X$的分布函数就可以用如下公式定义: \parinterval 概率密度函数反映了变量在某个区间内的概率变化快慢,概率密度函数的值是概率的变化率,该连续变量的概率也就是对概率密度函数求积分得到的结果。设$f(x) \geq 0$是连续变量$X$的概率密度函数,$X$的分布函数就可以用如下公式定义:
\begin{eqnarray} \begin{eqnarray}
F(x)=\int_{-\infty}^x f(x)dx F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\label{eq:2-1} \label{eq:2-1}
\end{eqnarray} \end{eqnarray}
...@@ -108,7 +108,7 @@ P(X=x)=\sum_{y} P(X=x,Y=y) ...@@ -108,7 +108,7 @@ P(X=x)=\sum_{y} P(X=x,Y=y)
\parinterval 对于连续变量,边缘概率$P(X)$需要通过积分得到,如下式所示 \parinterval 对于连续变量,边缘概率$P(X)$需要通过积分得到,如下式所示
\begin{eqnarray} \begin{eqnarray}
P(X=x)=\int P(x,y)dy P(X=x)=\int P(x,y)\textrm{d}y
\label{eq:2-4} \label{eq:2-4}
\end{eqnarray} \end{eqnarray}
...@@ -247,13 +247,13 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\ ...@@ -247,13 +247,13 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\
\begin{example} \begin{example}
确定性和不确定性的事件 确定性和不确定性的事件
\qquad\qquad\quad``太阳从东方升起'' \qquad\qquad\quad“太阳从东方升起”
\qquad\qquad\quad``明天天气多云'' \qquad\qquad\quad“明天天气多云”
\label{eg:2-1} \label{eg:2-1}
\end{example} \end{example}
\parinterval 在这两句话中,``太阳从东方升起''是一件确定性事件(在地球上),几乎不需要查阅更多信息就可以确认,因此这件事的信息熵相对较低;而``明天天气多云''这件事,需要关注天气预报,才能大概率确定这件事,它的不确定性很高,因而它的信息熵也就相对较高。因此,信息熵也是对事件不确定性的度量。进一步,定义{\small\bfnew{自信息}}\index{自信息}(Self-Information)\index{Self-Information}为一个事件$X$的自信息的表达式为:{\red 改一下X与x的关系} \parinterval 在这两句话中,“太阳从东方升起”是一件确定性事件(在地球上),几乎不需要查阅更多信息就可以确认,因此这件事的信息熵相对较低;而“明天天气多云”这件事,需要关注天气预报,才能大概率确定这件事,它的不确定性很高,因而它的信息熵也就相对较高。因此,信息熵也是对事件不确定性的度量。进一步,定义{\small\bfnew{自信息}}\index{自信息}(Self-Information)\index{Self-Information}为一个事件$X$的自信息的表达式为:{\red 改一下X与x的关系}
\begin{eqnarray} \begin{eqnarray}
\textrm{I}(x)=-\log P(x) \textrm{I}(x)=-\log P(x)
\label{eq:2-13} \label{eq:2-13}
...@@ -285,10 +285,10 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\ ...@@ -285,10 +285,10 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\
\subsubsection{KL距离} \subsubsection{KL距离}
\parinterval 如果同一个随机变量$X$上有两个概率分布P$(x)$和Q$(x)$,那么可以使用KL距离(``Kullback-Leibler''散度)来衡量这两个分布的不同,这种度量就是{\small\bfnew{相对熵}}\index{相对熵}(Relative Entropy)\index{Relative Entropy}。其公式如下: \parinterval 如果同一个随机变量$X$上有两个概率分布$P(x)$$Q(x)$,那么可以使用KL距离(``Kullback-Leibler''散度)来衡量这两个分布的不同,这种度量就是{\small\bfnew{相对熵}}\index{相对熵}(Relative Entropy)\index{Relative Entropy}。其公式如下:
\begin{eqnarray} \begin{eqnarray}
\textrm{D}_{\textrm{KL}}(P\parallel \textrm{Q}) & = & \sum_{x \in \textrm{X}} [ P(x)\log \frac{P(x) }{ \textrm{Q}(x) } ] \nonumber \\ \textrm{D}_{\textrm{KL}}(P\parallel Q) & = & \sum_{x \in \textrm{X}} [ P(x)\log \frac{P(x) }{ Q(x) } ] \nonumber \\
& = & \sum_{x \in \textrm{X} }[ P(x)(\log P(x)-\log \textrm{Q}(x))] & = & \sum_{x \in \textrm{X} }[ P(x)(\log P(x)-\log Q(x))]
\label{eq:2-15} \label{eq:2-15}
\end{eqnarray} \end{eqnarray}
...@@ -296,9 +296,9 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\ ...@@ -296,9 +296,9 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item 非负性,即$\textrm{D}_{\textrm{KL}} (P \parallel \textrm{Q}) \ge 0$,等号成立条件是$P$$\textrm{Q}$相等。 \item 非负性,即$\textrm{D}_{\textrm{KL}} (P \parallel Q) \ge 0$,等号成立条件是$P$$Q$相等。
\vspace{0.5em} \vspace{0.5em}
\item 不对称性,即$\textrm{D}_{\textrm{KL}} (P \parallel \textrm{Q}) \neq \textrm{D}_{\textrm{KL}} (\textrm{Q} \parallel P)$,所以$\textrm{KL}$距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用$\textrm{D}_{\textrm{KL}} (P \parallel \textrm{Q})+\textrm{D}_{\textrm{KL}} (\textrm{Q} \parallel P)$作为度量两个分布差异性的函数。 \item 不对称性,即$\textrm{D}_{\textrm{KL}} (P \parallel Q) \neq \textrm{D}_{\textrm{KL}} (Q \parallel P)$,所以$\textrm{KL}$距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用$\textrm{D}_{\textrm{KL}} (P \parallel Q)+\textrm{D}_{\textrm{KL}} (Q \parallel P)$作为度量两个分布差异性的函数。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -310,11 +310,11 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\ ...@@ -310,11 +310,11 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\
\parinterval {\small\bfnew{交叉熵}}\index{交叉熵}(Cross-Entropy)\index{Cross-Entropy}是一个与KL距离密切相关的概念,它的公式是: \parinterval {\small\bfnew{交叉熵}}\index{交叉熵}(Cross-Entropy)\index{Cross-Entropy}是一个与KL距离密切相关的概念,它的公式是:
\begin{eqnarray} \begin{eqnarray}
\textrm{H}(P,\textrm{Q})=-\sum_{x \in \textrm{X}} [P(x) \log \textrm{Q}(x) ] \textrm{H}(P,Q)=-\sum_{x \in \textrm{X}} [P(x) \log Q(x) ]
\label{eq:2-16} \label{eq:2-16}
\end{eqnarray} \end{eqnarray}
\parinterval 结合相对熵公式可知,交叉熵是KL距离公式中的右半部分。因此,当概率分布P$(x)$固定时,求关于Q的交叉熵的最小值等价于求KL距离的最小值。从实践的角度来说,交叉熵与KL距离的目的相同:都是用来描述两个分布的差异,由于交叉熵计算上更加直观方便,因此在机器翻译中被广泛应用。 \parinterval 结合相对熵公式可知,交叉熵是KL距离公式中的右半部分。因此,当概率分布$P(x)$固定时,求关于$Q$的交叉熵的最小值等价于求KL距离的最小值。从实践的角度来说,交叉熵与KL距离的目的相同:都是用来描述两个分布的差异,由于交叉熵计算上更加直观方便,因此在机器翻译中被广泛应用。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION % NEW SECTION
...@@ -336,27 +336,27 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\ ...@@ -336,27 +336,27 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 此时玩家的胜利似乎只能来源于运气。不过,请注意,这里的假设``随便选一个数字''本身就是一个概率模型,它对骰子的六个面的出现做了均匀分布假设。 \parinterval 此时玩家的胜利似乎只能来源于运气。不过,请注意,这里的假设“随便选一个数字”本身就是一个概率模型,它对骰子的六个面的出现做了均匀分布假设。
\begin{eqnarray} \begin{eqnarray}
P(``1'')=P(``2'')=...=P(``5'')=P(``6'')=1/6 P(\text{``1''})=P(\text{``2''})=...=P(\text{``5''})=P(\text{``6''})=1/6
\label{eq:2-17} \label{eq:2-17}
\end{eqnarray} \end{eqnarray}
\vspace{-0.5em} \vspace{-0.5em}
\parinterval 但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。如果骰子的六个面不均匀呢?这里可以用一种更加``聪明''的方式定义一种新的模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。描述如下: \parinterval 但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。如果骰子的六个面不均匀呢?这里可以用一种更加“聪明”的方式定义一种新的模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。描述如下:
\begin{eqnarray} \begin{eqnarray}
P(``1'') &=&\theta_1 \nonumber \\ P(\text{``1''}) &=&\theta_1 \nonumber \\
P(``2'') &=&\theta_2 \nonumber \\ P(\text{``2''}) &=&\theta_2 \nonumber \\
P(``3'') &=&\theta_3 \nonumber \\ P(\text{``3''}) &=&\theta_3 \nonumber \\
P(``4'') &=&\theta_4 \nonumber \\ P(\text{``4''}) &=&\theta_4 \nonumber \\
P(``5'') &=&\theta_5 \nonumber \\ P(\text{``5''}) &=&\theta_5 \nonumber \\
P(``6'') &=&1-\sum_{1 \leq i \leq 5}\theta_i \qquad \lhd \textrm {归一性} P(\text{``6''}) &=&1-\sum_{1 \leq i \leq 5}\theta_i \qquad \lhd \textrm {归一性}
\label{eq:2-18} \label{eq:2-18}
\end{eqnarray} \end{eqnarray}
\noindent 这里,$\theta_1 \sim \theta_5$可以被看作是模型的参数,因此这个模型的自由度是5。对于这样的模型,参数确定了,模型也就确定了。但是,新的问题来了,在定义骰子每个面的概率后,如何求出具体的概率值呢?一种常用的方法是,从大量实例中学习模型参数,这个方法也是常说的{\small\bfnew{参数估计}}\index{参数估计}(Parameter Estimation)\index{Parameter Estimation}。可以将这个不均匀的骰子先实验性地掷很多次,这可以被看作是独立同分布的若干次采样,比如$X$ 次,发现``1'' 出现$X_1$ 次,``2'' 出现$X_2$ 次,以此类推,得到了各个面出现的次数。假设掷骰子中每个面出现的概率符合多项式分布,通过简单的概率论知识可以知道每个面出现概率的极大似然估计为: \noindent 这里,$\theta_1 \sim \theta_5$可以被看作是模型的参数,因此这个模型的自由度是5。对于这样的模型,参数确定了,模型也就确定了。但是,新的问题来了,在定义骰子每个面的概率后,如何求出具体的概率值呢?一种常用的方法是,从大量实例中学习模型参数,这个方法也是常说的{\small\bfnew{参数估计}}\index{参数估计}(Parameter Estimation)\index{Parameter Estimation}。可以将这个不均匀的骰子先实验性地掷很多次,这可以被看作是独立同分布的若干次采样,比如$X$ 次,发现``1'' 出现$X_1$ 次,``2'' 出现$X_2$ 次,以此类推,得到了各个面出现的次数。假设掷骰子中每个面出现的概率符合多项式分布,通过简单的概率论知识可以知道每个面出现概率的极大似然估计为:
\begin{eqnarray} \begin{eqnarray}
P(``i'')=\frac {X_i}{X} P(\text{``}i\text{''})=\frac {X_i}{X}
\label{eq:2-19} \label{eq:2-19}
\end{eqnarray} \end{eqnarray}
...@@ -382,7 +382,7 @@ P(``i'')=\frac {X_i}{X} ...@@ -382,7 +382,7 @@ P(``i'')=\frac {X_i}{X}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval {\small\sffamily\bfseries{世界是不公平的}}{\red 此处将上帝改成了世界},上面这个掷骰子游戏也是如此。在``公平''的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的``不公平''实际上这是客观事物中蕴含的一种{\small\sffamily\bfseries{偏置}}\index{偏置}(Bias)\index{Bias},也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题中绝大多数都存在着偏置。比如,当翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。 \parinterval {\small\sffamily\bfseries{世界是不公平的}}{\red 此处将上帝改成了世界},上面这个掷骰子游戏也是如此。在“公平”的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的“不公平”实际上这是客观事物中蕴含的一种{\small\sffamily\bfseries{偏置}}\index{偏置}(Bias)\index{Bias},也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题中绝大多数都存在着偏置。比如,当翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\parinterval 在处理语言问题时,为了评价哪些词更容易在一个句子中出现,或者哪些句子在某些语境下更合理,常常也会使用统计方法对词或句子出现的可能性建模。与掷骰子游戏类似,词出现的概率可以这样理解:每个单词的出现就好比掷一个巨大的骰子,与前面的例子中有所不同的是: \parinterval 在处理语言问题时,为了评价哪些词更容易在一个句子中出现,或者哪些句子在某些语境下更合理,常常也会使用统计方法对词或句子出现的可能性建模。与掷骰子游戏类似,词出现的概率可以这样理解:每个单词的出现就好比掷一个巨大的骰子,与前面的例子中有所不同的是:
...@@ -438,7 +438,7 @@ P(``i'')=\frac {X_i}{X} ...@@ -438,7 +438,7 @@ P(``i'')=\frac {X_i}{X}
\end{figure} \end{figure}
%------------------------------------------- %-------------------------------------------
\parinterval 通过这个学习过程,就可以得到每个词出现的概率,成功使用统计方法对``单词的频率''这个问题进行建模。 \parinterval 通过这个学习过程,就可以得到每个词出现的概率,成功使用统计方法对“单词的频率”这个问题进行建模。
\parinterval 那么又该如何计算一个句子的概率呢?在自然语言处理领域中,句子可以被看作是由单词组成的序列,因而句子的概率可以被建模为若干单词的联合概率,即$P(w_1 w_2 w_3...w_m)$ \parinterval 那么又该如何计算一个句子的概率呢?在自然语言处理领域中,句子可以被看作是由单词组成的序列,因而句子的概率可以被建模为若干单词的联合概率,即$P(w_1 w_2 w_3...w_m)$
...@@ -477,7 +477,7 @@ P(w_1 w_2...w_m)=P(w_1)P(w_2|w_1)P(w_3|w_1 w_2)...P(w_m|w_1 w_2...w_{m-1}) ...@@ -477,7 +477,7 @@ P(w_1 w_2...w_m)=P(w_1)P(w_2|w_1)P(w_3|w_1 w_2)...P(w_m|w_1 w_2...w_{m-1})
这样,$w_1 w_2...w_m$的生成可以被看作是逐个生成每个单词的过程,即首先生成$w_1$,然后根据$w_1$再生成$w_2$,然后根据$w_1 w_2$再生成$w_3$,以此类推,直到根据所有前$m-1$个词生成序列的最后一个单词$w_m$。这个模型把联合概率$P(w_1 w_2...w_m)$分解为多个条件概率的乘积,虽然对生成序列的过程进行了分解,但是模型的复杂度和以前是一样的,比如,$P(w_m|w_1 w_2...w_{m-1})$ 仍然不好计算。 这样,$w_1 w_2...w_m$的生成可以被看作是逐个生成每个单词的过程,即首先生成$w_1$,然后根据$w_1$再生成$w_2$,然后根据$w_1 w_2$再生成$w_3$,以此类推,直到根据所有前$m-1$个词生成序列的最后一个单词$w_m$。这个模型把联合概率$P(w_1 w_2...w_m)$分解为多个条件概率的乘积,虽然对生成序列的过程进行了分解,但是模型的复杂度和以前是一样的,比如,$P(w_m|w_1 w_2...w_{m-1})$ 仍然不好计算。
\parinterval 换一个角度看,$P(w_m|w_1 w_2...w_{m-1})$体现了一种基于``历史''的单词生成模型,也就是把前面生成的所有单词作为``历史'',并参考这个``历史''生成当前单词。但是这个``历史''的长度和整个序列长度是相关的,也是一种长度变化的历史序列。为了化简问题,一种简单的想法是使用定长历史,比如,每次只考虑前面$n-1$个历史单词来生成当前单词,这就是$n$-gram语言模型。这个模型的数学描述如下: \parinterval 换一个角度看,$P(w_m|w_1 w_2...w_{m-1})$体现了一种基于“历史”的单词生成模型,也就是把前面生成的所有单词作为“历史”,并参考这个“历史”生成当前单词。但是这个“历史”的长度和整个序列长度是相关的,也是一种长度变化的历史序列。为了化简问题,一种简单的想法是使用定长历史,比如,每次只考虑前面$n-1$个历史单词来生成当前单词,这就是$n$-gram语言模型。这个模型的数学描述如下:
\begin{eqnarray} \begin{eqnarray}
P(w_m|w_1 w_2...w_{m-1}) \approx P(w_m|w_{m-n+1}...w_{m-1}) P(w_m|w_1 w_2...w_{m-1}) \approx P(w_m|w_{m-n+1}...w_{m-1})
\label{eq:2-21} \label{eq:2-21}
...@@ -545,7 +545,7 @@ P(w_m|w_{m-n+1}...w_{m-1})=\frac{\textrm{count}(w_{m-n+1}...w_m)}{\textrm{count} ...@@ -545,7 +545,7 @@ P(w_m|w_{m-n+1}...w_{m-1})=\frac{\textrm{count}(w_{m-n+1}...w_m)}{\textrm{count}
\subsection{未登录词和平滑算法}\label{sec2:smoothing} \subsection{未登录词和平滑算法}\label{sec2:smoothing}
\parinterval 在式\ref{eq:2-23}所示的例子中,如果语料中从没有``确实''和``现在''两个词连续出现的情况,那么使用2-gram计算切分``确实/现在/数据/很/多''的概率时,会出现如下情况 \parinterval 在式\ref{eq:2-23}所示的例子中,如果语料中从没有“确实”和“现在”两个词连续出现的情况,那么使用2-gram计算切分“确实/现在/数据/很/多”的概率时,会出现如下情况
\begin{eqnarray} \begin{eqnarray}
P(\textrm{``现在''}|\textrm{``确实''}) & = & \frac{\textrm{count}(\textrm{``确实}\,\textrm{现在''})}{\textrm{count}(\textrm{``确实''})} \nonumber \\ P(\textrm{``现在''}|\textrm{``确实''}) & = & \frac{\textrm{count}(\textrm{``确实}\,\textrm{现在''})}{\textrm{count}(\textrm{``确实''})} \nonumber \\
& = & \frac{0}{\textrm{count}(\textrm{``确实''})} \nonumber \\ & = & \frac{0}{\textrm{count}(\textrm{``确实''})} \nonumber \\
...@@ -553,7 +553,7 @@ P(\textrm{``现在''}|\textrm{``确实''}) & = & \frac{\textrm{count}(\textrm{` ...@@ -553,7 +553,7 @@ P(\textrm{``现在''}|\textrm{``确实''}) & = & \frac{\textrm{count}(\textrm{`
\label{eq:2-24} \label{eq:2-24}
\end{eqnarray} \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] \begin{figure}[htp]
...@@ -564,7 +564,7 @@ P(\textrm{``现在''}|\textrm{``确实''}) & = & \frac{\textrm{count}(\textrm{` ...@@ -564,7 +564,7 @@ P(\textrm{``现在''}|\textrm{``确实''}) & = & \frac{\textrm{count}(\textrm{`
\end{figure} \end{figure}
%--------------------------- %---------------------------
\parinterval 为了解决未登录词引起的零概率问题,常用的做法是对模型进行平滑处理,也就是给可能出现的情况一个非零的概率,使得模型不会对整个序列给出零概率。平滑可以用``劫富济贫''这一思想理解,在保证所有情况的概率和为1的前提下,使极低概率的部分可以从高概率的部分分配到一部分概率,从而达到平滑的目的。 \parinterval 为了解决未登录词引起的零概率问题,常用的做法是对模型进行平滑处理,也就是给可能出现的情况一个非零的概率,使得模型不会对整个序列给出零概率。平滑可以用“劫富济贫”这一思想理解,在保证所有情况的概率和为1的前提下,使极低概率的部分可以从高概率的部分分配到一部分概率,从而达到平滑的目的。
\parinterval 语言模型使用的平滑算法有很多。在本节中,主要介绍三种平滑方法:加法平滑法、古德-图灵估计法和Kneser-Ney平滑。这些方法也可以被应用到其他任务的概率平滑操作中。 \parinterval 语言模型使用的平滑算法有很多。在本节中,主要介绍三种平滑方法:加法平滑法、古德-图灵估计法和Kneser-Ney平滑。这些方法也可以被应用到其他任务的概率平滑操作中。
...@@ -574,7 +574,7 @@ P(\textrm{``现在''}|\textrm{``确实''}) & = & \frac{\textrm{count}(\textrm{` ...@@ -574,7 +574,7 @@ P(\textrm{``现在''}|\textrm{``确实''}) & = & \frac{\textrm{count}(\textrm{`
\subsubsection{加法平滑方法} \subsubsection{加法平滑方法}
\parinterval {\small\bfnew{加法平滑}}\index{加法平滑}(Additive Smoothing)\index{Additive Smoothing}是一种简单的平滑技术。本小节首先介绍这一方法,希望通过它了解平滑算法的思想。通常情况下,系统研发者会利用采集到的语料库来模拟真实的全部语料库。当然,没有一个语料库能覆盖所有的语言现象。常见的一个问题是,使用的语料无法涵盖所有的词汇。因此,直接依据这样语料所获得的统计信息来获取语言模型就会产生偏差。假设依据某语料$C$ (从未出现`` 确实 现在''二元语法),评估一个已经分好词的句子$S$ =``确实/现在/物价/很/高''的概率。当计算``确实/现在''的概率时,$P(S) = 0$。显然这个结果是不合理的。 \parinterval {\small\bfnew{加法平滑}}\index{加法平滑}(Additive Smoothing)\index{Additive Smoothing}是一种简单的平滑技术。本小节首先介绍这一方法,希望通过它了解平滑算法的思想。通常情况下,系统研发者会利用采集到的语料库来模拟真实的全部语料库。当然,没有一个语料库能覆盖所有的语言现象。常见的一个问题是,使用的语料无法涵盖所有的词汇。因此,直接依据这样语料所获得的统计信息来获取语言模型就会产生偏差。假设依据某语料$C$ (从未出现“确实\ 现在''二元语法),评估一个已经分好词的句子$S$ =“确实/现在/物价/很/高''的概率。当计算“确实/现在''的概率时,$P(S) = 0$。显然这个结果是不合理的。
\parinterval 加法平滑方法假设每个$n$-gram出现的次数比实际统计次数多$\theta$次,$0 \le \theta\le 1$。这样,计算概率的时候分子部分不会为0。重新计算$P(\textrm{现在}|\textrm{确实})$,可以得到: \parinterval 加法平滑方法假设每个$n$-gram出现的次数比实际统计次数多$\theta$次,$0 \le \theta\le 1$。这样,计算概率的时候分子部分不会为0。重新计算$P(\textrm{现在}|\textrm{确实})$,可以得到:
...@@ -756,7 +756,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll} ...@@ -756,7 +756,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\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
...@@ -764,13 +764,13 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll} ...@@ -764,13 +764,13 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\subsection{搜索问题的建模} \subsection{搜索问题的建模}
\parinterval 具体来说,基于语言模型的序列生成问题的本质是在无数任意排列的单词序列中搜索出最合理、最流畅的``最优解''。这里单词序列$w = w_1 w_2...w_m$的合理性和流畅性可以通过语言模型的打分$P(w)$衡量。因此在序列生成中,基于语言模型的搜索问题可以被建模为如下形式: \parinterval 具体来说,基于语言模型的序列生成问题的本质是在无数任意排列的单词序列中搜索出最合理、最流畅的“最优解”。这里单词序列$w = w_1 w_2...w_m$的合理性和流畅性可以通过语言模型的打分$P(w)$衡量。因此在序列生成中,基于语言模型的搜索问题可以被建模为如下形式:
\begin{eqnarray} \begin{eqnarray}
w^{'} = \argmax_{w \in \chi}P(w) w^{'} = \argmax_{w \in \chi}P(w)
\label{eq:2-40} \label{eq:2-40}
\end{eqnarray} \end{eqnarray}
\parinterval 这里arg即argument,$\argmax_{w \in \chi}P(w)$表示想要找到使语言模型得分$P(w)$达到最大的单词序列$w$$\chi$是搜索问题的解空间 \footnote[1]{解空间,是一个算法执行后,所得到的所有解构成的集合。},在这里是所有可能的单词序列$w$的集合。$w^{'}$可以被看做该搜索问题中的``最优解'',即``出现概率最大的单词序列'' \parinterval 这里arg即argument,$\argmax_{w \in \chi}P(w)$表示想要找到使语言模型得分$P(w)$达到最大的单词序列$w$$\chi$是搜索问题的解空间 \footnote[1]{解空间,是一个算法执行后,所得到的所有解构成的集合。},在这里是所有可能的单词序列$w$的集合。$w^{'}$可以被看做该搜索问题中的“最优解”,即“出现概率最大的单词序列”
\parinterval 在序列生成问题中,最简单的策略就是对词表中的词汇进行任意组合,通过这种枚举的方式得到全部可能的序列。但是,很多时候并没有预先指定序列的长度,比如,机器翻译中译文的长度是无法预先知道的。那么怎样判断一个序列何时完成了生成过程呢?回顾人类书写文字的过程可以发现,句子的生成首先从一片空白开始,然后从左到右逐词生成,除了第一个单词,所有单词的生成都依赖于前面已经生成的单词。为了方便计算机实现,通常定义单词序列从一个特殊的单词<sos>后开始生成。同样地,一个单词序列的结束也用一个特殊的单词<eos>来表示。 \parinterval 在序列生成问题中,最简单的策略就是对词表中的词汇进行任意组合,通过这种枚举的方式得到全部可能的序列。但是,很多时候并没有预先指定序列的长度,比如,机器翻译中译文的长度是无法预先知道的。那么怎样判断一个序列何时完成了生成过程呢?回顾人类书写文字的过程可以发现,句子的生成首先从一片空白开始,然后从左到右逐词生成,除了第一个单词,所有单词的生成都依赖于前面已经生成的单词。为了方便计算机实现,通常定义单词序列从一个特殊的单词<sos>后开始生成。同样地,一个单词序列的结束也用一个特殊的单词<eos>来表示。
...@@ -829,9 +829,9 @@ w^{'} = \argmax_{w \in \chi}P(w) ...@@ -829,9 +829,9 @@ w^{'} = \argmax_{w \in \chi}P(w)
}\end{table} }\end{table}
%------------------------------------------------------ %------------------------------------------------------
\parinterval 此时上述生成策略虽然可以满足完备性和最优性,但其仍然算不上是优秀的生成策略,因为这两种算法在时间复杂度和空间复杂度上的表现很差,如表\ref{tab:2-3}所示。其中$|V|$为词表大小,$m$为序列长度,$\ast$表示``当且仅当在所有可能的单词序列数目有限下成立''。值得注意的是,在之前的遍历过程中,除了在序列开头一定会挑选<sos>之外,其他位置每次可挑选的单词并不只有词表中的单词,还有结束符号<eos>,因此实际上生成过程中每个位置的单词候选数量为$|V|+1$ \parinterval 此时上述生成策略虽然可以满足完备性和最优性,但其仍然算不上是优秀的生成策略,因为这两种算法在时间复杂度和空间复杂度上的表现很差,如表\ref{tab:2-3}所示。其中$|V|$为词表大小,$m$为序列长度,$\ast$表示“当且仅当在所有可能的单词序列数目有限下成立”。值得注意的是,在之前的遍历过程中,除了在序列开头一定会挑选<sos>之外,其他位置每次可挑选的单词并不只有词表中的单词,还有结束符号<eos>,因此实际上生成过程中每个位置的单词候选数量为$|V|+1$
\parinterval 那么是否能改进枚举策略使得它更高效呢?答案是肯定的。首先从图\ref{fig:2-14}可以看到,对于一个限制序列长度为4的搜索过程,生成某个单词序列的过程实际上就是访问解空间树\footnote[2]{解空间树是搜索路径的树型表示,它包含了搜索过程中可生成的全部序列。该树的根节点恒为$<$sos$>$,代表序列均从$<$sos$>$开始。该树结构中非叶子节点的兄弟节点有$|V|$个,由词表和结束符号$<$eos$>$构成。}中从根节点<sos>开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词$i$也就是在上图选择$w_i$一列的一个节点,语言模型就可以为当前的树节点$w_i$给出一个分值,即$P(w_i | w_1 w_2...w_{i-1})$ \parinterval 那么是否能改进枚举策略使得它更高效呢?答案是肯定的。首先从图\ref{fig:2-14}可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树\footnote[2]{解空间树是搜索路径的树型表示,它包含了搜索过程中可生成的全部序列。该树的根节点恒为$<$sos$>$,代表序列均从$<$sos$>$开始。该树结构中非叶子节点的兄弟节点有$|V|$个,由词表和结束符号$<$eos$>$构成。}中从根节点<sos>开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词$i$也就是在上图选择$w_i$一列的一个节点,语言模型就可以为当前的树节点$w_i$给出一个分值,即$P(w_i | w_1 w_2...w_{i-1})$
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -900,7 +900,7 @@ w^{'} = \argmax_{w \in \chi}P(w) ...@@ -900,7 +900,7 @@ w^{'} = \argmax_{w \in \chi}P(w)
\parinterval 上面描述的两个改进后的搜索方法属于无信息搜索策略\upcite{sahni1978fundamentals},因为他们依赖的信息仍然来源于问题本身而不是问题以外。改进后的方法虽然有机会更快寻找到分数最高的单词序列,也就是最优解。但是由于没有一个通用的办法来判断当前找到的解是否为最优解,这种策略不会在找到最优解后自动停止,因此最终仍然需要枚举所有可能的单词序列,寻找最优解需要的时间复杂度没有产生任何改变。尽管如此,如果只是需要一个相对好的解而不是最优解,改进后的搜索策略仍然是比原始枚举策略更优秀的算法。 \parinterval 上面描述的两个改进后的搜索方法属于无信息搜索策略\upcite{sahni1978fundamentals},因为他们依赖的信息仍然来源于问题本身而不是问题以外。改进后的方法虽然有机会更快寻找到分数最高的单词序列,也就是最优解。但是由于没有一个通用的办法来判断当前找到的解是否为最优解,这种策略不会在找到最优解后自动停止,因此最终仍然需要枚举所有可能的单词序列,寻找最优解需要的时间复杂度没有产生任何改变。尽管如此,如果只是需要一个相对好的解而不是最优解,改进后的搜索策略仍然是比原始枚举策略更优秀的算法。
\parinterval 此外,由于搜索过程中将语言模型的打分作为搜索树的节点权重,另一种改进思路是:能否借助语言模型的特殊性质来对搜索树进行{\small\bfnew{剪枝}}\index{剪枝}(Pruning)\index{Pruning},从而避免在搜索空间中访问一些不可能产生比当前解更好的结果的区域,提高搜索策略在实际运用当中的效率。简单来说,剪枝是一种可以缩小搜索空间的手段,比如,在搜索的过程中,动态的``丢弃''一些搜索路径,从而减少搜索的总代价。剪枝的程度在一定范围内影响了搜索系统的效率,剪枝越多搜索效率越高,一般找到最优解的可能性也越低;反之,搜索效率越低,但是找到最优解的可能性越大。在{\chapterten}中介绍的贪婪搜索和束搜索都可以被看作是剪枝方法的一种特例。 \parinterval 此外,由于搜索过程中将语言模型的打分作为搜索树的节点权重,另一种改进思路是:能否借助语言模型的特殊性质来对搜索树进行{\small\bfnew{剪枝}}\index{剪枝}(Pruning)\index{Pruning},从而避免在搜索空间中访问一些不可能产生比当前解更好的结果的区域,提高搜索策略在实际运用当中的效率。简单来说,剪枝是一种可以缩小搜索空间的手段,比如,在搜索的过程中,动态的“丢弃”一些搜索路径,从而减少搜索的总代价。剪枝的程度在一定范围内影响了搜索系统的效率,剪枝越多搜索效率越高,一般找到最优解的可能性也越低;反之,搜索效率越低,但是找到最优解的可能性越大。在{\chapterten}中介绍的贪婪搜索和束搜索都可以被看作是剪枝方法的一种特例。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION % NEW SUBSUB-SECTION
...@@ -978,11 +978,11 @@ w^{'} = \argmax_{w \in \chi}P(w) ...@@ -978,11 +978,11 @@ w^{'} = \argmax_{w \in \chi}P(w)
\begin{adjustwidth}{1em}{} \begin{adjustwidth}{1em}{}
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item建模方面,本章介绍的语言建模采用的是基于人工先验知识进行模型设计的思路。也就是,问题所表达的现象被``一步一步''生成出来。这是一种典型的生成式建模思想,它把要解决的问题看作一些观测结果的隐含变量(比如,句子是观测结果,分词结果是隐含在背后的变量),之后通过对隐含变量生成观测结果的过程进行建模,以达到对问题进行数学描述的目的。这类模型一般需要依赖一些独立性假设,假设的合理性对最终的性能有较大影响。相对于{\small\sffamily\bfseries{生成模型}}\index{生成模型}(Generative Model)\index{Generative Model},另一类方法是{\small\sffamily\bfseries{判别模型}}\index{判别模型}(Discriminative Model)\index{Discriminative Model},它直接描述了从隐含变量生成观测结果的过程,这样对问题的建模更加直接,同时这类模型可以更加灵活地引入不同的特征\upcite{DBLP:conf/acl/OchN02}。判别模型在自然语言处理中也有广泛应用\upcite{shannon1948mathematical}\upcite{ng2002discriminative}。 在本书的第四章也会使用到判别式模型。 \item{\small\sffamily\bfseries{建模}}方面,本章介绍的语言建模采用的是基于人工先验知识进行模型设计的思路。也就是,问题所表达的现象被“一步一步”生成出来。这是一种典型的生成式建模思想,它把要解决的问题看作一些观测结果的隐含变量(比如,句子是观测结果,分词结果是隐含在背后的变量),之后通过对隐含变量生成观测结果的过程进行建模,以达到对问题进行数学描述的目的。这类模型一般需要依赖一些独立性假设,假设的合理性对最终的性能有较大影响。相对于{\small\sffamily\bfseries{生成模型}}\index{生成模型}(Generative Model)\index{Generative Model},另一类方法是{\small\sffamily\bfseries{判别模型}}\index{判别模型}(Discriminative Model)\index{Discriminative Model},它直接描述了从隐含变量生成观测结果的过程,这样对问题的建模更加直接,同时这类模型可以更加灵活地引入不同的特征\upcite{DBLP:conf/acl/OchN02}。判别模型在自然语言处理中也有广泛应用\upcite{shannon1948mathematical}\upcite{ng2002discriminative}。 在本书的第四章也会使用到判别式模型。
\vspace{0.5em} \vspace{0.5em}
\item 从现在自然语言处理的前沿看,基于端到端学习的深度学习方法在很多任务中都取得了领先的性能。语言模型同样可以使用这些方法,而且在近些年取得了巨大成功\upcite{DBLP:conf/nips/BengioDV00}。关于神经语言模型的内容,会在{\chapternine}进行进一步介绍。这里更多地关注了语言模型的基本问题和求解思路,因为对问题的建模是自然语言处理的基础,对问题的本质刻画并不会因为方法的改变而改变。在后续章节还将看到,这里所使用的生成序列的建模方法会作为机器翻译最基本的范式。 \item 从现在{\small\sffamily\bfseries{自然语言处理的前沿}}看,基于端到端学习的深度学习方法在很多任务中都取得了领先的性能。语言模型同样可以使用这些方法,而且在近些年取得了巨大成功\upcite{DBLP:conf/nips/BengioDV00}。关于神经语言模型的内容,会在{\chapternine}进行进一步介绍。这里更多地关注了语言模型的基本问题和求解思路,因为对问题的建模是自然语言处理的基础,对问题的本质刻画并不会因为方法的改变而改变。在后续章节还将看到,这里所使用的生成序列的建模方法会作为机器翻译最基本的范式。
\vspace{0.5em} \vspace{0.5em}
\item 此外,本章结合序列生成任务对搜索技术进行了介绍。而搜索问题也是语言建模和机器翻译中的最基本问题之一。在这些任务中,搜索空间往往较大,因此枚举与大多数全局搜索方法是不可行的。但是,由于启发式搜索不仅具有完备性,并且兼顾了搜索效率,因此也有研究尝试使用启发式搜索\upcite{DBLP:conf/acl/OchUN01,DBLP:conf/acl/WangW97}。同时现在许多基于强化学习的方法本质上也是一种对启发式搜索的引申\upcite{DBLP:conf/nips/HeLXQ0L17}。对于局部搜索算法,除了经常在翻译任务中使用的束搜索\upcite{DBLP:journals/corr/LiMJ16}以外还有模拟退火搜索。他们都可以被理解为是对贪婪搜索的一种改进,并且遗传算法作为随机束搜索的变形也常常被使用。最后,在机器翻译任务中,搜索技术也被应用于结构搜索。其中常用的方法包括使用强化学习的方法\upcite{DBLP:conf/iclr/ZophL17,DBLP:conf/iclr/SchrimpfM0S18}或使用遗传算法搜索网络结构。由于整个模型结构的表示空间巨大,因此在搜索过程中也往往采用束搜索等方式对结构空间进行裁剪,以达到在有限算力条件下搜索到最佳模型结构的目的。 \item 此外,本章结合序列生成任务对{\small\sffamily\bfseries{搜索技术}}进行了介绍。而搜索问题也是语言建模和机器翻译中的最基本问题之一。在这些任务中,搜索空间往往较大,因此枚举与大多数全局搜索方法是不可行的。但是,由于启发式搜索不仅具有完备性,并且兼顾了搜索效率,因此也有研究尝试使用启发式搜索\upcite{DBLP:conf/acl/OchUN01,DBLP:conf/acl/WangW97}。同时现在许多基于强化学习的方法本质上也是一种对启发式搜索的引申\upcite{DBLP:conf/nips/HeLXQ0L17}。对于局部搜索算法,除了经常在翻译任务中使用的束搜索\upcite{DBLP:journals/corr/LiMJ16}以外还有模拟退火搜索。他们都可以被理解为是对贪婪搜索的一种改进,并且遗传算法作为随机束搜索的变形也常常被使用。最后,在机器翻译任务中,搜索技术也被应用于结构搜索。其中常用的方法包括使用强化学习的方法\upcite{DBLP:conf/iclr/ZophL17,DBLP:conf/iclr/SchrimpfM0S18}或使用遗传算法搜索网络结构。由于整个模型结构的表示空间巨大,因此在搜索过程中也往往采用束搜索等方式对结构空间进行裁剪,以达到在有限算力条件下搜索到最佳模型结构的目的。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\end{adjustwidth} \end{adjustwidth}
...@@ -707,7 +707,7 @@ ...@@ -707,7 +707,7 @@
title ={神经网络与深度学习}, title ={神经网络与深度学习},
author ={邱锡鹏}, author ={邱锡鹏},
year ={2020}, year ={2020},
note ={\url{https://nndl.github.io/}} //note ={\url{https://nndl.github.io/}}
} }
@article{tripathi2010approaches, @article{tripathi2010approaches,
...@@ -744,11 +744,11 @@ ...@@ -744,11 +744,11 @@
number = {3}, number = {3},
pages = {379--423}, pages = {379--423},
year = {1948}, year = {1948},
url = {https://doi.org/10.1002/j.1538-7305.1948.tb01338.x}, //url = {https://doi.org/10.1002/j.1538-7305.1948.tb01338.x},
doi = {10.1002/j.1538-7305.1948.tb01338.x}, //doi = {10.1002/j.1538-7305.1948.tb01338.x},
timestamp = {Sat, 30 May 2020 20:01:09 +0200}, //timestamp = {Sat, 30 May 2020 20:01:09 +0200},
biburl = {https://dblp.org/rec/journals/bstj/Shannon48.bib}, //biburl = {https://dblp.org/rec/journals/bstj/Shannon48.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{DBLP:journals/coling/BrownCPPJLMR90, @article{DBLP:journals/coling/BrownCPPJLMR90,
...@@ -766,9 +766,9 @@ ...@@ -766,9 +766,9 @@
number = {2}, number = {2},
pages = {79--85}, pages = {79--85},
year = {1990}, year = {1990},
timestamp = {Mon, 11 May 2020 15:46:08 +0200}, //timestamp = {Mon, 11 May 2020 15:46:08 +0200},
biburl = {https://dblp.org/rec/journals/coling/BrownCPPJLMR90.bib}, //biburl = {https://dblp.org/rec/journals/coling/BrownCPPJLMR90.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{DBLP:journals/coling/BrownPPM94, @article{DBLP:journals/coling/BrownPPM94,
...@@ -782,9 +782,9 @@ ...@@ -782,9 +782,9 @@
number = {2}, number = {2},
pages = {263--311}, pages = {263--311},
year = {1993}, year = {1993},
timestamp = {Mon, 11 May 2020 15:46:10 +0200}, //timestamp = {Mon, 11 May 2020 15:46:10 +0200},
biburl = {https://dblp.org/rec/journals/coling/BrownPPM94.bib}, //biburl = {https://dblp.org/rec/journals/coling/BrownPPM94.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@inproceedings{DBLP:conf/coling/SatoN90, @inproceedings{DBLP:conf/coling/SatoN90,
...@@ -795,10 +795,10 @@ ...@@ -795,10 +795,10 @@
1990, University of Helsinki, Finland, August 20-25, 1990}, 1990, University of Helsinki, Finland, August 20-25, 1990},
pages = {247--252}, pages = {247--252},
year = {1990}, year = {1990},
url = {https://www.aclweb.org/anthology/C90-3044/}, //url = {https://www.aclweb.org/anthology/C90-3044/},
timestamp = {Mon, 16 Sep 2019 17:08:53 +0200}, //timestamp = {Mon, 16 Sep 2019 17:08:53 +0200},
biburl = {https://dblp.org/rec/conf/coling/SatoN90.bib}, //biburl = {https://dblp.org/rec/conf/coling/SatoN90.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{王宝库1991机器翻译系统中一种规则描述语言, @article{王宝库1991机器翻译系统中一种规则描述语言,
...@@ -828,11 +828,11 @@ ...@@ -828,11 +828,11 @@
number = {4}, number = {4},
pages = {623--656}, pages = {623--656},
year = {1948}, year = {1948},
url = {https://doi.org/10.1002/j.1538-7305.1948.tb00917.x}, //url = {https://doi.org/10.1002/j.1538-7305.1948.tb00917.x},
doi = {10.1002/j.1538-7305.1948.tb00917.x}, //doi = {10.1002/j.1538-7305.1948.tb00917.x},
timestamp = {Sat, 30 May 2020 20:01:09 +0200}, //timestamp = {Sat, 30 May 2020 20:01:09 +0200},
biburl = {https://dblp.org/rec/journals/bstj/Shannon48a.bib}, //biburl = {https://dblp.org/rec/journals/bstj/Shannon48a.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
%%%%% chapter 1------------------------------------------------------ %%%%% chapter 1------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
...@@ -1184,11 +1184,11 @@ ...@@ -1184,11 +1184,11 @@
number = {2}, number = {2},
pages = {100--107}, pages = {100--107},
year = {1968}, year = {1968},
url = {https://doi.org/10.1109/TSSC.1968.300136}, //url = {https://doi.org/10.1109/TSSC.1968.300136},
doi = {10.1109/TSSC.1968.300136}, //doi = {10.1109/TSSC.1968.300136},
timestamp = {Sat, 25 Apr 2020 13:57:19 +0200}, //timestamp = {Sat, 25 Apr 2020 13:57:19 +0200},
biburl = {https://dblp.org/rec/journals/tssc/HartNR68.bib}, //biburl = {https://dblp.org/rec/journals/tssc/HartNR68.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@inproceedings{DBLP:conf/nips/HeLXQ0L17, @inproceedings{DBLP:conf/nips/HeLXQ0L17,
...@@ -1211,10 +1211,10 @@ ...@@ -1211,10 +1211,10 @@
Long Beach, CA, {USA}}, Long Beach, CA, {USA}},
pages = {178--187}, pages = {178--187},
year = {2017}, year = {2017},
url = {http://papers.nips.cc/paper/6622-decoding-with-value-networks-for-neural-machine-translation}, //url = {http://papers.nips.cc/paper/6622-decoding-with-value-networks-for-neural-machine-translation},
timestamp = {Fri, 06 Mar 2020 16:58:12 +0100}, //timestamp = {Fri, 06 Mar 2020 16:58:12 +0100},
biburl = {https://dblp.org/rec/conf/nips/HeLXQ0L17.bib}, //biburl = {https://dblp.org/rec/conf/nips/HeLXQ0L17.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{Joshua2001A, @article{Joshua2001A,
...@@ -1225,11 +1225,11 @@ ...@@ -1225,11 +1225,11 @@
number={4}, number={4},
pages={403--434}, pages={403--434},
year={2001}, year={2001},
url={https://doi.org/10.1006/csla.2001.0174}, //url={https://doi.org/10.1006/csla.2001.0174},
doi={10.1006/csla.2001.0174}, //doi={10.1006/csla.2001.0174},
timestamp={Thu, 20 Feb 2020 11:32:09 +0100}, //timestamp={Thu, 20 Feb 2020 11:32:09 +0100},
biburl={https://dblp.org/rec/journals/csl/Goodman01.bib}, //biburl={https://dblp.org/rec/journals/csl/Goodman01.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{jing2019survey, @article{jing2019survey,
...@@ -1247,10 +1247,10 @@ ...@@ -1247,10 +1247,10 @@
booktitle = {Proceedings of the {ACL} Workshop on Data-Driven Methods in Machine booktitle = {Proceedings of the {ACL} Workshop on Data-Driven Methods in Machine
Translation, Toulouse, France, July 7, 2001}, Translation, Toulouse, France, July 7, 2001},
year = {2001}, year = {2001},
url = {https://www.aclweb.org/anthology/W01-1408/}, //url = {https://www.aclweb.org/anthology/W01-1408/},
timestamp = {Wed, 11 Sep 2019 16:27:20 +0200}, //timestamp = {Wed, 11 Sep 2019 16:27:20 +0200},
biburl = {https://dblp.org/rec/conf/acl/OchUN01.bib}, //biburl = {https://dblp.org/rec/conf/acl/OchUN01.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@inproceedings{DBLP:conf/acl/WangW97, @inproceedings{DBLP:conf/acl/WangW97,
...@@ -1267,11 +1267,11 @@ ...@@ -1267,11 +1267,11 @@
pages = {366--372}, pages = {366--372},
publisher = {Morgan Kaufmann Publishers / {ACL}}, publisher = {Morgan Kaufmann Publishers / {ACL}},
year = {1997}, year = {1997},
url = {https://www.aclweb.org/anthology/P97-1047/}, //url = {https://www.aclweb.org/anthology/P97-1047/},
doi = {10.3115/976909.979664}, //doi = {10.3115/976909.979664},
timestamp = {Mon, 18 May 2020 15:12:40 +0200}, //timestamp = {Mon, 18 May 2020 15:12:40 +0200},
biburl = {https://dblp.org/rec/conf/acl/WangW97.bib}, //biburl = {https://dblp.org/rec/conf/acl/WangW97.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{DBLP:journals/corr/LiMJ16, @article{DBLP:journals/corr/LiMJ16,
...@@ -1282,12 +1282,12 @@ ...@@ -1282,12 +1282,12 @@
journal = {CoRR}, journal = {CoRR},
volume = {abs/1611.08562}, volume = {abs/1611.08562},
year = {2016}, year = {2016},
url = {http://arxiv.org/abs/1611.08562}, //url = {http://arxiv.org/abs/1611.08562},
archivePrefix = {arXiv}, archivePrefix = {arXiv},
eprint = {1611.08562}, eprint = {1611.08562},
timestamp = {Mon, 13 Aug 2018 16:48:46 +0200}, //timestamp = {Mon, 13 Aug 2018 16:48:46 +0200},
biburl = {https://dblp.org/rec/journals/corr/LiMJ16.bib}, //biburl = {https://dblp.org/rec/journals/corr/LiMJ16.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@inproceedings{DBLP:conf/iclr/ZophL17, @inproceedings{DBLP:conf/iclr/ZophL17,
...@@ -1298,10 +1298,10 @@ ...@@ -1298,10 +1298,10 @@
Toulon, France, April 24-26, 2017, Conference Track Proceedings}, Toulon, France, April 24-26, 2017, Conference Track Proceedings},
publisher = {OpenReview.net}, publisher = {OpenReview.net},
year = {2017}, year = {2017},
url = {https://openreview.net/forum?id=r1Ue8Hcxg}, //url = {https://openreview.net/forum?id=r1Ue8Hcxg},
timestamp = {Thu, 04 Apr 2019 13:20:08 +0200}, //timestamp = {Thu, 04 Apr 2019 13:20:08 +0200},
biburl = {https://dblp.org/rec/conf/iclr/ZophL17.bib}, //biburl = {https://dblp.org/rec/conf/iclr/ZophL17.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@inproceedings{DBLP:conf/iclr/SchrimpfM0S18, @inproceedings{DBLP:conf/iclr/SchrimpfM0S18,
...@@ -1314,10 +1314,10 @@ ...@@ -1314,10 +1314,10 @@
Vancouver, BC, Canada, April 30 - May 3, 2018, Workshop Track Proceedings}, Vancouver, BC, Canada, April 30 - May 3, 2018, Workshop Track Proceedings},
publisher = {OpenReview.net}, publisher = {OpenReview.net},
year = {2018}, year = {2018},
url = {https://openreview.net/forum?id=BJDCPSJPM}, //url = {https://openreview.net/forum?id=BJDCPSJPM},
timestamp = {Thu, 04 Apr 2019 13:20:09 +0200}, //timestamp = {Thu, 04 Apr 2019 13:20:09 +0200},
biburl = {https://dblp.org/rec/conf/iclr/SchrimpfM0S18.bib}, //biburl = {https://dblp.org/rec/conf/iclr/SchrimpfM0S18.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@inproceedings{DBLP:conf/acl/OchN02, @inproceedings{DBLP:conf/acl/OchN02,
...@@ -1330,11 +1330,11 @@ ...@@ -1330,11 +1330,11 @@
pages = {295--302}, pages = {295--302},
publisher = {{ACL}}, publisher = {{ACL}},
year = {2002}, year = {2002},
url = {https://www.aclweb.org/anthology/P02-1038/}, //url = {https://www.aclweb.org/anthology/P02-1038/},
doi = {10.3115/1073083.1073133}, //doi = {10.3115/1073083.1073133},
timestamp = {Mon, 18 May 2020 15:12:39 +0200}, //timestamp = {Mon, 18 May 2020 15:12:39 +0200},
biburl = {https://dblp.org/rec/conf/acl/OchN02.bib}, //biburl = {https://dblp.org/rec/conf/acl/OchN02.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@inproceedings{DBLP:conf/nips/BengioDV00, @inproceedings{DBLP:conf/nips/BengioDV00,
...@@ -1350,10 +1350,10 @@ ...@@ -1350,10 +1350,10 @@
pages = {932--938}, pages = {932--938},
publisher = {{MIT} Press}, publisher = {{MIT} Press},
year = {2000}, year = {2000},
url = {http://papers.nips.cc/paper/1839-a-neural-probabilistic-language-model}, //url = {http://papers.nips.cc/paper/1839-a-neural-probabilistic-language-model},
timestamp = {Fri, 06 Mar 2020 17:00:45 +0100}, //timestamp = {Fri, 06 Mar 2020 17:00:45 +0100},
biburl = {https://dblp.org/rec/conf/nips/BengioDV00.bib}, //biburl = {https://dblp.org/rec/conf/nips/BengioDV00.bib},
bibsource = {dblp computer science bibliography, https://dblp.org} //bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{Chomsky1957Syntactic, @article{Chomsky1957Syntactic,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论