关键词提取(tf-idf与textRank)

关键词提取(tf-idf与textRank)

一.tf-idf

tf-idf提取关键词是一种简单有效的提取关键词的方法.其思想主要在于预先统计在语料中出现的所有词的词频,计算出idf值,然后再针对要提取关键词的文章或句子的每个词计算出tf值,乘起来便是tf-idf值.值越大表示作为关键词的优先级越高.

假设现在语料一共有M篇文章,其中词A在其中m篇中出现过了,那么A的idf值为log(M/m),注意这个idf值对于每篇文章中的A都是一样的.现在我们想求文章T中词A的tf-idf值,先求其中A的tf值:T中一共有t个词,其中A出现了a次,那么A的tf值为at.最终便可得到在文章T中,词A的tfidfTA=atlog(Mm)

我们在实际应用中,一般会先计算出语料中所有词的idf值并存为一个字典(hash_map)的形式.然后再进行关键词提取,要用某个词的idf值的时候直接查询字典就可以了.

二.textRank

这种算法主要基于pageRank算法.其设计之初使用与Google的网页排名的,PageRank通过互联网中的超链接关系来确定一个网页的排名,其公式是通过一种有向图和投票的思想来设计的::

S(Vi)=(1d)+djIn(Vi)1|Out(Vj)|S(Vj)
其中S(Vi)代表网页Vi的rank值,In(Vi)代表接入网页Vi的网页的集合,而Out(Vj)代表网页Vj所指向的网页的集合,加上||符号代表其元素数量.直观来理解就是说网页Vi的rank值完全取决于指向它的网页.这些网页的数量越多,Vi的rank值越大,这些网页所指向的别的网页的数量越多,就代表Vi对于它们而言重要程度越低,则Vi的rank值就越小.至于d就是一个阻尼系数,它是为了方式S(Vi)值为0所设的,一般取为d=0.85.

对于文章中的关键词提取也是类似的(与tf-idf不同,不再依赖语料环境),我们将每个词语看成是网页,然后预先设置一个大小为m的窗口,从头遍历这篇文章.在同一个窗口中的任意两个词之间都连一条边.通常情况下,这里我们使用无向无权边(textrank的原作者通过实验表明无向图的效果较好),无向的意思就是In(Vi),Out(Vi)是完全一致的.画出图过后,我们对每个词Vi赋予一个初值S0(Vi)然后放进公式中机型迭代计算直至收敛即可.最终我们可以选择rank值的topN作为我们的关键词.

一般在实际应用中,我们需要先对文章进行分词(汉语),然后过滤掉停用词,再可以过滤掉掉我们不关心的词性(如只保留动词和名词),然后再用textrank进行关键词提取.以下为窗口大小为2的文章所画出的一个”图”.
关键词提取(tf-idf与textRank)

三.小结与思考

以上就是分别用textRank和tf-idf进行关键词提取的基本思想和算法.我们可以看到这两种算法还是有着非常明显的差异::

1.依赖语料
tf-idf的idf值依赖于语料环境,这给他带来了统计上的优势,即它能够预先知道一个词的重要程度.这是它优于textrank的地方.
而textrank只依赖文章本身,它认为一开始每个词的重要程度是一样的.

2.词语的互相关联性
tf-idf是纯粹用词频的思想(无论是tf还是idf都是)来计算一个词的得分,最终来提取关键词,完全没有用到词之间的关联性.
而textrank用到了词之间的关联性(将相邻的词链接起来),这是其优于tf-idf的地方.

综合来看,tf-idf和textrank各有优缺点,在实际使用中二者效果差异也并不明显,可以同时使用互相做个参考.

参考文献:
1. textrank: bring order into texts