天天看点

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

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

一.tf-idf

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

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

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

二.textRank

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

S(Vi)=(1−d)+d∗∑j∈In(Vi)1|Out(Vj)|S(Vj) S ( V i ) = ( 1 − d ) + d ∗ ∑ j ∈ I n ( V i ) 1 | O u t ( V j ) | S ( V j )

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

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

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

关键词提取(tf-idf与textRank)关键词提取(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

继续阅读