深入理解 n-gram:原理、应用与实践

内容纲要

🚀 本文是自然语言处理中基础又核心的知识之一 —— n-gram 的全景式讲解。无论你是 NLP 新手,还是 AI 应用工程师,这篇文章都能帮你用一句话总结 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 会导致稀疏性问题
  • 仅考虑局部上下文,缺乏长距离建模能力
  • 需要大量语料保证泛化能力

四、典型应用场景

  1. 文本分类、关键词提取
  2. 拼写纠错、拼音输入法
  3. 搜索联想、推荐系统
  4. OCR/语音识别后处理
  5. 传统文本生成任务(如短信)

五、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 的入门钥匙,也是理解现代语言模型的重要基础。它虽简单,却足够强大。无论是构建轻量级系统,还是做模型分析、提示词工程,它都是值得掌握的技能。


引用资料(完整)

  1. Jurafsky, D., & Martin, J. H. (2020). Speech and Language Processing. Pearson.
  2. Wikipedia contributors. N-gram
  3. Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval.
  4. Scikit-learn 官方文档:CountVectorizer
  5. Heafield, K. (2011). KenLM: Faster and smaller language model queries
  6. Chen, S. F., & Goodman, J. (1999). An Empirical Study of Smoothing Techniques for Language Modeling
  7. Mikolov, T. et al. (2013). Efficient Estimation of Word Representations in Vector Space
  8. Devlin, J. et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward