# 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 来增强词向量表示——既保持了效率,又能处理未见过的词。