首页 > 代码库 > Michael Collins NLP课程讲义(翻译:Trey;审校:Shooya)

Michael Collins NLP课程讲义(翻译:Trey;审校:Shooya)

第一章 语言模型

(自然语言处理课程讲义,Michael Collins,哥伦比亚大学)

1.1 介绍

在这一节,我们将考虑一个问题,即如何为一个例句集建立语言模型。语言模型最初从语音识别发展起来;对现代的语言识别系统,语言模型依然起着中心作用。语言模型在其他自然语言处理应用中也被广泛应用。我们将在本章讨论参数估计技术。参数估计技术最初为语言模型而生,在很多场合都有用,譬如在接下来的章节中将会讨论到的标注问题和句法分析问题。

我们的任务如下。假设我们有一个语料库——某特定语言的句子集。譬如说,我们可能持有泰晤士报数年内的文档,又或者我们可能拥有非常大量的网络文档。基于这些语料,我们希望评估一个语言模型的参数。

语言模型定义如下。首先,我们将该门语言中的所有单词组成的集合定义为。例如,当我们为英语建立语言模型时,我们可能会有

 

 

在实际应用中可以是很大的:它可能包含数千甚至数万个单词。我们假设是一个有限集。该语言的一个句子就是一个单词序列

 

 

其中满足,且,且假定是一个特殊符号——STOP(我们假定STOP并非中的元素)。我们将会看到为什么让每个句子以STOP结束是方便的。以下是一些例句:

 

 

我们将定义作为取词于的句子的集合:这是一个无限集,因为句子可以是任意长度的。

我们接着给出如下定义:

定义1 (语言模型) 一个语言模型由一个有限集,以及一个函数构成,其中满足:

 

1. 对任意

2. 此外,

 

因此中句子的概率分布。

 

对从训练语料库中学习语言模型的一种(非常差劲的)方法,我们考虑如下。将句子在训练语料库中出现的次数定义为,训练语料库的句子总数为。于是我们可以将定义为

 

 

然而,这是一个非常差劲的模型:具体地说,它会将任何未在训练语料库中出现过的句子的概率赋为0。因此它无法遍及那些未在训练语料库中出现过的句子。本章的主要技术贡献就是介绍可以遍及未在训练语料库中出现过的句子的方法。

乍看起来语言模型问题是一个特别奇怪的任务,那么究竟我们为什么要考虑这个问题?有几个理由:

 

    1. 语言模型在非常广泛的应用中都有着重要作用,最明显的或许是语音识别和机器翻译。在很多应用中,获得一个好的先验分布来描述句子在该种语言中是否可能,是非常有用的。例如,在语音识别中,语言模型与一个语音模型绑定,语音模型是为单词发音而建的模型:想象这种语言模型的一个方法是,语音模型生成大量候选句子,每个句子都附带着一个概率值;语言模型则基于每个句子在该种语言中有是否更有可能是一个句子,来重新分配概率。

2. 我们所讨论的技术,即用于定义函数以及用于评估从训练用例中习得的语言模型的参数的技术,将会在课程中提到的其他几个场合下非常有用:例如在我们即将讲到的隐马尔可夫模型中,以及用于语法分析的语言模型中,都非常有用。

1.2 马尔可夫模型

现在我们转到一个重要问题:给定一个训练语料库,我们怎样训练出函数?在这一节我们讨论概率论中的一个核心概念——马尔可夫模型;在下一节,我们讨论三元语言模型,三元模型是直接建立在马尔可夫模型之上的一类语义模型。

1.2.1 针对定长序列的马尔可夫模型

考虑一个随机变量序列。每一个随机变量值可以取有限集中的任意值。现在我们假设序列的长度是一个固定的数(例如,)。在下一节我们将描述怎样将处理方法一般化到本身也是随机变量的情况,从而允许不同序列拥有不同的长度。

我们的目标如下:我们希望为任何序列的概率建模,其中。换言之,就是为如下联合概率建模:

 

 

形如的可能序列有个:所以很明显,对合理的,罗列所有个概率值,并不是一个可行的方法。我们希望建立一个更为强大的模型。

在一阶马尔科夫过程中,我们作如下假设,即将模型简化为:

 

 

第一步,即公式1.1,是准确的计算方法:根据概率的链式法则,任意分布都可以写成这个形式。因此我们在这一步的推演中并没有做出任何假设。然而,第二步,即公式1.2,并不必然是准确的计算方法:我们作出了如下假设,即对任意,任意的,有

 

 

