TextRank的算法的理解

在此之前,我有写过一篇文章博文对PageRank算法的理解,这是一个网页排名的算法,其实TextRank算法和网页排名算法有着很相似的地方,并且文本排名算法也来源于网页排名算法。文本排名算法和其他算法有着一个很明显的区别就是其他的算法的关键词的提取都要基于现成的文本库,而文本排名算法可以脱离语料库的背景,仅仅对于单篇文章进行分析就可以提取该文档的关键词。在此之前我分析过网页排名算法的基本思想主要有

  1. 链接数量,一个网页如果被越多的网页所指向,说明这个网页越重要。
  2. 链接质量,一个网页如果被一个很牛逼的网页,权值很高的网页所指向,也可以标明这个网页的权值比较高。
    基于这个思想,我们可以得到网页排名的计算公式:
    S ( V i ) = ∑ j ∈ I n ( V i ) S ( V j ) ∣ O u t ( V j ) ∣ S({V_i}) = \sum\limits_{j \in In({V_i})} {\frac{{S({V_j})}}{{\left| {Out({V_j})} \right|}}} S(Vi)=jIn(Vi)Out(Vj)S(Vj)

在这个公式中,In(Vj)表示Vj入链的集合,Out(Vj)表示出链的集合,|Out(Vj)|表示出链的数量,由于每个网页需要将自身的分数平均地分给每一个出链,所以求和项就是Vj贡献给Vi的分数。整个算法我在之前的博文中也有介绍到,初始化每个网页的初始得分,然后通过转移矩阵多次迭代网页的得分,直到最后收敛。就可以得到每个网页的最终得分。但是为了避免一些不平滑的情况,比如某些网页的入链数和出链数都为0,那么这个网页基本上是不可能被访问到的,所以我们需要对公式进行平滑处理,避免这种情况出现,我们可以在公式中加入一个阻尼系数d,使得某些网页在孤立的情况下也会有得分:
S ( V i ) = ( 1 − d ) + d × ∑ j ∈ I n ( V i ) S ( V j ) ∣ O u t ( V j ) ∣ S({V_i}) = (1 - d) + d \times \sum\limits_{j \in In({V_i})} {\frac{{S({V_j})}}{{\left| {Out({V_j})} \right|}}} S(Vi)=(1d)+d×jIn(Vi)Out(Vj)S(Vj)

说到这里,网页排名和文本排名的区别就是网页排名是有向无权图,而TextRank文本排名是有向有权图,因为在文本排名的分数计算中,不仅要考虑链接句的重要性,还要考虑两个句子之间的相似性。所以TextRank的完整的公式为:
W S ( V j ) = ( 1 − d ) + d × ∑ V j ∈ I n ( V i ) w j i ∑ V k ∈ O u t ( V j ) w j k × W S ( V j ) WS({V_j}) = (1 - d) + d \times \sum\limits_{{V_j} \in In({V_i})} {\frac{{{w_{ji}}}}{{\sum\limits_{{V_k} \in Out({V_j})} {{w_{jk}}} }} \times WS({V_j})} WS(Vj)=(1d)+d×VjIn(Vi)VkOut(Vj)wjkwji×WS(Vj)

我们在计算每个句子给它链接句的贡献的时候,不是按照平均统一的方式来分配的,而是计算权重占总权重的比例来分配,这里说的权重是指两个句子的相似程度,这里的相似程度我们可以根据余弦相似度算法来计算。在对一篇文章进行摘要的时候,默认每个句子和其他所有的句子都是有链接关系的,也就是说,这是一个有向完全图。当TextRank应用到关键词抽取的时候,与应用在自动摘要的时候有两点不同:
1.词与词之间的关联没有权重
2.每个词不是与文章中的每个词都有链接
所以这么一来,TextRank在应用到关键词抽取的时候,与PageRank算法是一样的,那么这个时候的得分计算公式如下所示:
W S ( V i ) = ( 1 − d ) + d × ∑ j ∈ I n ( V i ) W S ( V j ) ∣ O u t ( V j ) ∣ WS({V_i}) = (1 - d) + d \times \sum\limits_{j \in In({V_i})} {\frac{{WS({V_j})}}{{\left| {Out({V_j})} \right|}}} WS(Vi)=(1d)+d×jIn(Vi)Out(Vj)WS(Vj)

根据公式可以得到,TextRank在应用到关键词抽取的时候,会将得分平均贡献给每一个链接的词,既然每个词不是与所有的词相链接,那么链接的关系要怎么界定呢,这里有一个“窗口”的概念,在“窗口”中的词,默认互相都有链接的关系。我们来举一个栗子,有这么一段话:

我们依然要相信爱情,毕竟真正完美的感情,就算只有那么1%的几率,也值得 一个人费尽一切去追求。
将这段话进行分词之后可以得到:

我们/ 依然/ 要/ 相信/ 爱情/ ,/ 毕竟/ 真正/ 完美/ 的/ 感情/ ,/ 就算/ 只有/ 那么/ 1%/ 的/ 几率/ ,/ 也/ 值得/ 一个/ 人/ 费尽/ 一切/ 去/ 追求/ 。
我们假设“窗口”的大小为5,去掉停用词,那么我们可以得到如下这些“窗口”:

  1. [我们,依然,要,相信,爱情]
  2. [依然,要,相信,爱情,毕竟]
  3. [要,相信,爱情,毕竟,真正]
  4. [相信,爱情,毕竟,真正,完美]
  5. [爱情,毕竟,真正,完美,感情]

    每一个窗口内的词都是互相连接的,有了这些连接的关系,我们就可以运用上述的TextRank公式对每个词的得分进行计算了,最后可以得到得分最高的n个词作为文档的关键词了。有了PageRank的基础再来理解TextRank算法就很轻松了,希望这篇博文能对您对文本排名算法的理解有所帮助。文中参考了《Python自然语言处理实战:核心技术与算法》一书中的部分内容,如有纰漏,也请各位不吝指教,谢谢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值