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])))
相关推荐
yi0115 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
灯澜忆梦8 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下8 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J8 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛9 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有9 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111119 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS9 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b10 小时前
算法日常・每日刷题--<动态规划>14
算法
赛博守夜人10 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全