词频-逆文档频率(Term Frequency-Inverse Document Frequency,简称 TF-IDF)是一种统计方法,用以评估一个词对于一个文本或一组文本的重要性。
定义
TF-IDF = 词频(TF)× 逆文档频率(IDF)
- 词频(TF):一个词在文本中出现的频率,反映了这个词在该文本中的重要性。
- 逆文档频率(IDF):该词在全部文本中出现的次数的逆像,越少出现的词,IDF越高。
通俗的说,TF-IDF 的含义是:一个词在一篇文档中频繁出现,但在全部文档中很少出现,那么这个词很有代表性。
应用
- 信息检索。评估查询词与文本的相关性
- 文本分类。用于文本特征提取
- 文本 clustering。文本之间的相似性计算
- 链机翻译。在将整段文本转化为向量时使用
示例代码
scheme
Copy
```python from sklearn.feature_extraction.text import TfidfVectorizer corpus = [ 'This is the first document.', 'This document is the second document.', 'And this is the third one.' ] vectorizer = TfidfVectorizer() vectors = vectorizer.fit_transform(corpus) print(vectors[0].toarray()) #[[0. 0. 0.5 0.8660254] # [0.5 0.8660254 0. 0. ]] ``` TfidfVectorizor 可以将文本转化为TF-IDF向量表示。
词频率(TF)与逆文本频率(IDF)是反映一个词语对于一篇文本重要性的两个指标。
TF是词频(Term Frequency),表示词条(关键字)在文本中出现的频率。这个数字通常会被归一化(一般是词频除以文章总词数),以防止它偏向长的文件。
公式:
$$
tf_{ij} = \frac{n_{i,j}}{\sum_{k}n_{k,j}}
$$
其中 ni,jn_{i,j} 是该词在文件djd_j中出现的次数,分母则是文件djd_j中所有词汇出现的次数总和。
IDF是逆向文件频率(Inverse Document Frequency),某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数。
包含词条t的文本数量越少, IDF越大,说明词条具有很好的类别区分能力。
公式:
$$
idf_i = log\frac{\mid D \mid}{\mid\lbrace j:t_i \in d_j \rbrace\mid}
$$
其中,∣D∣\mid D \mid 是语料库中的文本总数。∣{j:ti∈dj}∣ \mid\lbrace j:t_i \in d_j \rbrace\mid 表示包含词语 tit_i 的文本数目(即 nin_i, j≠0j≠0 的文件数目)。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1+∣{j:ti∈dj}∣ 1 + \mid\lbrace j:t_i \in d_j \rbrace\mid 即:
$$
idf_i = log\frac{语料库的文本总数}{1 + 包含词条w的文本数}
$$
TF-IDF即为TF * IDF
某特定文本中出现频率高的词语,且该词语在整个文本语料库中的出现的频率较低,对应的TF-IDF较大。因此,TF-IDF可以用于过滤掉在所有文本中均常见的词语,突出具体某个文本中的重要词语。
书籍:
《自然语言处理:理论与技术综述》
这本书详细介绍了TF-IDF算法及其在文本处理中的应用。
《Speech and Language Processing》
第三章专门讲解了TF-IDF的概念和实际案例。
在线课程:
Andrew Ng 机器学习课程
中介绍了TF-IDF如何用于文本处理。
Coursera NLP课程
讲解了TF-IDF是如何用于文本预处理的。
Stanford CS230课程
也提供了TF-IDF的实例和实战。
可以学习的内容:
- TF-IDF的数学原理
- TF-IDF的变体算法,如TF,IDF等
- 在不同领域的应用,如文本挖掘、搜索引擎等
- 用编程实现TF-IDF算法
- TF-IDF与其他特征提取技术的比较
除此以外,你也可以:
- 在Kaggle和GitHub上查看TF-IDF相关项目源码
- 在Kaggle上查找数据集,自己实现一个TF-IDF模型
- 查看更多的文章和博客,解决常见问题
总的来说,你可以从以下方面学习和实践TF-IDF:
- 理解数学原理
- 掌握变种算法
- 了解实际应用
- 进行编程实战
- 分析理论基础