TF-IDF

来源:互联网 发布:Ubuntu 安装c 编译器 编辑:程序博客网 时间:2024/05/22 02:11

TF-IDF算法分析

TF-IDF是一种数值统计,用于反映一个词对于语料中某篇文章的重要性,在信息检索和文本挖掘领域,它经常用于因子加权

主要思想:如果某个词在一片文档中出现的频率高,即TF高;并且在语料库中其他文档中很少出现即IDF高,则认为这个词具有很好的类别区分能力。

TF-IDF在实际中主要是将两者相乘,也即TF*IDF,TF为词频(Term Frequency),表示词t在文档d中出现的频率;IDF为反文档频率(Inverse Document Frequency),表示语料库中含词t的文档数目的倒数。

TF公式:
TF=count(t)/count(di)

注:count(t)文档di中包含词t的个数,count(di)文档di的词的总数

IDF公式:
IDF=num(corpus)/num(t)+1

注:num(corpus)语料库corpus中文档的总数,num(t)+1:语料库中corpurs中包含t的文档的数目

应用到关键词抽取:

  1. 预处理,首先进行分词和词性的标注,将满足指定词性的词作为候选词
  2. 分别计算每个词的TF-IDF值
  3. 根据每个词的TF-IDF值降序排列,并输出指定个数的词汇作为可能的关键词

应用案例:自动提取关键词

假设现在有一篇文章,这篇文章包含了10000个词组,其中“贵州”、“大数据”、“分析”各出现了100次,“的”出现500次(假设没有去除停用词),则通过前面TF词频计算公式,可以计算得到三个单词的词频,即:

词频=某个词组在文章中出现的次数/该文章的总词组数
TF(贵州)=100/10000=0.01
TF(大数据)=100/10000=0.01
TF(分析)=100/10000=0.01
TF(的)=500/10000=0.05

现在语料库中共存在1000篇文章,其中包含“贵州”的共99篇,包含“大数据”的共19篇,包含“分析”的共59篇,包含“的”共899篇,则它们的IDF计算如下:
逆文档频率=log(语料库中文档总数/包含该词组的文章个数+1)
IDF(贵州)=log(1000/100)=1.000
IDF(大数据)=log(1000/20)=1.700
IDF(分析)=log(1000/60)=1.221
IDF(的)=log(1000/900)=0.046
由IDF的值可以发现,当某个词在语料库中各个文档出现的次数越多,它的IDF值越低。

TF-IDF=词频x逆文档频率
TF-IDF(贵州)=0.01*1.000=0.010
TF-IDF(大数据)=0.01*1.700=0.017
TF-IDF(分析)=0.01*1.221=0.012
TF-IDF(的)=0.01*0.046=0.00046
通过TF-IDF计算,“大数据”在某篇文章中出现频率很高,这就能反应这篇文章的主题就是关于“大数据”方向。如果只选一个词,“大数据”就是这篇文章的关键词。所以,可以通过TF-IDF方法统计文章的关键词。

TF-IDF短发的优缺点:
优点:简单快捷,结果比较符合实际情况。
缺点:单纯以词频衡量一个词的重要性,不够全面,有时重要的词可能出现次数不多,而且无法体现词的位置。

TF-IDF

1、CountVectorize
会将文本中的词语转化为词频矩阵,例如矩阵中包含一个元素a[i][j],它表示j词在i类文本下的词频。它通过fit_transform函数计算各个词语出现的次数,通过get_feature_names()可获取词袋中所有文本的关键字,通过toarray()可看到词频矩阵的结果。

2、TfidfTransformer
用于统计vectorizer中每个词语的TF-IDF值

3、如果需要同时进行词频统计并计算TF-IDF值,则使用核心代码:

vectorizerCountVectorizer()transformer=TfidfTransformer()tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))

参考链接:EastMount