第一章 语言模型

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

1.1 介绍

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

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

语言模型定义如下。首先,我们将该门语言中的所有单词组成的集合定义为

NLP思维PDF nlp讲义_NLP思维PDF

。例如,当我们为英语建立语言模型时,我们可能会有

 

NLP思维PDF nlp讲义_语言模型_02

 

在实际应用中

NLP思维PDF nlp讲义_元模型_03

可以是很大的:它可能包含数千甚至数万个单词。我们假设

NLP思维PDF nlp讲义_数据_04

是一个有限集。该语言的一个句子就是一个单词序列

 

NLP思维PDF nlp讲义_数据_05

 

其中

NLP思维PDF nlp讲义_数据_06

满足

NLP思维PDF nlp讲义_语言模型_07

,且

NLP思维PDF nlp讲义_元模型_08

NLP思维PDF nlp讲义_NLP思维PDF_09

,且假定

NLP思维PDF nlp讲义_数据_10

是一个特殊符号——STOP(我们假定STOP并非

NLP思维PDF nlp讲义_语言模型_11

中的元素)。我们将会看到为什么让每个句子以STOP结束是方便的。以下是一些例句:

 

NLP思维PDF nlp讲义_元模型_12

 

我们将定义

NLP思维PDF nlp讲义_元模型_13

作为取词于

NLP思维PDF nlp讲义_元模型_14

的句子的集合:这是一个无限集,因为句子可以是任意长度的。

我们接着给出如下定义:

定义1 (语言模型) 一个语言模型由一个有限集

NLP思维PDF nlp讲义_NLP思维PDF_15

,以及一个函数

NLP思维PDF nlp讲义_人工智能_16

构成,其中

NLP思维PDF nlp讲义_元模型_17

满足:

 

1. 对任意

NLP思维PDF nlp讲义_语言模型_18

NLP思维PDF nlp讲义_元模型_19

2. 此外,

NLP思维PDF nlp讲义_元模型_20

 

因此

NLP思维PDF nlp讲义_数据_21

NLP思维PDF nlp讲义_人工智能_22

中句子的概率分布。

 

对从训练语料库中学习语言模型的一种(非常差劲的)方法,我们考虑如下。将句子

NLP思维PDF nlp讲义_数据_23

在训练语料库中出现的次数定义为

NLP思维PDF nlp讲义_语言模型_24

,训练语料库的句子总数为

NLP思维PDF nlp讲义_数据_25

。于是我们可以将

NLP思维PDF nlp讲义_数据_26

定义为

 

NLP思维PDF nlp讲义_语言模型_27

 

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

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

 

    1. 语言模型在非常广泛的应用中都有着重要作用,最明显的或许是语音识别和机器翻译。在很多应用中,获得一个好的先验分布

NLP思维PDF nlp讲义_NLP思维PDF_28

来描述句子在该种语言中是否可能,是非常有用的。例如,在语音识别中,语言模型与一个语音模型绑定,语音模型是为单词发音而建的模型:想象这种语言模型的一个方法是,语音模型生成大量候选句子,每个句子都附带着一个概率值;语言模型则基于每个句子在该种语言中有是否更有可能是一个句子,来重新分配概率。 2. 我们所讨论的技术,即用于定义函数

NLP思维PDF nlp讲义_NLP思维PDF_29

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

1.2 马尔可夫模型

现在我们转到一个重要问题:给定一个训练语料库,我们怎样训练出函数

NLP思维PDF nlp讲义_元模型_30

?在这一节我们讨论概率论中的一个核心概念——马尔可夫模型;在下一节,我们讨论三元语言模型,三元模型是直接建立在马尔可夫模型之上的一类语义模型。

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

考虑一个随机变量序列

NLP思维PDF nlp讲义_元模型_31

。每一个随机变量值可以取有限集

NLP思维PDF nlp讲义_元模型_32

中的任意值。现在我们假设序列的长度

NLP思维PDF nlp讲义_元模型_33

是一个固定的数(例如,

NLP思维PDF nlp讲义_数据_34

)。在下一节我们将描述怎样将处理方法一般化到

NLP思维PDF nlp讲义_元模型_35

本身也是随机变量的情况,从而允许不同序列拥有不同的长度。 我们的目标如下:我们希望为任何序列

NLP思维PDF nlp讲义_元模型_36

的概率建模,其中

NLP思维PDF nlp讲义_语言模型_37

NLP思维PDF nlp讲义_NLP思维PDF_38

NLP思维PDF nlp讲义_语言模型_39

。换言之,就是为如下联合概率建模:

 

NLP思维PDF nlp讲义_元模型_40

 

形如

NLP思维PDF nlp讲义_语言模型_41

的可能序列有

