词袋(Bag‑of‑Words,BoW)
词袋是一种把文本看作“词的集合(袋子)”的抽象概念。它不关注词语的顺序、句法结构或上下文,只记录每个词在文本中出现的次数或是否出现。词袋本身是一种表示方式,而词袋模型则是基于这种表示进行特征提取、向量化并用于机器学习的完整流程。
1. 词袋模型的核心思想
- 无序性:把文档视为词的多重集合(bag),忽略词序,只统计出现频率。
- 稀疏向量:词汇表往往很大,而单篇文档实际出现的词很少,导致特征向量大多数维度为 0,形成稀疏矩阵。
- 特征化:每篇文档被映射为一个长度等于词汇表大小的向量,向量的每个维度对应词汇表中的一个词,值可以是二进制(是否出现)、计数(出现次数)或加权值(如 TF‑IDF)。
2. 构建词袋模型的步骤
| 步骤 | 说明 | 常用工具/方法 |
|---|---|---|
| ① 文本预处理 | 分词、去除停用词、词干/词形还原 | jieba、NLTK、spaCy |
| ② 构建词汇表 | 收集所有文档中出现的唯一词,形成词典(字典) | CountVectorizer、HashingVectorizer |
| ③ 向量化 | 将每篇文档映射为词频向量或加权向量 | 计数向量、二进制向量、TF‑IDF 向量 |
| ④ 特征选择(可选) | 去除低频词、限制词表大小、使用 n‑gram 扩展 | min_df、max_df、ngram_range |
| ⑤ 模型训练 | 使用向量化后的特征进行分类、聚类、检索等任务 | 朴素贝叶斯、SVM、逻辑回归等 |
3. 常见的词袋表示方式
| 表示方式 | 计算方式 | 适用场景 |
|---|---|---|
| 二进制(Binary) | 词出现记 1,不出现记 0 | 关注词的存在性,如关键词过滤 |
| 计数(Count) | 统计词出现次数 | 基础文本分类、信息检索 |
| TF‑IDF | 词频 × 逆文档频率,降低常见词权重 | 情感分析、主题建模,提升区分度 |
| n‑gram | 将相邻 n 个词视为一个“词”,统计其出现 | 捕捉局部词序信息,提升模型表达能力 |
| 哈希技巧(Hashing) | 用哈希函数直接映射词到固定维度 | 大规模词表时降低内存占用 |
4. 词袋模型的优点
- 实现简单:只需分词和计数,无需复杂的语言模型。
- 可解释性强:每个特征对应具体词,易于解释模型输出。
- 适用范围广:文本分类、情感分析、信息检索、文档聚类等均可直接使用。
5. 词袋模型的局限性
| 局限 | 说明 |
|---|---|
| 忽略词序 | 失去句子结构和语义顺序信息,导致对上下文敏感的任务表现不佳。 |
| 高维稀疏 | 词表大时向量维度极高,存储和计算成本上升。 |
| 语义缺失 | 同义词、词形变化等语义信息未被捕获,需要后续词嵌入或深度模型补足。 |
| 对长文本敏感 | 长文档中高频词会主导向量,需使用 TF‑IDF 或归一化处理。 |
6. 典型应用案例
- 文本分类:新闻分类、垃圾邮件过滤。
- 情感分析:商品评论正负向判别。
- 信息检索:搜索引擎的倒排索引实现。
- 文档聚类:相似文档自动分组。
在实际项目中,常配合 Scikit‑learn 的 CountVectorizer、TfidfVectorizer 等实现快速原型;若词表极大,则使用 HashingVectorizer 进行特征压缩。
小结
词袋模型是一种把文本转化为数值特征的基础技术,核心是把文档视作“词的袋子”,通过词频或加权方式生成稀疏向量。它实现简单、解释性好,广泛用于各种 NLP 任务,但也因忽略词序和语义而存在局限,实际使用时常结合 TF‑IDF、n‑gram、哈希技巧或更高级的词嵌入模型进行改进。
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!