本章通过 n-gram 模型介绍了语言建模,这是一种经典模型,有助于我们引入语言建模中的许多基本概念。

  • 语言模型提供了一种为句子或其他词或标记序列分配概率的方法,并能够根据前面的词或标记来预测下一个词或标记。
  • n-gram 可能是最简单的语言模型类型。它们是马尔可夫模型,通过前若干个固定窗口内的词来估计下一个词。n-gram 模型可以通过在训练语料库(training corpus)中进行频次统计并归一化(即最大似然估计,maximum likelihood estimate)来进行训练。
  • n-gram 语言模型可以在**测试集(test set)上使用困惑度(perplexity)**进行评估。
  • 根据一个语言模型,测试集的困惑度是该测试集概率的一个函数:即模型所估计的测试集概率的逆值,再按序列长度进行归一化。
  • 从语言模型中采样(sampling) 是指生成一些句子,每个句子的生成概率由该模型所定义的其出现可能性决定。
  • 平滑(smoothing) 算法提供了一种对训练数据中未出现事件的概率进行估计的方法。常用的 n-gram 平滑算法包括加一平滑(add-1 smoothing),或通过**插值(interpolation)**利用低阶 n-gram 的频次信息。

参考文献与历史注记

n-gram 的基本数学思想最早由马尔可夫(Markov, 1913)提出,他使用如今被称为马尔可夫链(bigram 和 trigram)的方法,预测普希金的《叶甫盖尼·奥涅金》中下一个字母是元音还是辅音。马尔可夫将 20,000 个字母分类为元音(V)或辅音(C),并计算了基于前一个或前两个字母的 bigram 和 trigram 概率,以预测当前字母是否为元音。

香农(Shannon, 1948)将 n-gram 应用于英语词序列的近似计算。受香农工作的启发,到 20 世纪 50 年代,马尔可夫模型已广泛应用于工程、语言学和心理学领域,用于建模词序列。然而,从乔姆斯基(Chomsky, 1956)开始,包括乔姆斯基(1957)和米勒与乔姆斯基(Miller and Chomsky, 1963)在内的一系列极具影响力的研究中,诺姆·乔姆斯基(Noam Chomsky)提出,“有限状态马尔可夫过程”虽然可能是一种有用工程启发式方法,但无法成为人类语法知识的完整认知模型。这些论点导致许多语言学家和计算语言学家在数十年间忽视了统计建模的研究。

n-gram 语言模型的复兴源于弗雷德·耶莱内克(Fred Jelinek)及其在 IBM 托马斯·J·沃森研究中心的同事,他们受到香农工作的启发;以及卡内基梅隆大学的詹姆斯·贝克(James Baker),他受到伦纳德·鲍姆(Leonard Baum)及其团队在诸如美国国防分析研究所(IDA)等实验室进行的早期保密研究的影响,这些工作在解密后才得以公开。这两个研究团队独立地在同一时期成功地将 n-gram 应用于语音识别系统(Baker 1975b, Jelinek 等 1975, Baker 1975a, Bahl 等 1983, Jelinek 1990)。“语言模型”“困惑度” 这两个术语最早由 IBM 团队用于描述这项技术。耶莱内克及其同事以一种相当现代的方式使用“语言模型”一词,意指影响词序列概率的所有语言因素的总和,包括语法、语义、语篇乃至说话人特征,而不仅仅指 n-gram 模型本身。

加一平滑源于拉普拉斯(Laplace)1812 年提出的“继承法则”(law of succession),并由杰弗里斯(Jeffreys, 1948)首次作为一种工程解决方案应用于零频问题,其思想基于约翰逊(Johnson, 1932)更早提出的加-k 建议。加一算法存在的问题在 Gale 和 Church(1994)的研究中得到了总结。

在 20 世纪 80 至 90 年代,人们提出了大量不同的语言建模与平滑技术,包括 Good-Turing 折扣法——由 Katz 在 IBM 首次应用于 n-gram 平滑(Nádas 1984, Church 和 Gale 1991)——Witten-Bell 折扣法(Witten 和 Bell, 1991),以及各种利用词类信息的基于类的 n-gram 模型(class-based n-gram models)。从 20 世纪 90 年代末开始,陈志坚(Chen)和古德曼(Goodman)进行了一系列严格控制的实验,比较了不同算法和参数(Chen 和 Goodman 1999, Goodman 2006 等)。他们证明了**改进的插值式 Kneser-Ney 平滑法(Modified Interpolated Kneser-Ney)**的优势,该方法在世纪之交成为 n-gram 语言建模的标准基线,尤其因为他们发现缓存(caches)和基于类的模型只能带来微小的额外提升。SRILM(Stolcke, 2002)和 KenLM(Heafield 2011, Heafield 等 2013)是公开可用的构建 n-gram 语言模型的工具包。

大型语言模型(large language models)基于神经网络而非 n-gram,从而能够解决 n-gram 的两大主要问题:(1)随着 n-gram 阶数的增加,参数数量呈指数级增长;(2)除非使用完全相同的词,n-gram 无法从训练样例泛化到测试样例。神经语言模型则将词语投影到一个连续空间中,在该空间中具有相似上下文的词拥有相似的表示。我们将在第 9 章介绍基于 Transformer 的大型语言模型,在此之前,我们将在第 7 章介绍前馈式语言模型(Bengio 等 2006, Schwenk 2007),并在第 8 章介绍循环式语言模型(Mikolov, 2012)。