TF-IDF(词频-逆文档频率)

TF-IDF 完整讲解

一、全称

TF:Term Frequency 词频

IDF:Inverse Document Frequency 逆文档频率

合起来 TF-IDF = 词频-逆文档频率,是文本挖掘、检索最经典的词语权重计算算法,用来衡量一个词在某篇文档里的重要程度。

二、TF(词频)

含义:某个词在当前文档 中出现的次数,出现越多,TF越高。

公式:

TF(t,d)=词t在文档d中出现次数文档d总词数 TF(t,d) = \frac{词t在文档d中出现次数}{文档d总词数} TF(t,d)=文档d总词数词t在文档d中出现次数

举例:文档共100个词,"人工智能"出现5次 → TF=5/100=0.05

三、IDF(逆文档频率)

作用:惩罚到处都出现的通用词(的、是、我、今天),突出独有关键词。

逻辑:一个词如果在绝大多数文档都出现,说明它区分度极低,IDF就小;只在少数文档出现,IDF大。

公式:

IDF(t)=log⁡(总文档数N包含词t的文档数nt+1) IDF(t) = \log\left( \frac{总文档数N}{包含词t的文档数n_t + 1} \right) IDF(t)=log(包含词t的文档数nt+1总文档数N)

+1 是平滑处理,避免分母为0(新词没在任何文档出现)。

四、TF-IDF 最终权重

TF−IDF(t,d)=TF(t,d)×IDF(t) TF-IDF(t,d) = TF(t,d) \times IDF(t) TF−IDF(t,d)=TF(t,d)×IDF(t)

权重含义

  1. TF大、IDF大:词在本文高频、全局很少见 → 核心关键词
  2. TF大、IDF小:词到处都有(停用词)→ 不重要
  3. TF小、IDF大:稀有词,单次出现也有一定区分度

五、直观例子

语料库共1000篇文章:

  1. "的":几乎1000篇都有 → IDF极小,TF-IDF几乎为0,过滤掉
  2. "手机":800篇有 → IDF偏小
  3. "大模型微调":仅30篇有 → IDF很大
    如果某篇论文里"大模型微调"反复出现,它的TF-IDF值会远高于普通词汇,就是这篇文章的主题词。

六、常见用途

  1. 搜索引擎:计算关键词和搜索文本匹配度,排序检索结果
  2. 文本关键词提取:提取文章核心词
  3. 文本向量化:把句子/文档转为数字向量,用于分类、聚类、相似度计算
  4. 舆情分析、NLP预处理

七、优缺点

优点

  • 简单高效,计算速度快
  • 天然过滤无意义停用词
  • 可直接转向量用于机器学习模型

缺点

  1. 只统计词频,不理解语义,无法区分多义词、近义词
  2. 不考虑词语顺序、上下文(Bag-of-Words 词袋假设)
  3. 长文档天然TF偏低,需要额外归一化

八、工具实现

Python 常用库一键计算:

  1. sklearn.feature_extraction.text.TfidfVectorizer(最常用)
  2. jieba分词 + TF-IDF 提取中文关键词
  3. Gensim TfidfModel 处理大规模语料

极简示例伪代码

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["AI大模型应用", "AI图像识别", "汽车自动驾驶"]
tfidf = TfidfVectorizer()
res = tfidf.fit_transform(corpus)
# 输出每个词的TF-IDF权重
print(dict(zip(tfidf.get_feature_names_out(), res.toarray()[0])))
相关推荐
Zzz 小生9 小时前
Lazy Theta*:把昂贵的视线检测留到“真正需要”时再做
人工智能·算法·贪心算法·推荐算法
l1258659 小时前
# LangGraph Deep Research Agent 全流程设计:多轮研究、人机协同与真实来源管理
数据库·人工智能·python·算法·自然语言处理·oracle·langchain
青少儿编程课堂10 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
evans在进步10 小时前
LeetCode 438 找到字符串中所有字母异位词:滑动窗口与排序解法详解
算法·leetcode·职场和发展
M78佐菲10 小时前
Linux多线程:创建、回收与互斥同步
linux·笔记·学习·算法
小手cool10 小时前
使用递归对数组进行反转操作
java·数据结构·算法
兔兔兔兔110 小时前
记录C++ 13
开发语言·c++·算法
码行山野赴时序归途11 小时前
从暴力到最优:三道 C 语言入门题的解法思路
c语言·开发语言·数据结构·算法·leetcode·排序算法
土司大王11 小时前
LeetCode hot100——随机链表的复制
算法·leetcode·链表
叠层归一研究院11 小时前
螺旋时空:E框架的整合宇宙论
人工智能·经验分享·算法·机器学习·agi