NLP思维PDF nlp讲义_NLP思维PDF_42

个:所以很明显,对合理的

NLP思维PDF nlp讲义_语言模型_43

NLP思维PDF nlp讲义_元模型_44

,罗列所有

NLP思维PDF nlp讲义_元模型_45

个概率值,并不是一个可行的方法。我们希望建立一个更为强大的模型。

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

 

NLP思维PDF nlp讲义_数据_46

NLP思维PDF nlp讲义_语言模型_47

 

第一步,即公式1.1,是准确的计算方法:根据概率的链式法则,任意分布

NLP思维PDF nlp讲义_人工智能_48

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

NLP思维PDF nlp讲义_语言模型_49

,任意的

NLP思维PDF nlp讲义_语言模型_50

,有

 

NLP思维PDF nlp讲义_语言模型_51

 

这是其中一个(一阶)马尔可夫假设。我们假设序列中第

NLP思维PDF nlp讲义_语言模型_52

个单词的特征仅依赖与它前一个单词,

NLP思维PDF nlp讲义_数据_53

。更规范地说,给定

NLP思维PDF nlp讲义_元模型_54

的值,我们假设

NLP思维PDF nlp讲义_人工智能_55

的值条件独立于

NLP思维PDF nlp讲义_语言模型_56

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

 

NLP思维PDF nlp讲义_NLP思维PDF_57

 

从而整个序列的概率写成

 

NLP思维PDF nlp讲义_NLP思维PDF_58

 

为了方便,在定义中,我们假设

NLP思维PDF nlp讲义_语言模型_59

,其中

NLP思维PDF nlp讲义_人工智能_60

是句子中一个特殊的"星"号。

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

在上一节,我们假设句子的长度

NLP思维PDF nlp讲义_数据_61

是固定的。然而在很多应用中,

NLP思维PDF nlp讲义_元模型_62

是可变的。因此

NLP思维PDF nlp讲义_NLP思维PDF_63

本身也是一个随机变量。为这个长度变量建模的方法有很多:在本节我们讨论一种最为普遍的语言建模方法。 方法是简单的:我们假设序列中第

NLP思维PDF nlp讲义_人工智能_64

个单词

NLP思维PDF nlp讲义_元模型_65

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

 

NLP思维PDF nlp讲义_元模型_66

 

对任意的

NLP思维PDF nlp讲义_人工智能_67

和任意

NLP思维PDF nlp讲义_数据_68

都成立。其中

NLP思维PDF nlp讲义_数据_69

满足

NLP思维PDF nlp讲义_数据_70

NLP思维PDF nlp讲义_人工智能_71

NLP思维PDF nlp讲义_语言模型_72

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

NLP思维PDF nlp讲义_NLP思维PDF_73

 

NLP思维PDF nlp讲义_语言模型_74

 

其中

NLP思维PDF nlp讲义_元模型_75

NLP思维PDF nlp讲义_人工智能_76

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

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

 

    1. 初始化

NLP思维PDF nlp讲义_数据_77

NLP思维PDF nlp讲义_人工智能_78

    2. 根据如下分布生成

NLP思维PDF nlp讲义_数据_79

 

NLP思维PDF nlp讲义_元模型_80

 

    3. 如果

NLP思维PDF nlp讲义_NLP思维PDF_81

,返回序列

NLP思维PDF nlp讲义_数据_82

。否则,令

NLP思维PDF nlp讲义_NLP思维PDF_83

,并转到第2步。

 

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

1.3 三元语言模型

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

1.3.1 基本定义

正如在马尔可夫模型中,我们将每个句子建模为

NLP思维PDF nlp讲义_数据_84

个随机变量,

NLP思维PDF nlp讲义_数据_85

。长度

NLP思维PDF nlp讲义_元模型_86

本身也是一个随机变量(对不同的句子可以取不同的值)。我们总有

NLP思维PDF nlp讲义_NLP思维PDF_87

。在一个二阶马尔可夫模型中,每个句子

NLP思维PDF nlp讲义_NLP思维PDF_88

的概率为

 

NLP思维PDF nlp讲义_元模型_89

 

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

NLP思维PDF nlp讲义_语言模型_90

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

NLP思维PDF nlp讲义_NLP思维PDF_91

,对任意

NLP思维PDF nlp讲义_元模型_92

NLP思维PDF nlp讲义_语言模型_93

NLP思维PDF nlp讲义_数据_94

 

NLP思维PDF nlp讲义_数据_95

 

其中,对任意

NLP思维PDF nlp讲义_元模型_96

NLP思维PDF nlp讲义_人工智能_97

是模型的一个参数。我们将马上看看怎样从训练语料中得到参数

NLP思维PDF nlp讲义_人工智能_98

的估计值。于是,对任一序列

