1.含义
在自然语言处理中非常重要的算法,用于计算一个词汇在文本中的重要性。
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency,简写为TF),IDF意思是逆文本频率指数(Inverse Document Frequency),它与一个词的常见程度成负相关。
注:
TF-IDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
2.公式
3.例子
比如现在我有一篇文章《中国蜜蜂养殖》,现在我要找到这篇文章的关键词。
(注:关键词即能反映这篇文章的特性的词汇)
例如大家在Google的时候,肯定搜索的是一个关键词,而非是整篇内容。
在寻找关键词的过程当中,提取每个词的词频。我们发现出现次数最多的词可能是“的”,“是”,“在”等对文章分类或搜索没有帮助的停用词(stop words)。
假设我们把所有的停用词都过滤掉,只考虑有意义的词。可能遇到一个问题,“中国”,“蜜蜂”,“养殖”三个词出现的频次(TF)一样,那么这三个词汇在这篇文章中的重要性一样吗?(哪一个词汇能反映这篇文章的特性)
显然不是这样。因为“中国”是很常见的词,相对而言,“蜜蜂”和“养殖”不那么常见。如果这三个词在一篇文章中出现的次数一样多,有理由认为,“蜜蜂”和“养殖”重要程度要大于“中国”,也就是说,在关键词排序上面,“蜜蜂”和“养殖”应该排在中国的前面。
还是以《中国蜜蜂养殖》为例,假定该文长度为1000个词,“中国”,“蜜蜂”,“养殖”各出现20次,这三个词的“词频”(TF)都为0.02(20/1000)。然后,Google搜索发现,中文网页总数为250亿张。包含“中国”的网页共有62.3亿张,包含“蜜蜂”的网页为0.484亿张,包含“养殖”的网页共有0.973亿张.则他们的TF,IDF(逆文档频率),TF-IDF如下:
4.优缺点
TF-IDF的优点是简单快速,而且容易理解。缺点是有时候用词频来衡量文章中的一个词的重要性不够全面,有时候重要的词出现的可能不够多,而且这种计算无法体现位置信息,无法体现词在上下文的重要性。如果要体现词的上下文结构,那么你可能需要使用其他算法来支持。
5.具体案列
对text=[“The quick brown fox jumped over the lazy dag.”,
“The dog.”
“The fox”
]进行词频统计。
5.1 导入包、模块
5.2 创建变换函数
5.3 词条化以及创建词汇表
5.4 特征以及每个特征(词)的idf
5.5 编码文档
5.6 总结编码文档
#1.导入包和模块
from sklearn.feature_extraction.text import TfidfVectorizer
text=["The quick brown fox jumped over the lazy dag.",
"The dog."
"The fox"
]
#2.创建变换函数
vectorizer=TfidfVectorizer()
# 3.词条化以及创建词汇表
vectorizer.fit(text)
#4.特征以及每个特征(词)的idf
print("特征:",vectorizer.vocabulary_)
# print("特征:",vectorizer.get_feature_names)
print("特征的IDF:",vectorizer.idf_)
# 5.编码文档
vector=vectorizer.transform([text[0]])
X=vectorizer.fit_transform(text)
print('TF-IDF矩阵:',X.toarray())
#6.总结编码文档
print('shape:',vector.shape)
print(vector.toarray())
#sklearn计算idf值得公式为idf=log((1+训练集文本总数)/(1+包含词t的文本数))+1
#+1平滑处理
运行结果: