一句话定义:N-gram 语言模型(N-gram Language Model)是一种统计语言模型,它假设下一个词出现的概率只取决于前面 n-1 个词,然后靠统计大量文本里词串出现的频率来做预测。
它是怎么工作的:把“n”想成窗口大小。n=1 叫一元模型(Unigram),只看每个词自己出现的频率,完全不看上下文;n=2 叫二元模型(Bigram),看前 1 个词;n=3 叫三元模型(Trigram),看前 2 个词,以此类推。比如你想知道“今天天气”后面接“不错”的概率,就去找语料里“今天天气 不错”出现了多少次,再除以“今天天气”出现的总次数。这个比值就是模型给出的概率。
打个比方:这就像根据你刚点的两道菜猜你下一道会点什么。如果你点了“宫保鸡丁”和“米饭”,服务员猜“酸辣汤”的概率可能比“冰淇淋”高,因为过去很多客人这么点。但服务员只看你最近两道菜,不记得你进门时说过什么。
没见过的组合怎么办:真实语言里词串组合近乎无穷,很多合理组合在训练语料里一次都没出现。如果直接按频率算,概率会是 0,整个句子的概率也变成 0,这显然不合理。于是需要平滑(Smoothing)和回退(Backoff):没见过“今天天气 真好”这个三元组,就退一步看“天气 真好”这个二元组;二元组也没见过,就退到“真好”这个词本身的一元频率。常见的平滑方法有加一平滑、Kneser-Ney 平滑等。这像新餐厅没有你常点的搭配,店员就按大众口味推荐,而不是直接说“没有”。
和相邻概念的区别:
| 概念 | 看多少上下文 | 主要特点 |
|---|---|---|
| Unigram | 0 个词 | 只统计词频,忽略顺序 |
| N-gram(n=2/3/4) | 前 1/2/3 个词 | 固定窗口,统计频率,可解释 |
| 神经语言模型 | 更长上下文 | 用 RNN、Transformer 等学习语义泛化 |
| 词袋模型 | 全部词但忽略顺序 | 关注词是否出现,不关注局部顺序 |
N-gram 的“n”是历史窗口大小,不是模型层数。它和后来的神经网络语言模型最大的差别是:N-gram 靠数数,泛化能力弱;神经网络靠学习表示,能处理没见过的组合,但需要更多算力。
对从业者和普通人的意义:N-gram 是很多系统的轻量基线,速度快、可解释、不需要 GPU,常见于输入法联想、搜索建议、拼写纠错、语音识别重打分等场景。对普通人来说,你打字时弹出的候选词、搜索引擎的“您是不是要找”,背后就有这类统计思想。对 AI 从业者,理解 N-gram 是理解语言模型从统计到深度学习演进的起点;具体工具和实现细节,以官方页面为准。
