TF-IDF算法:提取关键词
想要提取一篇文章的<b>关键词</b>,最直接的思维方式就是出现的越频繁的词就意味着越重要,但停用词需要除外。一篇文章中出现最多的就是停用词,只有避开这些无用的词,才能有效进行关键词打分。
<b>停用词</b>:出现次数最多的词是----"的"、"是"、"在"----这一类最常用的词。它们叫做"停用词"(stop words),表示对找到结果毫无帮助、必须过滤掉的词。
<b>TF-IDF</b>(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。
TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
- TF("词频",Term Frequency):词条在文档中出现的频率。
TF词频计算公式.png
tf参数:
ni,j:是该词文件dj中出现次数,分母是在文件dj中所有字词的出现次数之和
- IDF(逆文档频率)公式:
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。
idf逆文档频率计算公式.png
idf参数:
|D|: 语料库(corpus,用来模拟语言的使用环境)中的文件总数,
|{j : ti ∈ dj}| :包含词语ti的文件数目(即ni,≠0的文件数目),如果该词语不在语料库中,就会导致被除数为零,因此一般情况下使用:1+|{j : ti ∈ dj}|
- TF-IDF分数公式:
TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。排在最前面的几个词就是这篇文章的关键词。
tf-idf计算公式.pngTF-IDF = 词频(TF) x 逆文档频率(IDF)
- 示例
现有一篇科技评论文章,假定该文长度为1000个词,"芯片"、"汽车"、"无人驾驶"各出现20次,则这三个词的"词频"(TF)都为0.02。然后,搜索Google发现,包含"的"字的网页共有250亿张,假定这就是中文网页总数。包含"芯片"的网页共有62.3亿张,包含"汽车"的网页为0.484亿张,包含"无人驾驶"的网页为0.973亿张。则它们的逆文档频率(IDF)和TF-IDF如下:
词 | 包含该词的文档数 | IDF | TF-IDF |
---|---|---|---|
芯片 | 62.3 | 0.603 | 0.0121 |
汽车 | 0.484 | 2.713 | 0.054 |
无人驾驶 | 0.973 | 2.410 | 0.0482 |
从上表可见,"汽车"的TF-IDF值最高,"无人驾驶"其次,"芯片"最低。(如果还计算"的"字的TF-IDF,那将是一个极其接近0的值。)所以,如果只选择一个词,"汽车"就是这篇文章的关键词。
除了自动提取关键词,TF-IDF算法还可以用于许多别的地方。比如,信息检索时,对于每个文档,都可以分别计算一组搜索词("芯片"、"汽车"、"无人驾驶")的TF-IDF,将它们相加,就可以得到整个文档的TF-IDF。这个值最高的文档就是与搜索词最相关的文档。
TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)