当前位置: 首页 > news >正文

TF-IDF和词袋模型

TF-IDF词袋模型(Bag of Words, BoW)是文本特征提取的两种经典方法,下面我会用通俗易懂的方式对比讲解它们的原理、实现和应用场景,并附上代码示例。

一、词袋模型(Bag of Words, BoW)

1. 核心思想
  • 粗暴但有效:将文本看作一个“装满单词的袋子”,忽略词序、语法,只统计每个词出现的频率

  • 类比:就像拆解乐高模型,把所有零件倒出来数一数每种积木的数量,而不关心原来怎么拼的。

2. 实现步骤
  1. 构建词表:统计所有文本中出现的唯一单词(即词汇表)。

  2. 生成向量:对每个句子,统计词表中每个词的出现次数。

3. 示例

原始文本

  • 句子1: "I love dogs."

  • 句子2: "I hate dogs and cats."

词表(Vocabulary)
['I', 'love', 'hate', 'dogs', 'and', 'cats']

向量化结果

Ilovehatedogsandcats
句子1110100
句子2101111
4. Python代码
from sklearn.feature_extraction.text import CountVectorizercorpus = ["I love dogs.", "I hate dogs and cats."]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)print("词表:", vectorizer.get_feature_names_out())
print("向量矩阵:\n", X.toarray())
 

输出

词表: ['and' 'cats' 'dogs' 'hate' 'love']
向量矩阵:[[0 0 1 0 1][1 1 1 1 0]]
 
5. 优缺点
  • 优点:简单、计算快。

  • 缺点

    • 忽略词序("狗咬人"和"人咬狗"向量相同)。

    • 高频常见词(如"the"、"is")会主导特征。


二、TF-IDF(Term Frequency-Inverse Document Frequency)

1. 核心思想
  • 加权统计:不仅考虑词频(TF),还惩罚在所有文档中常见的词(通过IDF)。

  • 目的:突出对当前文档有区分度的词,抑制通用词。

2. 公式拆解
  • TF(词频)

    TF(t,d)=词t在文档d中出现的次数文档d的总词数TF(t,d)=文档d的总词数词t在文档d中出现的次数​
  • IDF(逆文档频率)

    IDF(t)=log⁡(总文档数包含词t的文档数)IDF(t)=log(包含词t的文档数总文档数​)
  • TF-IDF

    TF-IDF(t,d)=TF(t,d)×IDF(t)TF-IDF(t,d)=TF(t,d)×IDF(t)
3. 示例(同前文本)
  • 计算"dogs"在句子1中的TF-IDF:

    • TF = 1/3 ≈ 0.33

    • IDF = log(2/2) = 0 (因为"dogs"在两个句子中都出现)

    • TF-IDF = 0.33 * 0 = 0

  • 计算"love"在句子1中的TF-IDF:

    • TF = 1/3 ≈ 0.33

    • IDF = log(2/1) ≈ 0.69 (仅句子1包含"love")

    • TF-IDF = 0.33 * 0.69 ≈ 0.23

4. Python代码
from sklearn.feature_extraction.text import TfidfVectorizercorpus = ["I love dogs.", "I hate dogs and cats."]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)print("词表:", vectorizer.get_feature_names_out())
print("TF-IDF矩阵:\n", X.toarray().round(2))
 

输出

词表: ['and' 'cats' 'dogs' 'hate' 'love']
TF-IDF矩阵:[[0.   0.   0.55 0.   0.83][0.58 0.58 0.33 0.58 0.  ]]
 

(注:实际输出包含归一化,数值可能略有不同)

5. 优缺点
  • 优点

    • 降低常见词的权重(如"dogs"的TF-IDF为0.33 vs. 词袋中的1)。

    • 提升关键词的重要性(如"love"在句子1中权重高)。

  • 缺点

    • 仍无法捕捉词序和语义。

    • 计算量略大于词袋模型。


三、对比总结

特性词袋模型(BoW)TF-IDF
是否考虑词频是(原始计数)是(加权后的词频)
是否惩罚常见词是(通过IDF)
适用场景简单文本分类/基线模型信息检索、关键词提取
计算复杂度中等

四、如何选择?

  1. 用词袋模型

    • 需要快速基线模型时。

    • 配合朴素贝叶斯等简单模型。

  2. 用TF-IDF

    • 当常见词(如“的”、“是”)可能干扰结果时。

    • 需要提取文档关键词时(如搜索引擎)。


五、进阶思考

  • 局限性:两者都无法理解语义(如"好"和"棒"被视为无关词)。

  • 改进方向

    • Word2Vec/GloVe:考虑词义相似性。

    • BERT:基于上下文的深度语义表示。

相关文章:

  • Python实用工具:文件批量重命名器
  • MySQL分库分表
  • 对神经正切核的理解和推导(1)
  • 浅析SpringBoot中的classpath
  • 互联网和以太网之是什么与区别
  • DVWA文件上传笔记
  • 踩坑记录:RecyclerView 局部刷新notifyItemChanged多次调用只触发一次 onBindViewHolder 的原因
  • 数据库调优与数据表的范式设计
  • LangGraph:部署智能应用
  • 在 .NET 环境下实现跨进程高频率读写数据
  • 再论自然数全加和-3
  • 使用CodeBuddy实现网页自动连点器
  • 【通用技巧】技术文章工业级指南:目标定位、架构设计与持续演进
  • java中的SPI(Service Provider Interface)机制解读
  • AWTK嵌入式图形框架开发备忘(二)
  • LangGraph 实战指南:长期记忆管理
  • 海外IP代理在跨境电商选品、运营、风控的实战应用解析
  • Java面向对象 一
  • 海思SVP_NPU开发适配
  • C++----Vector的模拟实现
  • 饿了吗外卖网站怎么做/google 网站推广
  • 网站 制作公司/建立公司网站需要多少钱
  • 成都网站建设门户/竞价网官网
  • 南通动态网站建设/软文范例
  • 做网站每年需付费吗/seo查询官方网站
  • 网站建设 全网推广/北京seo诊断