NLP思维PDF nlp讲义_语言模型_99

,我们的模型是以如下形式呈现的:

 

NLP思维PDF nlp讲义_人工智能_100

 

这就引出了以下定义:

定义2(三元语言模型) 一个三元语言模型由一个有限集

NLP思维PDF nlp讲义_人工智能_101

和一个参数

NLP思维PDF nlp讲义_元模型_102

组成。其中

NLP思维PDF nlp讲义_NLP思维PDF_103

NLP思维PDF nlp讲义_数据_104

NLP思维PDF nlp讲义_数据_105

为满足

NLP思维PDF nlp讲义_数据_106

NLP思维PDF nlp讲义_数据_107

的任意三元。

NLP思维PDF nlp讲义_数据_108

的值可以看作在二元组

NLP思维PDF nlp讲义_人工智能_109

后面出现单词

NLP思维PDF nlp讲义_语言模型_110

的概率。对任意满足

NLP思维PDF nlp讲义_人工智能_111

NLP思维PDF nlp讲义_人工智能_112

,且

NLP思维PDF nlp讲义_元模型_113

的句子,在该三元语言模型中,该句子的概率为

 

NLP思维PDF nlp讲义_人工智能_114

 

其中,我们定义

NLP思维PDF nlp讲义_人工智能_115

NLP思维PDF nlp讲义_人工智能_116

 

    例如,对句子

 

NLP思维PDF nlp讲义_人工智能_117

 

我们有

 

NLP思维PDF nlp讲义_人工智能_118

 

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

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

NLP思维PDF nlp讲义_NLP思维PDF_119

NLP思维PDF nlp讲义_元模型_120

NLP思维PDF nlp讲义_数据_121

 

NLP思维PDF nlp讲义_语言模型_122

 

且对任意二元

NLP思维PDF nlp讲义_NLP思维PDF_123

NLP思维PDF nlp讲义_人工智能_124

 

NLP思维PDF nlp讲义_数据_125

 

因此,

NLP思维PDF nlp讲义_元模型_126

定义了在二元上下文

NLP思维PDF nlp讲义_NLP思维PDF_127

NLP思维PDF nlp讲义_人工智能_128

的条件下,

NLP思维PDF nlp讲义_元模型_129

上的一个分布。

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

NLP思维PDF nlp讲义_元模型_130

其中

NLP思维PDF nlp讲义_元模型_131

NLP思维PDF nlp讲义_语言模型_132

中的任一元素,且

NLP思维PDF nlp讲义_NLP思维PDF_133

。这个模型共有

NLP思维PDF nlp讲义_数据_134

个参数。这看起来是个很大的数字。例如,当

NLP思维PDF nlp讲义_人工智能_135

(这是一个符合实际的数字,在现代的标准看来,更像是个很小的数字)时,我们有

NLP思维PDF nlp讲义_NLP思维PDF_136

1.3.2 最大似然估计

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

    首先,约定一些符号。定义

NLP思维PDF nlp讲义_语言模型_137

为三元组

NLP思维PDF nlp讲义_NLP思维PDF_138

在训练语料中出现的次数:例如,

NLP思维PDF nlp讲义_元模型_139

为the dog barks这个由三个单词组成的序列在训练语料中出现的次数。类似地,定义

NLP思维PDF nlp讲义_NLP思维PDF_140

为二元组

NLP思维PDF nlp讲义_语言模型_141

在语料中出现的次数。于是,对任意的

NLP思维PDF nlp讲义_数据_142

NLP思维PDF nlp讲义_语言模型_143

NLP思维PDF nlp讲义_NLP思维PDF_144

,我们定义

 

NLP思维PDF nlp讲义_数据_145

 

作为一个例子,我们对

NLP思维PDF nlp讲义_数据_146

的估计会是这样的:

 

NLP思维PDF nlp讲义_元模型_147

 

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

    不幸地,这种参数估计方法会陷入一个非常严重的主题。回忆一下,我们的模型中包含的参数数量非常庞大(例如,对一个大小为10,000的词典,我们有大约

NLP思维PDF nlp讲义_语言模型_148

个参数)。出于这个原因,我们的很多计数将会是零。这会引致两个问题:

 

  • 由于分子计数为0,在上述估计中,将会出现很多
  • NLP思维PDF nlp讲义_人工智能_149

  • 的情况。这将导致很多三元组的概率未被估算:模型的参数数量远多于训练语料库中单词的数量,因此将任何未在训练语料库中出现过的三元组的概率赋为0,似乎都是不合理的。
  • 对分母
  • NLP思维PDF nlp讲义_语言模型_150

  • 等于零的情况,这种估算没有给出妥善的定义。

 

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

1.3.3 评价语言模型:迷惑度

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