这是其中一个(一阶)马尔可夫假设。我们假设序列中第个单词的特征仅依赖与它前一个单词,。更规范地说,给定的值,我们假设的值条件独立于

    在一个二阶马尔可夫过程(二阶马尔可夫过程是建立三元语言模型的基础)中,我们作出一个略微弱一点的假设,即认为序列中的每个单词只依赖于其前两个单词:

 

 

从而整个序列的概率写成

 

 

为了方便,在定义中,我们假设 ,其中是句子中一个特殊的"星"号。

1.2.2 针对变长句子的马尔科夫序列

在上一节,我们假设句子的长度是固定的。然而在很多应用中,是可变的。因此本身也是一个随机变量。为这个长度变量建模的方法有很多:在本节我们讨论一种最为普遍的语言建模方法。

方法是简单的:我们假设序列中第个单词总是等于一个特殊符号——STOP。这个符号只可出现在序列的末尾。我们使用与前面提到的完全相同的假设:例如在二阶马儿可夫假设下,我们有

 

 

对任意的和任意都成立。其中满足

我们已经假设了一个二阶马尔可夫过程,在这个二阶马尔可夫过程中,我们根据如下分布生成符号

 

 

其中中元素,或者,如果它居于句末的话,是一个STOP符号。如果我们生成了STOP符号,那么我们就已经生成了整个序列。否则,我们接着生成序列中的下一个符号。

更规范一点来说,生成句子的过程如下:

 

    1. 初始化

    2. 根据如下分布生成

 

 

    3. 如果,返回序列。否则,令,并转到第2步。

 

至此,我们已经拥有了一个能够生成不定长序列的模型。

1.3 三元语言模型

定义语言模型的方式有多种,但在这一章,我们将关注一个特别重要的例子——三元语言模型。这是上一节所提到的马尔可夫模型在语言建模问题上的直接应用。在这一节,我们给出三元模型的基本定义,讨论三元模型的最大似然参数估计,并最后讨论三元模型的优缺点。

1.3.1 基本定义

正如在马尔可夫模型中,我们将每个句子建模为个随机变量,。长度本身也是一个随机变量(对不同的句子可以取不同的值)。我们总有。在一个二阶马尔可夫模型中,每个句子的概率为

 

 

其中,与此前一样,我们假设

    我们将假设对任意,对任意,对任意

 

 

其中,对任意是模型的一个参数。我们将马上看看怎样从训练语料中得到参数的估计值。于是,对任一序列,我们的模型是以如下形式呈现的:

 

 

这就引出了以下定义:

定义2(三元语言模型) 一个三元语言模型由一个有限集和一个参数组成。其中为满足的任意三元。的值可以看作在二元组后面出现单词的概率。对任意满足,且的句子,在该三元语言模型中,该句子的概率为

 

 

其中,我们定义

 

    例如,对句子

 

 

我们有

 

 

注意到,在这个表达式中,对句子中的每个单词,我们只有一个与之对应的相加项(thedogbarks,和STOP)。每个单词只依赖于其前两个单词:这就是三元假设。

    参数满足如下要求,即对任意三元

 

 

且对任意二元

 

 

因此,定义了在二元上下文的条件下,上的一个分布。

    剩下的主要问题就是如何估计以下所谓的模型的参数:

其中中的任一元素,且。这个模型共有个参数。这看起来是个很大的数字。例如,当(这是一个符合实际的数字,在现代的标准看来,更像是个很小的数字)时,我们有

1.3.2 最大似然估计

我们从最惯常的解决方法——最大似然估计——开始,讨论参数估计问题。我们将会看到,最大似然估计在一个很重要的方面是存在问题的,但我们将会讨论一些相关的,在实践中效果很好的方法,是怎样从最大似然估计中延伸出来。

    首先,约定一些符号。定义为三元组在训练语料中出现的次数:例如,为the dog barks这个由三个单词组成的序列在训练语料中出现的次数。类似地,定义为二元组在语料中出现的次数。于是,对任意的,我们定义

 

 

作为一个例子,我们对的估计会是这样的:

 

 

这个估计是非常自然的:分子是整个三元组the dog barks出现的次数,分母则是二元组the dog出现的次数。我们只是简单地求这两个项的比。

    不幸地,这种参数估计方法会陷入一个非常严重的主题。回忆一下,我们的模型中包含的参数数量非常庞大(例如,对一个大小为10,000的词典,我们有大约个参数)。出于这个原因,我们的很多计数将会是零。这会引致两个问题:

 

  • 由于分子计数为0,在上述估计中,将会出现很多的情况。这将导致很多三元组的概率未被估算:模型的参数数量远多于训练语料库中单词的数量,因此将任何未在训练语料库中出现过的三元组的概率赋为0,似乎都是不合理的。
  • 对分母等于零的情况,这种估算没有给出妥善的定义。

 

