当句子较短时,直接统计句子的概率还比较简单,但随着句子长度增加,词与词之间的组合方式呈指数级增长。例如,若词汇表中有 5000 个词,句子长度为 10,则可能的句子组合数目达到,这是一个无法实际计算的天文数字。
为解决这一问题,研究者提出了N 元文法(N-gram)语言模型。这种模型只考虑一个词在前面N-1 个词后出现的概率,然后将这些概率连乘起来,得到整个句子的概率。例如,二元文法(Bi-gram)语言模型统计一个词后面接另一个词的概率,如P(吗| 可以) 表示"可以"后面接"吗"的概率。如果一个句子中有M 个词,则将这 M 个词的概率相乘即可得到整个句子的概率。图 31.3展示了二元文法语言模型的计算过程。

二元文法语言模型的计算过程
有了这个N 元文法模型,就可以利用它来生成句子。首先随机生成一个词 x 1,然后根据 P (x 2|x 1) 生成下一个词 x2,以此类推,即可生成句子和段落。下面是一段话是利用三元文法生成的一段话:
我喜欢吃苹果味道很甜我是学生的身份工作人员并学习数据科学很愉快听音乐看电影总是给我很多启发一天我去学校上课和同学们讨论各种问题也喜欢动手做实验锻炼思维非常有趣。
可以看到,生成的每句话看起来还是通顺的,但当这些句子放在一起就显得杂乱无章,没有意义。这是因为仅考虑最近几个词的上下文还不足以捕捉到复杂的语言规律。