0. 引言
前情提要:
《NLP深入学习(一):jieba 工具包介绍》
《NLP深入学习(二):nltk 工具包介绍》
1. 什么是 TF-IDF
TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于信息检索和文本挖掘的常用加权技术,用于评估一个词语对于一个文档集合中某一篇文档的重要程度。它结合了两个关键概念:
-
词频(Term Frequency, TF):
- 表示某个特定词语在一个文档中出现的次数或频率。直观上讲,如果一个词语在文档中频繁出现,那么这个词对该文档内容的重要性可能就较高。
-
逆文档频率(Inverse Document Frequency, IDF):
- 是一种调整因子,用来衡量词语在整个文档集合中的普遍性。如果一个词语在大量文档中都频繁出现,则认为该词缺乏区分度,因此 IDF 值会较低;反之,如果一个词语仅在少数文档中出现,那么它的 IDF 值会相对较高,表示这个词具有较高的鉴别能力。
- 例如,“你、我、他、得、的、地”这类词汇会出现很多次,但是对整体文档而言其实意义不大,所以乘于其频率的倒数就会降低其权重。
综合上述两项指标,TF-IDF值是词频(TF)与逆文档频率(IDF)的乘积:
tfidf(t, d) = tf(t, d) * idf(t)
其中:
t
代表词语(term)d
代表文档(document)tf(t,d)
是文档 d 中 t 的词频idf(t)
是词语 t 在整个文档中的频率倒数
2. TF-IDF 作用
TF-IDF 用于衡量一个词对于一个文档集合中某个特定文档的重要性,在实际运用中,TF-IDF 可以用于以下几个方面:
-
信息检索: TF-IDF 在搜索引擎中广泛使用。当用户输入查询关键词时,搜索引擎使用 TF-IDF 来评估文档与查询的相关性,并按照相关性对文档进行排名。这样,包含查询关键词的文档会更有可能出现在搜索结果的前面。
-
文本分类: 在文本分类任务中,TF-IDF 可以用来提取文档的关键特征。通过计算每个词的 TF-IDF 值,可以得到一个特征向量,用于训练分类模型。这样的模型可以用于将文档分为不同的类别,例如垃圾邮件过滤、情感分析等。
-
关键词提取: TF-IDF 可以帮助识别文档中最重要和具有代表性的关键词。通过计算每个词的 TF-IDF 值,可以找到那些在文档中频繁出现但在整个文档集合中罕见的词,这些词通常是文档主题的关键词。
-
推荐系统: 在推荐系统中,TF-IDF 可以用于衡量用户对某些内容的兴趣程度。通过分析用户的历史行为,计算不同文档或项目的 TF-IDF 值,可以为用户推荐他们可能感兴趣的内容。
-
文本聚类: TF-IDF 也可以用于文本聚类,将相似的文档分组到同一类别。通过计算文档之间的相似度,可以使用聚类算法将文档分成具有相似主题或内容的群组。
在这些应用中,TF-IDF 是一种简单而有效的技术,但也有一些局限性。例如,它无法考虑词语的语义关联性,因此在一些场景下可能需要更复杂的模型来处理。
3. Python 使用
3.1 计算 tf-idf 的值
在 Python中,使用 TF-IDF,可以借助 sklearn
这个包,使用sklearn
库中的TfidfVectorizer
类。
假设你有一个包含多个文本样本的列表或DataFrame,每个样本代表一个文档。
documents = [
"这是第一个文档",
"这是第二个文档,其中包含了特定词语",
# 更多文档...
]
示例代码:
from sklearn.feature_extraction.text import TfidfVectorizer
# 假设我们有一些文档
documents = [
"这是第一个文档",
"这是第二个文档,其中包含了特定词语",
]
# 初始化TfidfVectorizer实例
vectorizer = TfidfVectorizer()
# 将文档转换为TF-IDF向量,转换完成后,tfidf_matrix是一个稀疏矩阵
tfidf_matrix = vectorizer.fit_transform(documents)
# 打印词汇表
print(