理解TF-IDF(词频-逆文档频率)使用Python

2025 年 3 月 6 日 | 阅读 4 分钟

词频-逆文档频率(Term Frequency-Inverse Document Frequency),简称 TF-IDF,是一种在数据挖掘、信息检索(IR)、机器学习和文本摘要等过程中使用的数值估计,用于确定一个词在文档中的重要性。它是自然语言处理(NLP)应用的广泛策略,包括文档分类、聚类和搜索引擎中的相关性排序。

词频(Term Frequency)

  • 词频衡量一个词(单词)在给定文档中出现的次数。它表示一个词在文档中出现的频率。分数越高,表示该词在文档中使用的越频繁。
  • 它通过将一个词在文档中的出现次数除以文档中的总词数来计算。

逆文档频率(Inverse Document Frequency)

  • 逆文档频率衡量一个词在整个文档集合中的重要性。它为在语料库中不常见的词赋予更高的权重,而为普遍存在的词赋予较低的权重。
  • 它通过取语料库中文档总数除以包含该词的文档数量的对数的倒数来计算。

TF-IDF 分数

  • TF-IDF 分数结合了 TF 和 IDF 的值,以评估一个词在给定内容和整个语料库中的重要性。
  • 它可以计算为 TF 和 IDF 的乘积。
    TF-IDF(t,d,D)=TF(t,d)×IDF(t,D)
    其中
    • t 是词(单词)。
    • d 是文档。
    • D 是文档语料库。

TF-IDF 有助于找到对特定文档独特且重要的词,使我们能够从其他文档中识别其内容。以下是它的工作原理。

高词频(Term Frequency)

文档中高词频表示该词对文档很重要。然而,它可能并非该文档所独有。例如,“the”和“is”等常用词的词频很高,但区分度很差。

高逆文档频率(Inverse Document Frequency)

高逆文档频率表明该词在整个语料库中很罕见。罕见的词通常具有更大的含义或重要性。具有高 IDF 的词在区分文档时被认为更相关。

TF-IDF 分数

通过结合 TF 和 IDF,TF-IDF 提供了一个度量,突出了在文档中常见且在语料库中独特的词。具有高 TF-IDF 分数的词更有可能反映文档的内容。

我们将使用 scikit-learn 库,该库提供了计算 TF-IDF 分数的基本 API。

安装所需的库

首先,确保我们已安装“scikit-learn”。如果未安装,可以使用 pip 进行安装。

导入必要的库

将必要的导入Python脚本或笔记本。

准备语料库

要计算 TF-IDF 分数,我们需要一组文档(一个语料库)。每个文档可以表示为一个字符串。

计算 TF-IDF 分数

使用“scikit-learn”中的“TfidfVectorizer”类来计算文档的 TF-IDF 分数。

解释 TF-IDF 结果

“tfidf_matrix”变量现在包含了每个文档中每个词的 TF-IDF 分数。我们可以使用这些分数来确定每个词在每个文档中的价值。

代码

输出

 
Document 1:
	document: 0.47
	first: 0.63
	is: 0.47
	the: 0.47
	this: 0.36
Document 2:
	document: 0.35
	is: 0.35
	second: 0.47
	the: 0.35
	this: 0.27
Document 3:
	and: 0.63
	is: 0.47
	the: 0.47
	this: 0.36
	third: 0.63
Document 4:
	document: 0.47
	first: 0.63
	is: 0.47
	the: 0.47
	this: 0.36   

此代码将计算指定文档集的 TF-IDF 分数,并为每个文档中的每个词打印它们。我们可以通过替换“documents”变量为用于 TF-IDF 分析的文档集合来修改此代码。我们还将根据需要自定义代码,例如过滤掉 TF-IDF 分数较低的词或对结果进行进一步分析。

结论

总之,TF-IDF(词频-逆文档频率)是一种用于文本分析和信息检索的有效策略,可对文档内和整个语料库中词的重要性进行量化分析。通过结合词频(TF)和逆文档频率(IDF),TF-IDF 分数突出了在文档中常见且在整个语料库中独特的词,使其对于文档分类、聚类和相关性排序等任务至关重要。在 Python 中,可以使用“scikit-learn”等包轻松实现 TF-IDF,从而能够高效地计算和解释 TF-IDF 分数。理解 TF-IDF 对于处理文本数据的任何人来说都至关重要,因为它能提供对文档中词重要性的重要见解,并实现更有效的信息检索和分析。