Alex_McAvoy

想要成为渔夫的猎手

TF-IDF 算法

【概述】

词频-逆文档频率(Term Frequency-Inverse Document Frequency,TF-IDF)是一种用于信息检索与数据挖掘的常用加权技术,常用于衡量单词在文档中重要性,其结合了单词在文档中的频率和在整个文集中的普遍程度

TF-IDF 的主要思想是:如果某个单词在一个文档中出现的频率高,并且在其他文档中很少出现,则认为此词或者短语具有很好的类别区分能力

TF-IDF 简单快速,而且容易理解,但缺点有时使用词频来衡量文章中的一个词的重要性不够全面,有时候重要的词出现的可能不够多,而且这种计算无法体现位置信息,无法体现词在上下文的重要性

【词频】

词频(Term Frequency,TF)是单词在文档中出现的频率,通常会进行归一化处理,以防止其偏向过长的文档

【逆文档频率】

逆文档频率(Inverse Document Frequency,IDF)表示单词的普遍程度,如果包含单词 $w$ 的文档越少,则 IDF 值就越大,说明词条具有很好的类别区分能力;反之,若一个单词越常见,那么分母就越大,IDF 就越小

考虑到所有文档都不包含单词 $w$ 的情况,即为避免分母为 $0$,需要 $+1$

【TF-IDF】

TF-IDF 是 TF 与 IDF 的乘积

若在某一文档内,单词 $w$ 的 TF 高,说明该单词在该文档中较为重要,反之,TF 低,则说明该单词在该文档中不重要;若单词 $w$ 的 IDF 高,则说明该单词在整个语料库中不常见,反之,IDF 低,则说明该单词在文档中较为重要

也就是说,TF-IDF 与一个单词在文档中出现的次数成正比,与该单词在整个语料库出现的次数成反比

【Sklearn 实现】

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.feature_extraction.text import TfidfVectorizer

def tfidf(texts):
# 文本特征提取计算类,ngram_range 指定 N 的切分范围
vectorizer = TfidfVectorizer(ngram_range=(1,2))
# 拟合模型,将文本中的词语转换为词频 csr_matrix 矩阵
vec = vectorizer.fit_transform(texts)
# 获取词典列表
words = vectorizer.get_feature_names()
return words, vec

texts = ['AA is BB, and BB is AA', 'CC is not AA, but CC is DD']
words, vec = tfidf(texts)
感谢您对我的支持,让我继续努力分享有用的技术与知识点!