在自然语言处理领域,N-gram模型是统计语言模型中较为简单的一种模型,它基于马尔可夫假设,即某个词出现的概率仅取决于其前面的 N -1个词。N-gram模型的公式如下:
其中, w 1 , w 2 ,…, w n 是一个长度为 n 的词序列, C ( w 1 , w 2 ,…, w n )为该词序列在语料库中出现的次数, C ( w 1 , w 2 ,…, w n -1 )为该词序列前 n -1个词在语料库中出现的次数。N-gram模型的参数数量随着 N 的增大呈指数级增长,因此在实际应用中通常采用2-gram或3-gram模型。
从理解基本概念的角度出发,我们可以暂时不考虑公式背后的复杂原理,而直接从实际应用的角度探讨N-gram模型的使用方法。假设有一个由多个单词组成的链条,N-gram算法即为观察该链条中每 N 个单词组成的单元来预测下一组单词中可能出现的词汇,这就是“N-gram”名称的由来,其中“gram”指的是单词。
举例来说,当你说了一句“我喜欢吃”,并且之前出现过“我喜欢吃苹果”这样的词组时,N-gram模型可能会预测下一个词是“苹果”,因为在以往的数据中,“苹果”经常出现在“我喜欢吃”之后。这就是N-gram模型用于文本预测的原因。
N-gram模型的设计较为直观:它类似于一个大型表格,记录了不同单词组合出现的次数。若为2-gram(即Bigram),表格中记录的是每两个单词组合出现的概率;若为3-gram(即Trigram),则记录三个单词组合的概率,依此类推。在设计该模型时,只需确定 N 的值,即考虑多少个单词作为一组来预测下一个单词,然后收集数据,填充概率表。
尽管N-gram模型已经较为陈旧,但在某些特定场景下仍表现良好。例如,在某些垂直领域,N-gram模型通过大量的数据训练,能够取得较好的效果。在资源受限的情况下,N-gram模型可以通过较少的数据训练,获得满意的结果。而在对响应时间要求较高的场景,N-gram模型能够以较少的计算量实现良好的效果。N-gram模型有以下两个典型的应用场景。
(1)拼写检查和错误更正
N-gram模型可用于预测词序列的概率,从而支持语音识别、机器翻译等任务。通过比较不同词序列的概率,可以推断出哪个词序列更可能是用户的预期输入。例如,若用户输入“spel checker”,N-gram模型可以判断“spell checker”这一序列比“spel checker”更常见,从而提示正确的拼写。
(2)文本生成
尽管深度学习模型在文本生成方面取得了显著进展,但N-gram模型在某些简单场景或资源受限的情况下依然具有应用价值。例如,在生成键盘应用的自动完成功能或简单聊天机器人的回复等预测性文本时,N-gram模型能够根据以往输入快速生成文本建议。
N-gram模型具有以下特性。
❑ 基于频率统计进行预测。N-gram模型根据词汇序列的出现概率预测下一个词汇。模型假设当前词的出现仅依赖于前面 N -1个词。
❑ N-gram模型无状态。在N-gram模型中,并未显式定义“状态”,模型直接对观测到的序列(如文本中的词)进行操作。序列的每个部分都是独立考虑的。
❑ 简单性与计算效率。N-gram模型的设计与实现相对简单,计算效率较高,但随着 N 的增大,模型的规模和复杂性将急剧增加。