方法如下。假设我们有一些测试数据,即测试句子

NLP思维PDF nlp讲义_NLP思维PDF_151

NLP思维PDF nlp讲义_元模型_152

,…,

NLP思维PDF nlp讲义_元模型_153

。每一个测试句子

NLP思维PDF nlp讲义_元模型_154

NLP思维PDF nlp讲义_人工智能_155

)是单词序列

NLP思维PDF nlp讲义_NLP思维PDF_156

,其中

NLP思维PDF nlp讲义_元模型_157

是第

NLP思维PDF nlp讲义_元模型_158

个句子的长度。与以往一样,我们假设每个句子以符号STOP结束。

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

    对任一测试句子

NLP思维PDF nlp讲义_人工智能_159

,我们可以度量它在语言模型中的概率

NLP思维PDF nlp讲义_NLP思维PDF_160

。一个自然的,用来度量语言模型质量的方法,是计算整个测试句子集的概率和,也就是

 

NLP思维PDF nlp讲义_语言模型_161

 

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

    在测试语料上的迷惑度,就是派生于这种质量的一个直接转换。定义

NLP思维PDF nlp讲义_元模型_162

为测试语料中单词的总数。更准确地说,在

NLP思维PDF nlp讲义_数据_163

是第

NLP思维PDF nlp讲义_元模型_164

个句子的长度这个定义之下,

 

NLP思维PDF nlp讲义_语言模型_165

 

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

 

NLP思维PDF nlp讲义_人工智能_166

 

这其实就是整个测试语料库的对数概率,除以语料库中单词的总数。这里我们用

NLP思维PDF nlp讲义_数据_167

来表示以2为底的

NLP思维PDF nlp讲义_语言模型_168

的对数,其中

NLP思维PDF nlp讲义_NLP思维PDF_169

。同样地,模型在这方面的质量越高,则模型越好。

    于是,迷惑度定义为

 

NLP思维PDF nlp讲义_NLP思维PDF_170

 

其中

 

NLP思维PDF nlp讲义_人工智能_171

 

因此,我们是对平均对数概率取负值,并将其作为2的指数,来得到迷惑度的计算公式的。(再次说明,这一节中,我们假设

NLP思维PDF nlp讲义_数据_172

是以2为底的对数)。迷惑度是一个正数。迷惑度的值越小,则模型对未出现过的句子的建模就越好。     迷惑度背后的一些直观理由如下。譬如说我们有一个词典

NLP思维PDF nlp讲义_人工智能_173

,其中

NLP思维PDF nlp讲义_语言模型_174

,且对所有的

NLP思维PDF nlp讲义_语言模型_175

NLP思维PDF nlp讲义_数据_176

NLP思维PDF nlp讲义_人工智能_177

,模型作出了如下估算

 

NLP思维PDF nlp讲义_数据_178

 

可以看到这是一个笨拙的模型,他将模型简单地估算为在词典以及符号STOP之上的一个平均分布。在这个例子中,可以算得模型的迷惑度等于

NLP思维PDF nlp讲义_语言模型_179

。因此,在一个平均分布的概率模型中,迷惑度就等于词典的大小。迷惑度可以被看作是在特定模型下的有效词典大小:例如,如果模型的迷惑度为120(尽管词典的真实大小是,譬如说10,000),那么这个词典就粗略地相当于一个有效大小为120的词典。

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

 

NLP思维PDF nlp讲义_NLP思维PDF_180

 

其中

 

NLP思维PDF nlp讲义_NLP思维PDF_181

 

这里我们用

NLP思维PDF nlp讲义_人工智能_182

来表示

NLP思维PDF nlp讲义_数据_183

NLP思维PDF nlp讲义_人工智能_184

次方根:所以

NLP思维PDF nlp讲义_数据_185

就是满足

NLP思维PDF nlp讲义_NLP思维PDF_186

NLP思维PDF nlp讲义_人工智能_187

NLP思维PDF nlp讲义_NLP思维PDF_188

。给定

 

NLP思维PDF nlp讲义_数据_189

 

NLP思维PDF nlp讲义_人工智能_190

NLP思维PDF nlp讲义_人工智能_191

就是

NLP思维PDF nlp讲义_人工智能_192

中的项

NLP思维PDF nlp讲义_数据_193

的几何平均数(geometric mean)。例如,如果迷惑度等于100,那么

NLP思维PDF nlp讲义_语言模型_194

,表示几何平均数为0.01。     再一个与迷惑度有关的有用的事实如下。如果对在测试数据中出现的任意三元

NLP思维PDF nlp讲义_语言模型_195

NLP思维PDF nlp讲义_人工智能_196

NLP思维PDF nlp讲义_NLP思维PDF_197

