从pagerank到textrank关键词提取

0 前言

        最近在学习textrank关键词提取算法,因此研究了下它的由来。提到textrank那肯定忘不了大名鼎鼎的PageRank,那么首先简单的介绍下PageRank。

1 PageRank

        PageRank设计之初是用于Google的网页排名的,以该公司创办人拉里·佩奇(Larry Page)之姓来命名。Google用它来体现网页的相关性和重要性,在搜索引擎优化操作中是经常被用来评估网页优化的成效因素之一。PageRank通过互联网中的超链接关系来确定一个网页的排名,(前面是废话,忽略)其公式是通过一种投票的思想来设计的:如果我们要计算网页A的PageRank值(以下简称PR值),那么我们需要知道有哪些网页链接到网页A,也就是要首先得到网页A的入链,然后通过入链给网页A的投票来计算网页A的PR值。这样设计可以保证达到这样一个效果:当某些高质量的网页指向网页A的时候,那么网页A的PR值会因为这些高质量的投票而变大,而网页A被较少网页指向或被一些PR值较低的网页指向的时候,A的PR值也不会很大,这样可以合理地反映一个网页的质量水平。那么根据以上思想,佩奇设计了下面的公式:

该公式中,Vi表示某个网页,Vj表示链接到Vi的网页(即Vi的入链),S(Vi)表示网页Vi的PR值,In(Vi)表示网页Vi的所有入链的集合,Out(Vj)表示网页,d表示阻尼系数,是用来克服这个公式中“d *”后面的部分的固有缺陷用的:如果仅仅有求和的部分,那么该公式将无法处理没有入链的网页的PR值,因为这时,根据该公式这些网页的PR值为0,但实际情况却不是这样,所有加入了一个阻尼系数来确保每个网页都有一个大于0的PR值,根据实验的结果,在0.85的阻尼系数下,大约100多次迭代PR值就能收敛到一个稳定的值,而当阻尼系数接近1时,需要的迭代次数会陡然增加很多,且排序不稳定。公式中S(Vj)前面的分数指的是Vj所有出链指向的网页应该平分Vj的PR值,这样才算是把自己的票分给了自己链接到的网页。

基于TextRank的关键词提取

textRank 一般模型可以表示为一个有向有权图 G =(V, E), 由点集合 V和边集合 E 组成, E V ×V的子集。图中任两点 Vi , Vj 之间边的权重为 wji ,对于一个给定的点 Vi, In(Vi) , Out(Vi)为点 V指向的点集合。点 Vi 的得分定义如下:

 

关键词抽取的任务就是从一段给定的文本中自动抽取出若干有意义的词语或词组。TextRank算法是利用局部词汇之间关系(共现窗口)对后续关键词进行排序,直接从文本本身抽取。其主要步骤如下:

  (1)把给定的文本T按照完整句子进行分割,即

  (2)对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词等,即,其中 ti,j 是保留后的候选关键词。

  (3)构建候选关键词图G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后采用共现关系(co-occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词。

  (4)根据上面公式,迭代传播各节点的权重,直至收敛。

  (5)对节点权重进行倒序排序,从而得到最重要的T个单词,作为候选关键词。 

  (6)由(5)得到最重要的T个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。例如,文本中有句子“Matlabcode for plotting ambiguity function”,如果“Matlab”和“code”均属于候选关键词,则组合成“Matlab code”加入关键词序列。


步骤3中采用共现关系构造两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现。可以理解为在一个窗口中任两个单词对应的节点之间存在一个无向无权的边。例如窗口[a,b,c]中a-b,a-c,b-c都是两节点的边。(ps :这个具体的边在textrank计算中,我不知道起什么作用)。分析这个公式,计算的关键是wji 的就算,仔细阅读textrank的源码你会发现权重的计算是基于无向无权的边,然后就降级为pagerank的计算公式。(ps:其实自己也弄的似懂非懂,崩溃的内心啊)


3 感想

textrank常用于关键词提取,关键短语提取,摘要提取。

textrank算法改进的地方有很多,基于信息增益或者词语位置加权或者基于HMM加权等等,相关的改进论文也有很多。

4 参考文章:

textrank算法(python版本): https://github.com/letiantian/TextRank4ZH

 PageRank算法详解:                https://www.cnblogs.com/rubinorth/p/5799848.html

猜你喜欢

转载自blog.csdn.net/tian_panda/article/details/80845278