TF-IDF,即词频-逆文档频率,是一种用于分析单词和文档频率的技术。它通过统计一个单词在单个文档中出现的频率以及在所有文档集合中的出现频率,来评估该单词对于特定文档的重要程度。
TF-IDF的核心思想是:一个单词在特定文档中出现的频率越高,且在其它文档中出现的频率越低,则该单词对于该文档的语义贡献越大。
一、TF-IDF计算方法
- 词频(Term Frequency,TF)
词频是指一个单词在单个文档中出现的次数。通常情况下,我们对单词出现的次数进行归一化处理,以消除文档长度的差异。常用的归一化方法有:最大值归一化、L1归一化和L2归一化等。 - 逆文档频率(Inverse Document Frequency,IDF)
逆文档频率是指一个单词在所有文档集合中出现的频率的倒数。一个单词在所有文档中出现的频率越高,其IDF值越低,说明该单词的语义贡献越小。通常情况下,我们使用log函数计算IDF值,以增强数值稳定性。 - TF-IDF加权
将TF和IDF值相乘,即可得到TF-IDF加权值。具体公式如下:
$$ TF-IDF = TF imes IDF $$
二、TF-IDF应用场景 - 文本分类和聚类:通过计算文档集合中每个单词的TF-IDF值,可以提取出文档的主题特征,进而实现文本分类和聚类。
- 信息检索:在信息检索中,我们可以通过计算查询语句和文档集合中每个单词的TF-IDF值,找到与查询语句最相关的文档。
- 情感分析:通过计算评论或微博等文本中每个单词的TF-IDF值,可以识别出文本的情感倾向(正面、负面或中性)。
- 推荐系统:通过分析用户历史行为数据中每个单词的TF-IDF值,可以找到用户的兴趣点,进而实现精准推荐。
三、Python代码示例
下面是一个简单的Python代码示例,演示如何使用scikit-learn库计算TF-IDF值:
```python
from sklearn.feature_extraction.text import TfidfVectorizer定义一组文本数据
documents = [
‘This is the first document.’,
‘This document is the second document.’,
‘And this is the third one.’,
‘Is this the first document?’
]创建TF-IDF向量器对象
vectorizer = TfidfVectorizer()计算TF-IDF值并转换为一维数组
tfidf_matrix = vectorizer.fit_transform(documents)
tfidf_array = tfidf_matrix.toarray()输出每个单词的TF-IDF值(取对数形式)
print(vectorizer.get_feature_names()) # 输出所有单词的列表
print(tfidf_array) # 输出每个单词的TF-IDF值(取对数形式)