内容纲要
🚀 本文是自然语言处理中基础又核心的知识之一 —— n-gram 的全景式讲解。无论你是 NLP 新手,还是 AI 应用工程师,这篇文章都能帮你用一句话总结 n-gram,又能带你深入挖掘它在深度学习时代的角色转变与融合方式。
🧭 导读目录(点击跳转)
- 一、什么是 n-gram?
- 二、n-gram 的数学原理
- 三、n-gram 的优缺点
- 四、n-gram 的典型应用场景
- 五、n-gram 与现代 NLP 的关系
- 六、n-gram 实践代码示例(Python)
- 七、如何解决 n-gram 的局限?
- 八、Trigram 与更高阶 n-gram
- 九、n-gram 平滑技术详解
- 十、n-gram 与深度学习结合方式
- 十一、n-gram 在多语种中的应用挑战
- 十二、n-gram 的衍生与发展路径
- 十三、总结
- 引用资料(完整)
一、什么是 n-gram?
n-gram 是自然语言处理(NLP)中的一个基本概念,指的是从给定文本中连续提取的 n 个词或字符组成的序列。它是一种经典的语言建模方法。
- Unigram(1-gram):单词级,如 "AI"
- Bigram(2-gram):两词组合,如 "AI 模型"
- Trigram(3-gram):三词组合,如 "训练 AI 模型"
n-gram 模型通过统计频率,预测下一个词出现的概率,是很多 NLP 系统的基础。
二、n-gram 的数学原理
完整句子的概率可以分解为:
P(w_1, ..., w_n) = \prod_{i=1}^{n} P(w_i | w_1, ..., w_{i-1})
为了计算简便,我们采用马尔可夫假设,将其简化为:
P(w_i | w_{i-1}) = \frac{count(w_{i-1}, w_i)}{count(w_{i-1})}
这就是 Bigram 模型的核心公式。
三、n-gram 的优缺点
优点:
- 简单直观,易于实现
- 高效,适合小模型或边缘设备
- 可解释性强
缺点:
- 高阶 n-gram 会导致稀疏性问题
- 仅考虑局部上下文,缺乏长距离建模能力
- 需要大量语料保证泛化能力
四、典型应用场景
- 文本分类、关键词提取
- 拼写纠错、拼音输入法
- 搜索联想、推荐系统
- OCR/语音识别后处理
- 传统文本生成任务(如短信)
五、n-gram 与现代 NLP 的关系
虽然 BERT、GPT 等模型已统治 NLP,但 n-gram 并未消亡:
- 可作为神经网络输入特征
- 提升解释性和稳定性
- 在资源受限设备(如嵌入式 NLP)中依然实用
六、n-gram 实践代码示例(Python)
from sklearn.feature_extraction.text import CountVectorizer
corpus = [
"I love natural language processing",
"n-gram models are useful for text",
"this is a simple example"
]
vectorizer = CountVectorizer(ngram_range=(2, 2))
X = vectorizer.fit_transform(corpus)
print("Bigram 词表:", vectorizer.get_feature_names_out())
print("向量化结果:\n", X.toarray())
七、如何解决 n-gram 的局限?
- Add-One 平滑:避免概率为 0
- Back-off 模型:回退到低阶 n-gram
- Kneser-Ney 平滑:最先进,提升泛化能力
- 结合深度模型:融合神经网络和统计特征
八、进阶内容:更高阶的 n-gram 与实际挑战
高阶 n-gram(如 Trigram、4-gram)能提升上下文质量,但会带来数据稀疏性和计算负担,需要配合高质量语料或平滑算法。
九、n-gram 平滑技术详解
- Laplace(加一)平滑:简单但偏差大
- Kneser-Ney:考虑上下文多样性,是当前最佳平滑方法之一,常用于机器翻译与语音识别
十、n-gram 与深度学习结合方式
- 与词向量、CNN、RNN 融合做文本分类
- 加入 BERT、GPT 的输入增强
- 解释神经网络输出结果
- 弱监督特征构造(构建 n-gram 标签数据)
十一、n-gram 在多语种中的应用挑战
- 中文需要分词,或使用字级 n-gram
- 阿拉伯语、朝鲜语等需处理复杂词形变化
- 多语种统一 n-gram 表达需配合 embedding
十二、n-gram 的衍生与发展路径
技术 | 与 n-gram 的关系 |
---|---|
Skip-gram | 用 n-gram 方式训练词向量 |
TextCNN | 滑动窗口相当于权重化的 n-gram |
Self-Attention | 泛化为加权 n-gram |
BERT/MGPT | 做的是 masked 位置的 n-gram 重建 |
十三、总结
n-gram 是 NLP 的入门钥匙,也是理解现代语言模型的重要基础。它虽简单,却足够强大。无论是构建轻量级系统,还是做模型分析、提示词工程,它都是值得掌握的技能。
引用资料(完整)
- Jurafsky, D., & Martin, J. H. (2020). Speech and Language Processing. Pearson.
- Wikipedia contributors. N-gram
- Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval.
- Scikit-learn 官方文档:CountVectorizer
- Heafield, K. (2011). KenLM: Faster and smaller language model queries
- Chen, S. F., & Goodman, J. (1999). An Empirical Study of Smoothing Techniques for Language Modeling
- Mikolov, T. et al. (2013). Efficient Estimation of Word Representations in Vector Space
- Devlin, J. et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding