语言的概率游戏:N-gram
不懂语法、不懂语义,光靠「数数」能不能接出下一个词?
手机怎么猜下一个字
你用手机打字,输入「今天天气」,键盘弹出三个候选词:「真好」「不错」「怎么样」。 它是怎么猜出来的?
手机没有读懂「天气」这个概念,没有联网查天气预报,也没有问过你今天心情好不好。 它做的事情极其简单:翻历史记录,数数。
想象手机偷偷读过几千万条中文消息。每次看到「今天天气」这四个字后面跟着什么,就记一笔:
下次你输入「今天天气」,手机就把出现最多的几个词推给你。这就是手机输入法的基本原理——纯粹的数数,和「理解语言」毫无关系。
让方法更通用:看最近 N 个词
上面的方法每次都看整段「今天天气」这个固定短语—— 如果用户输入的是「今天的天气」,历史记录就完全对不上号了,方法失效。
更实用的做法:不管前面说了多少,只看最近的几个词,用它们来预测下一个词。 看最近 1 个词,叫「一元模型」;看最近 2 个词,叫「二元模型」; 看最近 N 个词,就叫 N-gram(N 元语言模型)。
实际上,大部分手机输入法和早期语音助手都在用 N=2 或 N=3 的版本。 这个方法简单、快速,而且训练方式也很简单: 爬下大量文本,把每一段连续的 N 个词都数一遍,统计频率,存成一张巨大的表格就完成了。不需要理解语言,不需要语法规则,只需要数数。
这张表长什么样、又怎么「查」?以二元模型(N=2)为例:想预测「天气」后面接什么,就翻到 前文 =「天气」 这一块, 数一数语料里它后面各个词分别出现过多少次,再除以「天气」的总出现次数,就得到每个候选词的概率:
| 下一个词 w | 共现次数 count(「天气」, w) | 概率 P(w │「天气」) = 次数 ÷ 10,000 |
|---|---|---|
| 真好 | 2,300 | 23.0% |
| 不错 | 2,100 | 21.0% |
| 预报 | 1,800 | 18.0% |
| 怎么样 | 1,500 | 15.0% |
| 好热 | 1,000 | 10.0% |
| 香蕉 | 3 | 0.03% |
| (其余几千个词合计) | 1,297 | 13.0% |
换个角度看,这张频率表其实就是条件概率:给定前面 N 个词,下一个词出现的可能性有多大。 第 6 课说过,一个语言模型的本质,就是给「下一个词」分配一张概率分布表—— 「今天天气」之后,「真好」占 23%、「不错」占 21%、「香蕉」占 0.001%…… N-gram 就是这个想法最朴素的实现:直接拿历史频率当概率,能数则数,数不到就抓瞎。 后面几课要做的事,都是在换更聪明的方式去估计这同一张概率表。
局限:记性只有两三个词
试着用 N=2 的模型来补完这句话:
真正要填的词,应该和「小猫」「怕生人」「第一次」都有关—— 也许是「出门」「见生人」「叫出声来」。 但 N=2 的模型只看最后两个词:「第一次」__。 「第一次」后面最常见的搭配是什么?大概是「听说」「尝试」「见到」…… 完全不知道前面在说一只猫的事。
你可能想说:N 调大一点不就好了?把 N 从 2 改成 5,看最近 5 个词。 问题是:训练数据里,见过「怕生人的小猫,今天第一次」这整个组合的概率几乎为零。 N 越大,每个具体组合出现的次数越少,大量组合根本从未出现过。
打个比方:你统计了 100 亿条对话,但「非常怕生人的小猫今天第一次出门」这整句话, 一次也没出现过。N-gram 对「没见过的组合」完全束手无策,只能乱猜或者返回「不知道」。 N 越大,「没见过的组合」就越多——两难困境。
N-gram 能做什么,不能做什么
尽管有这些局限,N-gram 在几十年间一直是语言技术的支柱:
- 手机输入法的候选词推荐
- 早期语音识别(把声音转成文字时,用 N-gram 过滤掉"听起来像但文法奇怪"的结果)
- 垃圾邮件过滤(某些词组合在一起高度可疑)
- 机器翻译的初级版本
它之所以有用,是因为语言里大量的短距离搭配是非常固定的。 「天气」后面接「预报」的概率,远高于接「香蕉」的概率。 这些规律靠数数就能捕捉到,不需要任何深层理解。
但它做不到的事情同样明显:长句子、跨句子的理解、词义的灵活性—— 这些都需要一个能「理解词的含义」而不只是「认识词的形状」的工具。 下一课解决「词」本身的问题。
总结
N-gram 是语言预测的「数数法」: 看最近 N 个词,查历史统计,找最常见的下一个词。 不需要理解语言,只需要一张巨大的频率表。 但它的记性只有 N 个词——超出这个范围的上下文,完全看不到。
这一课你亲手推导了
- N-gram 的思路:看最近 N 个词 → 查频率表 → 预测下一个词。
- 训练方式:爬大量文本,统计每段连续词组出现的频率,存成表格。
- 局限①:只有 N 个词的记性,无法处理长距离依赖。
- 局限②:把词当成符号,「猫」和「小猫」是两个毫不相关的符号。
学习小测验
做完这一课,来检测一下核心知识点。选出你的答案后点击「提交」,即可看到正确选项与讲解。
词向量
让「猫」和「小猫」有共同点,让「国王−男人+女人≈女王」成立——词的意思如何变成坐标?