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

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:基于上下文的深度语义表示。

http://www.xdnf.cn/news/8802.html

相关文章:

  • FPGA高速接口 mipi lvds cameralink hdml 千兆网 sdi
  • 「Python教案」输入输出函数的使用
  • c语言和系统的文件接口
  • 427. 建立四叉树
  • OpenLayers 加载动画控件
  • 对比Redis与向量数据库(如Milvus)在AI中的应用
  • PyQt5高效布局指南:QTabWidget与QStackedWidget实战解析
  • LangChain4j第三篇: RAG的简单应用与实践
  • 留存率问题
  • [AI]主流大模型、ChatGPTDeepseek、国内免费大模型API服务推荐(支持LangChain.js集成)
  • QWidget类关系图
  • AI方案调研与实践二:模型训练
  • 电子电路:什么是孤立导体?即孤立导体的电荷分布与特性
  • Linux常见指令合集+知识点
  • 12软件测试需求分析案例-删除学生信息
  • 量子计算:开启未来计算新纪元的革命性技术
  • CAU人工智能class5 激活函数
  • 科学计算中的深度学习模型精解(2)(RNN,LSTM,Transformer,KAN)
  • 自动涂胶机设计及其在工业生产中的应用研究
  • 软件测试:黑盒+白盒测试【等价类/边界值/判定表/因果图/两两组合/场景/错误推测逻辑覆盖/路径分析】
  • 光模块(Optical Module)的工作原理、技术参数、应用场景及行业趋势
  • (头歌作业)-Python第六章作业
  • 给定终点和时间的DoubleS轨迹
  • 语音搜索崛起:专业优化指南助您引领潮流
  • Docker 安装 Harbor 教程(搭建 Docker 私有仓库 harbor 避坑指南)【woodwhales.cn】
  • C++入门
  • mysql统计数据库大小
  • 【场景分析】基于概率距离快速削减法的风光场景生成与削减方法
  • MSP430G2553 USCI模块串口通信
  • tvalid寄存器的理解