原力注入

文本特征向量化:词袋模型、Word2Vec 以及 TF-IDF 介绍

1. 引言

在自然语言处理(NLP)领域,计算机无法直接理解文本信息,因此需要将文本转换为数值向量,以便进行后续的分析和计算。这一过程被称为文本特征向量化。常见的文本向量化方法包括词袋模型(BoW)、TF-IDF 以及Word2Vec。


2. 词袋模型(Bag of Words, BoW)

2.1 词袋模型的基本原理

词袋模型通过统计文本中各个词出现的频次来表示文本。主要步骤如下:

  1. 构建词汇表:统计所有文本中出现的不同单词。
  2. 计算词频:统计每个文档中各个单词的出现次数。
  3. 生成向量:每个文本被表示为一个词频向量,维度等于词汇表大小。

2.2 词袋模型的特点

优势:

  • 简单易理解,计算高效。
  • 适用于文本分类等任务。

局限性:

  • 忽略词语顺序和语义信息。
  • 维度较高,易产生稀疏矩阵。

2.3 词袋模型示例及 Python 实现

from sklearn.feature_extraction.text import CountVectorizer
documents = ["I love machine learning", "Machine learning is amazing", "Deep learning builds on machine learning"]# 移除停用词可优化结果(示例)vectorizer = CountVectorizer(stop_words='english')X = vectorizer.fit_transform(documents)
print("词汇表:", vectorizer.get_feature_names_out())  # 输出词汇表print("词频矩阵:\n", X.toarray())  # 转换为数组形式

输出结果:

词汇表: ['amazing' 'builds' 'deep' 'learning' 'love' 'machine']词频矩阵: [[0 0 0 1 1 1] [1 0 0 1 0 1] [0 1 1 2 0 1]]

输出结果解释:

  • get_feature_names_out() 返回词汇表中的单词列表。
  • toarray() 将稀疏矩阵转换为密集数组,每行对应一个文档的词频向量。

2.4 词袋模型的应用

  • 主题建模(如 LDA):通过词频分布发现文档主题结构。
  • 文本分类(如垃圾邮件检测):根据词频向量训练分类器。

3. TF-IDF:基于统计的文本表示

3.1 TF-IDF 的计算方式

TF-IDF(Term Frequency-Inverse Document Frequency)通过降低常见词权重突出重要词汇。公式如下:

其中:

  • TF(词频):词在文本中的出现次数。
  • IDF(逆文档频率):衡量词的稀有程度,计算公式为:
    • N:语料库中文档总数
    • DF:包含某个词的文档数量
    • 实际实现如 sklearn 中默认添加平滑项 smooth_idf=True,避免除零错误

3.2 TF-IDF 的特点

优势:

  • 突出重要单词,降低常见词影响。
  • 适用于信息检索和关键词提取。

局限性:

  • 依赖统计信息,无法捕捉语义关系。

3.3 TF-IDF 示例及 Python 实现

from sklearn.feature_extraction.text import TfidfVectorizer
documents = ["I love machine learning", "Machine learning is amazing", "Deep learning builds on machine learning"]# 使用 TfidfVectorizervectorizer = TfidfVectorizer(stop_words='english')  # 过滤常见停用词X = vectorizer.fit_transform(documents)
print("词汇表:", vectorizer.get_feature_names_out())print("TF-IDF 矩阵:\n", X.toarray())

输出结果:

词汇表: ['amazing' 'builds' 'deep' 'learning' 'love' 'machine']TF-IDF 矩阵: [[0.         0.         0.         0.45329466 0.76749457 0.45329466] [0.76749457 0.         0.         0.45329466 0.         0.45329466] [0.         0.51680194 0.51680194 0.61046311 0.         0.30523155]]

输出结果解释:

  • get_feature_names_out() 返回词汇表。
  • toarray() 转换为密集数组,每行对应一个文档的 TF-IDF 向量。

3.4 TF-IDF 的应用

  • 搜索引擎排名:根据 TF-IDF 权重排序搜索结果。
  • 关键词提取:识别文档中的重要词汇。

4. Word2Vec:基于神经网络的词向量表示

4.1 Word2Vec 的基本概念

Word2Vec 通过神经网络将单词映射到低维向量空间,捕捉语义关系(如“国王 - 男人 + 女人 ≈ 女王”)。

4.2 Word2Vec 的训练方法

  • CBOW(Continuous Bag of Words):通过上下文预测中心词,适合高频词。
  • Skip-Gram:通过中心词预测周围词,适合捕捉罕见词语义。

4.3 Word2Vec 示例及 Python 实现

from gensim.models import Word2Vec
sentences = [["I", "love", "machine", "learning"],             ["Machine", "learning", "is", "amazing"],             ["Deep", "learning", "builds", "on", "machine", "learning"]]# 需使用 gensim ≥4.0.0,实际应用中建议设置 min_count=5 过滤低频词model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
print("词向量:", model.wv["machine"])  # 输出 "machine" 的向量(长度 100)

