# Summary
N-gram 是一种将文本分解成连续 N 个单元(词或字符)的方法。让我用具体例子来说明:
# Cues
# Notes
N-gram 是一种将文本分解成连续 N 个单元(词或字符)的方法。让我用具体例子来说明:
## 词级别 N-gram
假设有句子:"我喜欢吃苹果"
- **1-gram (unigram)**:["我", "喜欢", "吃", "苹果"]
- **2-gram (bigram)**:["我 喜欢", "喜欢 吃", "吃 苹果"]
- **3-gram (trigram)**:["我 喜欢 吃", "喜欢 吃 苹果"]
## 字符级别 N-gram
以单词 "hello" 为例:
- **2-gram**:["he", "el", "ll", "lo"]
- **3-gram**:["hel", "ell", "llo"]
- **4-gram**:["hell", "ello"]
## 实际应用例子
### 1. 文本分类中的特征提取
```Java
原文:"这部电影真的很好看"
2-gram特征:["这部 电影", "电影 真的", "真的 很", "很 好看"]
```
这些 n-gram 可以捕捉词语搭配信息,比如"很好看"比单独的"很"和"好看"更有意义。
### 2. FastText 中的子词 N-gram
```Java
单词:"apple"
3-gram:["<ap", "app", "ppl", "ple", "le>"]
(< 和 > 表示词的开始和结束)
```
这样即使遇到未见过的词 "apples",也能通过共享的 n-gram(如 "app", "ppl")获得相似的表示。
### 3. 语言模型预测
```Java
已知文本:"今天天气"
使用 3-gram 模型,可能预测:
- "今天 天气" → "很好"(出现频率高)
- "今天 天气" → "不错"(出现频率中)
- "今天 天气" → "真冷"(出现频率低)
```
## N-gram 的优缺点
**优点**:
- 简单有效,能捕捉局部上下文信息
- 计算效率高
- 对于短文本分类效果好
**缺点**:
- N 增大时,可能的组合数呈指数增长(数据稀疏问题)
- 只能捕捉固定长度的上下文
- 无法理解长距离依赖关系
这就是为什么 FastText 使用字符级 n-gram 来增强词向量表示——既保持了效率,又能处理未见过的词。