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值的时候直接查询字典就可以了.
这种算法主要基于pageRank算法.其设计之初使用与Google的网页排名的,PageRank通过互联网中的超链接关系来确定一个网页的排名,其公式是通过一种有向图和投票的思想来设计的::
对于文章中的关键词提取也是类似的(与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的文章所画出的一个”图”.
以上就是分别用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