我们将简短地看看怎样构思一些经过修改的估算方法来修复这些问题。然而,在此之前,我们首先讨论怎样对语言模型进行评价,并讨论一下三元语言模型的优缺点。

1.3.3 评价语言模型:迷惑度

那么,我们怎样度量一个语言模型的质量呢?一个非常惯用的方法,是评价模型在特别划分出来的数据上的迷惑度。

方法如下。假设我们有一些测试数据,即测试句子,…,。每一个测试句子)是单词序列,其中是第个句子的长度。与以往一样,我们假设每个句子以符号STOP结束。

    很重要的一点是,这些测试句子都是特别划分出来的,他们并非用来估计模型的时候所用的语料的任何一个部分。在这个意义上来说,他们是一些没有见到过的新的句例。

    对任一测试句子,我们可以度量它在语言模型中的概率。一个自然的,用来度量语言模型质量的方法,是计算整个测试句子集的概率和,也就是

 

 

这样做,基于如下直观理由:模型在这方面的质量越高,则模型对未出现过的句子的建模就越好。

    在测试语料上的迷惑度,就是派生于这种质量的一个直接转换。定义为测试语料中单词的总数。更准确地说,在是第个句子的长度这个定义之下,

 

 

    那么,在该模型下的平均对数概率(log probability)定义为

 

 

这其实就是整个测试语料库的对数概率,除以语料库中单词的总数。这里我们用来表示以2为底的的对数,其中。同样地,模型在这方面的质量越高,则模型越好。

    于是,迷惑度定义为

 

 

其中

 

 

因此,我们是对平均对数概率取负值,并将其作为2的指数,来得到迷惑度的计算公式的。(再次说明,这一节中,我们假设是以2为底的对数)。迷惑度是一个正数。迷惑度的值越小,则模型对未出现过的句子的建模就越好。

    迷惑度背后的一些直观理由如下。譬如说我们有一个词典,其中,且对所有的,模型作出了如下估算

 

 

可以看到这是一个笨拙的模型,他将模型简单地估算为在词典以及符号STOP之上的一个平均分布。在这个例子中,可以算得模型的迷惑度等于。因此,在一个平均分布的概率模型中,迷惑度就等于词典的大小。迷惑度可以被看作是在特定模型下的有效词典大小:例如,如果模型的迷惑度为120(尽管词典的真实大小是,譬如说10,000),那么这个词典就粗略地相当于一个有效大小为120的词典。

    为了给出更多动因,相对简单地说,迷惑度等于

 

 

其中

 

 

这里我们用来表示次方根:所以就是满足。给定

 

 

就是中的项的几何平均数(geometric mean)。例如,如果迷惑度等于100,那么,表示几何平均数为0.01。

    再一个与迷惑度有关的有用的事实如下。如果对在测试数据中出现的任意三元,我们有估计

 

 

那么迷惑度将会是。为了看清这一点,只需注意到,在这种情况下,测试语料库在模型下的概率将会为0,从而平均对数概率将会是。因此如果我们真的要以迷惑度作为一个语言模型的度量,那么我们应该不惜一切避免0估算值的出现。

    最后,讲讲迷惑度一些"典型"取值背后的理由。Goodman("A bit of progress in language modeling",图2)在词典大小为50,000的英语数据上,评价了一元、二元,以及三元语言模型。在一个二元模型中,我们的参数形式为,且有

 

 

故此每个单词仅依赖于它在句子中的前一个单词。在一个一元模型中,我们有参数,且有

 

 

故此每个单词完全独立与句子中其他单词。在Goodman的报告中,三元模型的迷惑度为74,二元模型为137,而一元模型则为955。简单地给词典中每个词赋概率值的模型,其迷惑度为50,000。因此,对比二元模型和一元模型,三元模型明显地取得了一个大提升,而对比简单地给词典中每个词赋概率值的做法,三元模型取得了巨大的提升。

1.3.4 三元模型的优缺点

三元模型无可厚非是很强的,且在语言学上是天真单纯的(相关讨论请参阅课程的幻灯片)。然而,它在实践中却延伸出一些非常有用的模型。

 

 

第一章1.3节完。
英版原文:http://www.cs.columbia.edu/~mcollins/lm-spring2013.pdf
课程主页:http://www.cs.columbia.edu/~cs4705/
Michael Collins的个人主页:http://www.cs.columbia.edu/~mcollins/