,我们有估计

 

NLP思维PDF nlp讲义_元模型_198

 

那么迷惑度将会是

NLP思维PDF nlp讲义_语言模型_199

。为了看清这一点,只需注意到,在这种情况下,测试语料库在模型下的概率将会为0,从而平均对数概率将会是

NLP思维PDF nlp讲义_人工智能_200

。因此如果我们真的要以迷惑度作为一个语言模型的度量,那么我们应该不惜一切避免0估算值的出现。     最后,讲讲迷惑度一些"典型"取值背后的理由。Goodman("A bit of progress in language modeling",图2)在词典大小为50,000的英语数据上,评价了一元、二元,以及三元语言模型。在一个二元模型中,我们的参数形式为

NLP思维PDF nlp讲义_元模型_201

,且有

 

NLP思维PDF nlp讲义_人工智能_202

 

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

NLP思维PDF nlp讲义_NLP思维PDF_203

,且有

 

NLP思维PDF nlp讲义_数据_204

 

故此每个单词完全独立与句子中其他单词。在Goodman的报告中,三元模型的迷惑度为74,二元模型为137,而一元模型则为955。简单地给词典中每个词赋概率值

NLP思维PDF nlp讲义_语言模型_205

的模型,其迷惑度为50,000。因此,对比二元模型和一元模型,三元模型明显地取得了一个大提升,而对比简单地给词典中每个词赋概率值

NLP思维PDF nlp讲义_人工智能_206

的做法,三元模型取得了巨大的提升。

1.3.4 三元模型的优缺点

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

1.4 三元模型的平滑估算

如前所述,一个三元语言模型包含非常大量的参数。最大似然参数估计,形式如

 

NLP思维PDF nlp讲义_人工智能_207

 

在稀疏数据中会出现严重问题。即便对一个大的训练数据集,很多频次

NLP思维PDF nlp讲义_NLP思维PDF_208

NLP思维PDF nlp讲义_元模型_209

将会是低的,甚至会等于0。

    在这一节,我们讨论平滑估算方法,这些方法能够缓和在稀疏数据中会出现的问题。主要思想是依靠更低阶的统计估计——特别地,是基于二元或一元计数的估计——去"平滑"基于三元的估计。我们讨论两种在实践中被非常普遍地使用的平滑方法:首先,是线性插值法;其次,是折扣方法。

1.4.1 线性插值

线性插值的三元模型如下派生。我们定义三元、二元,以及一元最大似然估计如下:

 

NLP思维PDF nlp讲义_人工智能_210

 

其中,我们扩展了我们的符号:

NLP思维PDF nlp讲义_数据_211

NLP思维PDF nlp讲义_NLP思维PDF_212

在训练语料库中出现的次数,

NLP思维PDF nlp讲义_人工智能_213

是训练语料库中出现的单词的总数。

    三元、二元,以及一元估计具有不同的优缺点。一元估计永远不会出现分子或分母等于0的问题;因此这种估计永远是已经定义完善了的,且总是大于0(假如每个单词在训练语料库中出现至少一次;这是一个合理的假设)。然而,一元估计完全忽视上下文(前两个单词),因此漏掉了非常有价值的信息。相比之下,三元估计确实利用了上下文信息,但存在大量的频次计数等于0的问题。二元估计则介于这两种情况之间。

    线性插值的思想,就是同时使用这三种估计,将三元估计定义如下:

 

NLP思维PDF nlp讲义_语言模型_214

 

这里

NLP思维PDF nlp讲义_元模型_215

NLP思维PDF nlp讲义_语言模型_216

,以及

NLP思维PDF nlp讲义_元模型_217

是模型中三个额外的参数,满足

 

NLP思维PDF nlp讲义_语言模型_218

 

 

NLP思维PDF nlp讲义_NLP思维PDF_219

 

因此我们是取了三种估计的一个加权平均。

    有不同的方法估计

NLP思维PDF nlp讲义_NLP思维PDF_220

的值。一个惯用的方法如下。譬如说我们有一些额外划分出来的数据,这些数据是从训练语料库以及测试语料库之外划分出来的。我们称这些数据为开发数据(development data)。定义

NLP思维PDF nlp讲义_NLP思维PDF_221

为三元组

NLP思维PDF nlp讲义_NLP思维PDF_222

在开发数据中出现的次数。容易看到开发数据的对数似然估计(log-likelihood),是包含参数

NLP思维PDF nlp讲义_元模型_223

NLP思维PDF nlp讲义_数据_224

NLP思维PDF nlp讲义_语言模型_225

的函数

 

NLP思维PDF nlp讲义_数据_226

 

我们倾向于选择使得

NLP思维PDF nlp讲义_元模型_227

尽量大的

