2.3 n-gram 语言模型 61
计。为了保证内容的连贯性,接下来仍以传统 n-gram 语言模型为基础进行讨论,基
于人工神经网络的方法将会在第九章进行详细介绍。
n-gram 语言模型的使用非常简单。可以直接用它来对词序列出现的概率进行计
算。比如,可以使用一个 2-gram 语言模型计算一个句子出现的概率,其中单词之间
用斜杠分隔,如下:
P
2-gram
(确实/现在/数据/很/多)
= P (确实) ×P (现在|确实) ×P (数据|现在) ×
P (很|数据) ×P (多|很) (2.24)
以 n-gram 语言模型为代表的统计语言模型的应用非常广泛。除了将要在第三章
中介绍的全概率分词方法,在文本生成、信息检索、摘要等自然语言处理任务中,语
言模型都有举足轻重的地位。包括近些年非常受关注的预训练模型,本质上也是统
计语言模型。这些技术都会在后续章节进行介绍。值得注意的是,统计语言模型为
解决自然语言处理问题提供了一个非常好的建模思路,即:把整个序列生成的问题
转化为逐个生成单词的问题。实际上,这种建模方式会被广泛地用于机器翻译建模,
在统计机器翻译和神经机器翻译中都会有具体的体现。
2.3.2 参数估计和平滑算法
对于 n-gram 语言模型,每个 P (w
m
|w
m
−
n
+1
...w
m
−
1
) 都可以被看作是模型的
参数(Parameter)。而 n-gram 语言模型的一个核心任务是估计这些参数的值,即
参数估计。通常,参数估计可以通过在数据上的统计得到。一种简单的方法是:给
定一定数量的句子,统计每个 n-gram 出现的频次,并利用公式(2.23)得到每个参数
P (w
m
|w
m−n+1
...w
m−1
) 的值。这个过程也被称作模型的训练(Training)。对于自然
语言处理任务来说,统计模型的训练是至关重要的。在本书后面的内容中也会看到,
不同的问题可能需要不同的模型以及不同的模型训练方法,并且很多研究工作也都
集中在优化模型训练的效果上。
回到 n-gram 语言模型上。前面所使用的参数估计方法并不完美,因为它无法很
好地处理低频或者未见现象。比如,在式(2.24)所示的例子中,如果语料中从没有“确
实”和“现在”两个词连续出现的情况,即 c(确实/现在) = 0。那么使用 2-gram 计
算句子“确实/现在/数据/很/多”的概率时,会出现如下情况:
P (现在|确实) =
c(确实/现在)
c(确实)
=
0
c(确实)
= 0 (2.25)