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

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

一.tf-idf

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

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

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

二.textRank

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

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

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

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

三.小结与思考

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

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

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

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

扫描二维码关注公众号,回复: 1048958 查看本文章

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

猜你喜欢

转载自blog.csdn.net/gzt940726/article/details/80256011