NLP思维PDF nlp讲义_元模型_228

值。 因此

NLP思维PDF nlp讲义_元模型_229

的值取为

 

NLP思维PDF nlp讲义_人工智能_230

 

并满足

 

NLP思维PDF nlp讲义_数据_231

 

 

NLP思维PDF nlp讲义_数据_232

 

寻找

NLP思维PDF nlp讲义_NLP思维PDF_233

NLP思维PDF nlp讲义_元模型_234

NLP思维PDF nlp讲义_人工智能_235

的最优解是非常直接的(参见第??节中的一个算法,该算法常用作此目的)。     如前描述,我们的方法有三个平滑参数

NLP思维PDF nlp讲义_元模型_236

NLP思维PDF nlp讲义_数据_237

,和

NLP思维PDF nlp讲义_元模型_238

。三个参数可以理解成分别置于三元、二元,以及一元估计之上的可信度或权重。例如,如果

NLP思维PDF nlp讲义_人工智能_239

接近于1,意味着我们在三元估计

NLP思维PDF nlp讲义_NLP思维PDF_240

上放置了一个重要的权重;反过来说,如果接近于0,代表我们在三元估计上放置了一个低权重。     在实践中,增加一个额外的自由度是重要的,使得

NLP思维PDF nlp讲义_NLP思维PDF_241

NLP思维PDF nlp讲义_数据_242

,和

NLP思维PDF nlp讲义_元模型_243

根据作为条件的二元组

NLP思维PDF nlp讲义_语言模型_244

的不同,可以取不同的值。特别地,该方法可以拓展到当

NLP思维PDF nlp讲义_元模型_245

更大的时候,允许

NLP思维PDF nlp讲义_人工智能_246

取更大的值——这样做的理由是,一个更大的

NLP思维PDF nlp讲义_NLP思维PDF_247

值,应该使我们更为相信三元估计在其中所起的作用。     至少,这个方法可以用来确保当

NLP思维PDF nlp讲义_人工智能_248

时,

NLP思维PDF nlp讲义_元模型_249

,因为在这种情况下三元估计

 

NLP思维PDF nlp讲义_数据_250

 

是未被定义的。类似地,如果

NLP思维PDF nlp讲义_NLP思维PDF_251

NLP思维PDF nlp讲义_元模型_252

都等于零,我们需要令

NLP思维PDF nlp讲义_语言模型_253

NLP思维PDF nlp讲义_NLP思维PDF_254

,因为二元和三元ML估计都是未被定义的。

    该方法的一个延伸,通常称之为分桶法(bucketing),将在1.5.1节进行讨论。此外,一个更为简单的方法,如下定义

 

NLP思维PDF nlp讲义_数据_255

 

其中

NLP思维PDF nlp讲义_数据_256

是该方法中唯一的参数。可以看到,

NLP思维PDF nlp讲义_人工智能_257

NLP思维PDF nlp讲义_人工智能_258

NLP思维PDF nlp讲义_语言模型_259

,且

NLP思维PDF nlp讲义_元模型_260

,并且同样地,

NLP思维PDF nlp讲义_语言模型_261

。     在这个定义下,可以看到,

NLP思维PDF nlp讲义_人工智能_262

随着

NLP思维PDF nlp讲义_元模型_263

增大而增大,类似地,

NLP思维PDF nlp讲义_人工智能_264

随着

NLP思维PDF nlp讲义_语言模型_265

增大而增大。此外,我们可以得知,当

NLP思维PDF nlp讲义_NLP思维PDF_266

时,

NLP思维PDF nlp讲义_人工智能_267

,当

NLP思维PDF nlp讲义_NLP思维PDF_268

时,

NLP思维PDF nlp讲义_元模型_269

NLP思维PDF nlp讲义_人工智能_270

同样取使得开发数据的对数似然估计最大化的值。

    这种方法是相对粗糙的,而且并不像是可以取得最优解的方法。然而,这种方法很简单,在某些实际应用中,表现不俗。

1.4.2 折扣方法

我们现在讨论另一种估计方法,这种方法同样在实践中得到普遍应用。首先考虑,对一个用于估计三元模型的方法,我们的目标是定义

 

NLP思维PDF nlp讲义_NLP思维PDF_271

 

满足任意

NLP思维PDF nlp讲义_元模型_272

NLP思维PDF nlp讲义_元模型_273

。     第一步将会是定义折扣计数(discounted counts)。对任一满足

NLP思维PDF nlp讲义_人工智能_274

的二元组

NLP思维PDF nlp讲义_数据_275

,我们定义它的折扣计数为

 

NLP思维PDF nlp讲义_元模型_276

 

其中

NLP思维PDF nlp讲义_语言模型_277

