文章目录
TextRank
PageRank
textrank借鉴大名鼎鼎的pagerank,pagerank是Google在搜索引擎中计算网页重要性的算法,这是一个基于有向图的迭代算法。在图中,每个节点表示一个网页,如果网页 V j V_j Vj有一个链接连到网页 V i V_i Vi,则在构建图时,也有一条边从 V j V_j Vj连到 V i V_i Vi。网页重要性的迭代公式如下:
S ( V i ) = ( 1 − d ) + d × Σ j ∈ I n ( V i ) 1 ∣ O u t ( V j ) ∣ × S ( V j ) S(V_i)=(1-d)+d\times \Sigma_{j\in In(V_i)}\frac{1}{|Out(V_j)|}\times S(V_j) S(Vi)=(1−d)+d×Σj∈In(Vi)∣Out(Vj)∣1×S(Vj)
其中, S ( V ) S(V) S(V)表示网页 V V V的重要性, d d d是阻尼系数,一般取0.85, I n ( V ) In(V) In(V)和 O u t ( V ) Out(V) Out(V)分别表示节点 V V V的入度和出度。不难看出来,上式的大体意思就是说,一个网页的重要性由接入到这个网页的其它网页的重要性决定,同时,接入的其它网页的重要性也对自己的出度取平均,在一定程度上削弱了某些具有大量外链的网页的影响。通过网页间的相互连接构建成有向图之后,对每个网页初始化一个重要性,一般可以初始化为1,然后不断的迭代。在每轮迭代中,上式左边的输出是迭代后网页 V V V的重要性,等号右边用到的临近节点的重要性全是该轮迭代前的。
考虑到要迭代很多轮次,且上式右边每次迭代只有 S ( V j ) S(V_j) S(Vj)是不一样的,所以我们可以用矩阵模拟上面的运算,考虑下面这个简单的有向图
邻接矩阵表述如下:
A | B | C | |
---|---|---|---|
A | 0 | 0 | 0 |
B | 1 | 0 | 0 |
C | 1 | 0 | 0 |
考虑到迭代公式等号右边的接入网页重要性要对出度取平均,只需对邻接矩阵执行行归一化,当然对当前例子邻接矩阵行归一化后没有任何变化,记归一化邻接矩阵用 M M M表示,初始的各网页重要性为列向量 P 0 = [ 1 , 1 , 1 ] T P_0=[1,1,1]^{T} P0=[1,1,1]T,经过第一轮迭代后,网页重要性输出为 P 1 P_1 P1
P 1 = ( 1 − d ) + d ∗ M T ∗ P 0 P_1=(1-d)+d*M^T*P_0 P1=(1−d)+d∗MT∗P0
同理,迭代公式也表示为:
P n = ( 1 − d ) + d ∗ M T ∗ P n − 1 P_n=(1-d)+d*M^T*P_{n-1} Pn