输出结果:

词向量: [-8.6196875e-03  3.6657380e-03  5.1898835e-03  5.7419385e-03  7.4669183e-03 -6.1676754e-03  1.1056137e-03  6.0472824e-03 -2.8400505e-03 -6.1735227e-03 -4.1022300e-04 -8.3689485e-03 -5.6000124e-03  7.1045388e-03  3.3525396e-03  7.2256695e-03  6.8002474e-03  7.5307419e-03 -3.7891543e-03 -5.6180597e-04  2.3483764e-03 -4.5190323e-03  8.3887316e-03 -9.8581640e-03  6.7646410e-03  2.9144168e-03 -4.9328315e-03  4.3981876e-03 -1.7395747e-03  6.7113843e-03  9.9648498e-03 -4.3624435e-03 -5.9933780e-04 -5.6956373e-03  3.8508223e-03  2.7866268e-03  6.8910765e-03  6.1010956e-03  9.5384968e-03  9.2734173e-03  7.8980681e-03 -6.9895042e-03 -9.1558648e-03 -3.5575271e-04 -3.0998408e-03  7.8943167e-03  5.9385742e-03 -1.5456629e-03  1.5109634e-03  1.7900408e-03  7.8175711e-03 -9.5101865e-03 -2.0553112e-04  3.4691966e-03 -9.3897223e-04  8.3817719e-03  9.0107834e-03  6.5365066e-03 -7.1162102e-04  7.7104042e-03 -8.5343346e-03  3.2071066e-03 -4.6379971e-03 -5.0889552e-03  3.5896183e-03  5.3703394e-03  7.7695143e-03 -5.7665063e-03  7.4333609e-03  6.6254963e-03 -3.7098003e-03 -8.7456414e-03  5.4374672e-03  6.5097557e-03 -7.8755023e-04 -6.7098560e-03 -7.0859254e-03 -2.4970602e-03  5.1432536e-03 -3.6652375e-03 -9.3700597e-03  3.8267397e-03  4.8844791e-03 -6.4285635e-03  1.2085581e-03 -2.0748770e-03  2.4403334e-05 -9.8835090e-03  2.6920044e-03 -4.7501065e-03  1.0876465e-03 -1.5762246e-03  2.1966731e-03 -7.8815762e-03 -2.7171839e-03  2.6631986e-03  5.3466819e-03 -2.3915148e-03 -9.5100943e-03  4.5058788e-03]

4.4 Word2Vec 的特点

优势:

  • 捕捉语义信息(相似词、类比推理)。
  • 适用于语义分析、推荐系统。

局限性:

  • 需大量训练数据,低频词可能学习不足。

4.5 Word2Vec 的应用

  • 语义分析:通过向量相似性判断语义关系。
  • 机器翻译的词向量初始化:为模型提供语义先验知识。
  • 推荐系统:利用词向量进行个性化推荐。

5. 三种方法的对比分析

特性词袋模型TF-IDFWord2Vec
计算方式
词频统计
词频 × 逆文档频率
神经网络训练
语义理解
无
无
有
词语独立性
词与词独立
词与词独立
依赖上下文
维度大小
词汇表大小(高)
词汇表大小(高)
预设维度(低,如 100)
适用场景
传统文本分类
信息检索
语义分析、推荐系统
计算复杂度
低
中
高
内存占用
高(稀疏矩阵)
高(稀疏矩阵)
低(密集向量)

注:词袋模型与 TF-IDF 的维度随词汇表增长,而 Word2Vec 的维度固定。


6. 结合使用不同文本向量化方法

实际应用中可结合方法提升特征表达能力:

  • TF-IDF + Word2Vec:用 TF-IDF 加权词向量生成文档向量,结合统计优势与语义信息。
  • BoW + 主题模型:通过 LDA 分析词频分布发现主题结构。
  • 扩展方法:Doc2Vec 可直接生成文档级向量,GloVe 和 FastText(支持子词嵌入)也是常用文本表示方法。

7. 总结

词袋模型、TF-IDF 和 Word2Vec 各有优缺点,适用于不同场景。传统方法仍在小规模数据和简单任务中具有实用价值。

随着技术发展,基于 Transformer 的预训练模型(如 BERT、GPT)逐渐成为主流。相比 Word2Vec,BERT 和 GPT 采用自注意力机制(Self-Attention),能够捕捉更复杂的上下文信息,并生成动态词向量(同一单词在不同语境下的向量不同)。这些模型通过上下文相关向量(同一单词在不同语境中向量不同)和长距离依赖捕捉能力,显著提升了 NLP 任务的性能。

Image