是介乎0和1之间的值(一个典型的取值是

NLP思维PDF nlp讲义_元模型_278

)。因此我们的做法只是简单地从计数中减掉一个常数

NLP思维PDF nlp讲义_人工智能_279

。这样做的理由是,如果我们只从训练语料库中取得计数,我们将全面地高估语料库中所出现的二元组的概率(并且低估了未在语料库中出现的二元组的概率)。     对任一满足

NLP思维PDF nlp讲义_元模型_280

的二元组

NLP思维PDF nlp讲义_NLP思维PDF_281

,我们接着定义

 

NLP思维PDF nlp讲义_人工智能_282

 

因此在这个表达式中,我们是用折扣后的计数来作为分子,而分母则用的是常规的计数。

 

NLP思维PDF nlp讲义_NLP思维PDF_283

 

图1.1:用于说明折扣方法的一个例子。我们展示的是一个刻意构造的例子,其中一元the出现48次,我们列出了所有满足

NLP思维PDF nlp讲义_NLP思维PDF_284

NLP思维PDF nlp讲义_元模型_285

的二元组

NLP思维PDF nlp讲义_语言模型_286

(这些二元计数的总和为48)。此外我们展示了折扣计数

NLP思维PDF nlp讲义_元模型_287

,其中

NLP思维PDF nlp讲义_数据_288

,且最后我们展示了基于折扣计数的估计

NLP思维PDF nlp讲义_元模型_289

。     对任意上下文

NLP思维PDF nlp讲义_人工智能_290

,这个定义会导致一些丢失概率权重(missing probability mass)的存在,这些丢失概率权重定义为

 

NLP思维PDF nlp讲义_数据_291

 

    作为一个例子,考虑图1.1所示例子中的计数。在这个例子中我们展示了所有满足

NLP思维PDF nlp讲义_语言模型_292

NLP思维PDF nlp讲义_语言模型_293

的二元组

NLP思维PDF nlp讲义_元模型_294

。我们使用的折扣值为

NLP思维PDF nlp讲义_NLP思维PDF_295

。在这个例子中我们有

 

NLP思维PDF nlp讲义_人工智能_296

 

并且有丢失权重

 

NLP思维PDF nlp讲义_数据_297

 

    折扣法背后的动机是,除以满足

NLP思维PDF nlp讲义_元模型_298

的单词

NLP思维PDF nlp讲义_元模型_299

间的这个丢失权重。     更具体地,该估计的完整定义如下。对任意

NLP思维PDF nlp讲义_数据_300

,定义集合

 

NLP思维PDF nlp讲义_元模型_301

 

以及

 

NLP思维PDF nlp讲义_NLP思维PDF_302

 

举例来说,对图1.1中的数据,我们会有

 

NLP思维PDF nlp讲义_元模型_303

 

NLP思维PDF nlp讲义_人工智能_304

则是剩余单词的集合。

    于是定义估计为

 

NLP思维PDF nlp讲义_语言模型_305

 

因此做法是,如果

NLP思维PDF nlp讲义_NLP思维PDF_306

,我们返回估计

NLP思维PDF nlp讲义_数据_307

;否则,我们以一元估计

NLP思维PDF nlp讲义_人工智能_308

占所有一元估计的比例返回剩余的概率权重

NLP思维PDF nlp讲义_NLP思维PDF_309

。     这个方法可以以一种自然的,递归的方法一般化到三元模型当中:对任意二元组

NLP思维PDF nlp讲义_数据_310

,定义

 

NLP思维PDF nlp讲义_数据_311

 

以及

 

NLP思维PDF nlp讲义_NLP思维PDF_312

 

定义

NLP思维PDF nlp讲义_人工智能_313

为三元组

NLP思维PDF nlp讲义_人工智能_314

折扣后的计数:也就是,

 

NLP思维PDF nlp讲义_语言模型_315

 

其中

NLP思维PDF nlp讲义_元模型_316

同样地,是折扣值。于是三元模型就是

 

NLP思维PDF nlp讲义_NLP思维PDF_317

 

其中

 

NLP思维PDF nlp讲义_人工智能_318

 

同样地,是所谓"丢失"的概率权重。注意到我们以二元估计

NLP思维PDF nlp讲义_元模型_319

所占的比例来返回这个丢失概率权重,而

NLP思维PDF nlp讲义_语言模型_320

就是我们前面定义的二元估计。     这个方法的唯一一个参数就是折扣值

NLP思维PDF nlp讲义_数据_321

。与线性插值模型一样,选取这个折扣值的惯常方法,是取使得开发语料库的似然估计最大化的折扣值,这里所说的开发语料库,同样是在训练语料库以及测试语料库以外所划分出来数据。定义

NLP思维PDF nlp讲义_人工智能_322

