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)
权重含义
- TF大、IDF大:词在本文高频、全局很少见 → 核心关键词
- TF大、IDF小:词到处都有(停用词)→ 不重要
- TF小、IDF大:稀有词,单次出现也有一定区分度
五、直观例子
语料库共1000篇文章:
- "的":几乎1000篇都有 → IDF极小,TF-IDF几乎为0,过滤掉
- "手机":800篇有 → IDF偏小
- "大模型微调":仅30篇有 → IDF很大
如果某篇论文里"大模型微调"反复出现,它的TF-IDF值会远高于普通词汇,就是这篇文章的主题词。
六、常见用途
- 搜索引擎:计算关键词和搜索文本匹配度,排序检索结果
- 文本关键词提取:提取文章核心词
- 文本向量化:把句子/文档转为数字向量,用于分类、聚类、相似度计算
- 舆情分析、NLP预处理
七、优缺点
优点
- 简单高效,计算速度快
- 天然过滤无意义停用词
- 可直接转向量用于机器学习模型
缺点
- 只统计词频,不理解语义,无法区分多义词、近义词
- 不考虑词语顺序、上下文(Bag-of-Words 词袋假设)
- 长文档天然TF偏低,需要额外归一化
八、工具实现
Python 常用库一键计算:
sklearn.feature_extraction.text.TfidfVectorizer(最常用)- jieba分词 + TF-IDF 提取中文关键词
- 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])))