11 只生成词向量之TF-IDF
系列进度
自然语言处理入门 · 第 11 / 30 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
TF-IDF 的价值在于让常见词少抢权重,让更能区分文档的词浮出来。它常用于搜索、聚类和传统分类基线。
我会抽查每篇文档权重最高的词。如果都是无意义高频词,分词或停用词表可能有问题。
在自然语言处理(NLP)中,词向量的表示方法有很多,从最简单的词袋模型开始,再到我们今天要讨论的TF-IDF(Term Frequency-Inverse Document Frequency)方法。相较于词袋模型,TF-IDF不仅考虑了词频,还考虑了词的重要性,从而为文本提供更为精确的表示。
什么是TF-IDF
TF-IDF 是一个统计算法,它用来评估单词在文档集合或语料库中的重要性。它由两个部分组成:
学习 TF-IDF 时,先看词在本文档中出现多少,再看它在整个语料中是否普遍。
-
词频(TF):一个词在某篇文档中出现的频率。其计算公式为:
其中,表示词
w在文档d中的出现次数,表示文档d中词的总数。
逆文档频率(IDF):一个词在所有文档中重要性的度量。其计算公式为:
其中,表示整个文档集合的大小,而表示包含词w的文档数量。
结合这两个部分,我们可以得到TF-IDF的计算公式:
TF-IDF的工作流程
TF-IDF的计算流程通常包括以下几个步骤:
读《只生成词向量之TF-IDF》时,可以把配图当成路线卡:先看整体顺序,再看每一步为什么这样做,最后再检查边界条件。
-
文本预处理:去除停用词、标点符号,进行分词等。
-
计算词频(TF):统计每个词在每个文档中的出现频率。
-
计算逆文档频率(IDF):统计每个词在所有文档中出现的情况。
-
计算TF-IDF值:将TF和IDF相乘以获得每个词的TF-IDF值。
案例演示
假设我们有如下三个文档:
- 文档1:
我 爱 自然 语言 - 文档2:
我 爱 编程 - 文档3:
自然 语言 处理 是 很 有趣 的
我们来计算“自然”这个词在这三篇文档中的TF-IDF值。
步骤1:文本预处理
在这个例子中,文本已经被很好地分词。我们可以直接进入下一步。
步骤2:计算词频(TF)
- 文档1:
我(1), 爱(1), 自然(1), 语言(1)=> TF = {我: 0.25, 爱: 0.25, 自然: 0.25, 语言: 0.25} - 文档2:
我(1), 爱(1), 编程(1)=> TF = {我: 0.33, 爱: 0.33, 编程: 0.33} - 文档3:
自然(1), 语言(1), 处理(1), 是(1), 很(1), 有趣(1), 的(1)=> TF = {自然: 0.14, 语言: 0.14, 处理: 0.14, 是: 0.14, 很: 0.14, 有趣: 0.14, 的: 0.14}
步骤3:计算逆文档频率(IDF)
自然在文档1和文档3中出现,文档总数为3,因此有:
步骤4:计算TF-IDF值
- 文档1:
-
文档2:没有
自然,因此为0。 -
文档3:
最终结果为:
- 文档1中的“自然” TF-IDF 值为 0.044
- 文档2中的“自然” TF-IDF 值为 0
- 文档3中的“自然” TF-IDF 值为 0.025
Python实现
我们可以使用Python中的scikit-learn来方便地计算TF-IDF值。以下是一个简单的实现:
from sklearn.feature_extraction.text import TfidfVectorizer
# 样本文档
documents = ["我 爱 自然 语言", "我 爱 编程", "自然 语言 处理 是 很 有趣 的"]
# 创建TF-IDF向量器
vectorizer = TfidfVectorizer()
# 拟合并转换文档
tfidf_matrix = vectorizer.fit_transform(documents)
# 打印结果
feature_names = vectorizer.get_feature_names_out()
dense = tfidf_matrix.todense()
denselist = dense.tolist()
import pandas as pd
df_tfidf = pd.DataFrame(denselist, columns=feature_names)
print(df_tfidf)
输出将为一个包含每个单词在每个文档中TF-IDF值的矩阵。
如果《只生成词向量之TFIDF》还没完全消化,可以从这张卡片的四个动作重新走一遍。
回看《只生成词向量之TFIDF》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。
小结
TF-IDF是一种强有力的文本特征提取方法,它解决了词袋模型的局限性,通过考虑词频和逆文档频率,我们能够提取出语料中的重要信息及词的相对重要性。在接下来的篇章中,我们将学习更为复杂的Word2Vec模型,这将进一步丰富我们的词向量知识体系。
通过本篇教程,你应该对TF-IDF有了基本的理解,以及如何在Python中实现它。希望你能在后续的学习中步入更深入的NLP领域!
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
只生成词向量之TF-IDF适合谁读?
这是 自然语言处理入门 系列第 11 / 30 篇,适合正在学习自然语言处理入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇自然语言处理入门教程要多久?
按中文技术文章阅读速度估算,通读大约 5 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读