为三元

NLP思维PDF nlp讲义_元模型_323

NLP思维PDF nlp讲义_语言模型_324

NLP思维PDF nlp讲义_元模型_325

在开发语料库中出现的次数。开发数据的对数似然为

 

NLP思维PDF nlp讲义_语言模型_326

 

其中

NLP思维PDF nlp讲义_元模型_327

如前面所定义。估计

NLP思维PDF nlp讲义_人工智能_328

的参数会根据

NLP思维PDF nlp讲义_数据_329

的不同而不同。通常我们会对一个可能

NLP思维PDF nlp讲义_人工智能_330

值集进行测试——例如,我们可能会测试集合

NLP思维PDF nlp讲义_数据_331

中的所有值——对其中的每个

NLP思维PDF nlp讲义_语言模型_332

,我们计算它在开发数据上的对数似然。然后我们选取最大化这个对数似然的值作为

NLP思维PDF nlp讲义_元模型_333

值。

1.5 高级主题

1.5.1 带分桶的线性插入法

在线性插入模型中,待估参数定义为

 

NLP思维PDF nlp讲义_人工智能_334

 

其中

NLP思维PDF nlp讲义_语言模型_335

NLP思维PDF nlp讲义_元模型_336

,和

NLP思维PDF nlp讲义_NLP思维PDF_337

是该方法中的平滑参数。     在实践中,允许平滑参数随着作为条件的二元组

NLP思维PDF nlp讲义_NLP思维PDF_338

的不同而不同,是重要的——特别地,计数

NLP思维PDF nlp讲义_数据_339

越高,则

NLP思维PDF nlp讲义_语言模型_340

的权重应该越高(类似地,计数

NLP思维PDF nlp讲义_语言模型_341

越高,则

NLP思维PDF nlp讲义_数据_342

的权重应该越高)。达到这个目的的经典方法是一个拓展后的方法,这个方法被称为分桶法。     这种方法的第一步是定义一个函数

NLP思维PDF nlp讲义_人工智能_343

令二元

NLP思维PDF nlp讲义_元模型_344

与值

NLP思维PDF nlp讲义_人工智能_345

对应起来,其中

NLP思维PDF nlp讲义_数据_346

是整数,表示桶的数量。函数是人工定义的,且通常取决于在训练语料中得到的计数。其中一种(这里

NLP思维PDF nlp讲义_语言模型_347

)定义是

 

NLP思维PDF nlp讲义_语言模型_348

 

这是一个非常简单的定义,仅仅检测了计数

NLP思维PDF nlp讲义_数据_349

NLP思维PDF nlp讲义_人工智能_350

是否等于0。

    另一个略微复杂一点的定义(这个定义对二元组的频率更为敏感)是

 

NLP思维PDF nlp讲义_数据_351

 

    给定函数

NLP思维PDF nlp讲义_人工智能_352

的一个定义,我们接着介绍对应与所有

NLP思维PDF nlp讲义_NLP思维PDF_353

的平滑参数

NLP思维PDF nlp讲义_人工智能_354

NLP思维PDF nlp讲义_数据_355

NLP思维PDF nlp讲义_人工智能_356

。因此,每一个桶都拥有它自己的平滑参数集。对所有

NLP思维PDF nlp讲义_元模型_357

,我们有限制

 

NLP思维PDF nlp讲义_元模型_358

 

 

NLP思维PDF nlp讲义_数据_359

 

    线性插值估计将会是

 

NLP思维PDF nlp讲义_NLP思维PDF_360

 

其中

 

NLP思维PDF nlp讲义_NLP思维PDF_361

 

故此,我们已经粗略地介绍了(建立在

NLP思维PDF nlp讲义_语言模型_362

值之上的)平滑参数的一个依托物。因此每一个二元组都有自己的平滑参数;平滑参数的值随

NLP思维PDF nlp讲义_人工智能_363

值(

NLP思维PDF nlp讲义_语言模型_364

值通常直接与计数

NLP思维PDF nlp讲义_数据_365

NLP思维PDF nlp讲义_人工智能_366

相关)的不同而不同。     平滑参数同样使用开发数据集进行估计。如果我们同样地定义

NLP思维PDF nlp讲义_语言模型_367

为三元

NLP思维PDF nlp讲义_人工智能_368

NLP思维PDF nlp讲义_数据_369

NLP思维PDF nlp讲义_数据_370

在开发数据中出现的次数,则开发数据的对数似然为

 

NLP思维PDF nlp讲义_人工智能_371

 

参数

NLP思维PDF nlp讲义_人工智能_372

NLP思维PDF nlp讲义_数据_373

NLP思维PDF nlp讲义_人工智能_374

则取最大化这个似然函数的值。