上文说了PageRank的实现方式,一鼓作气, 这次就把TextRank的原理和实现方式写一写
TextRank的产生来自于PageRank,中心思想是一样的,只不过在PageRank里,网页与网页的关系,在TextRank里变成了词与词的关系。
目的:
- 从一段给定的文本中自动抽取出若干有意义的词语或词组。
步骤:
- 利用局部词汇(共现窗口)之间的关系生成关键词列表,然后通过计算,对后续关键词进行排序,步骤如下:
-
切分文章:把给定的文本使用标点或者空格切分成若干个句子;
T e x t = [ S 1 , S 2 , . . . , S n ] Text = [S_1,S_2, ...,S_n] Text=[S1,S2,...,Sn]
-
保留关键词:对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,即,其中是保留后的候选关键词。
S i = [ W 1 , W 2 , . . . , W n ] S_i = [W_1,W_2,...,W_n] Si=[W1,W2,...,Wn]
-
选择共现窗口大小 n n n;
-
根据共现窗口,重新生成 T e x t Text Text内的所有句子的关键词列表
[ W 1 , W 2 , . . . , W n ] , [ W 2 , W 3 , . . . , W n + 1 ] [W_1,W_2,...,W_n], [W_2,W_3,...,W_{n+1}] [W1,W2,...,Wn],[W2,W3,...,Wn+1]
-
计算每个词之间的共现度,也就是置信度。
-
初始化词共现方阵 M M M与均值矩阵 U U U
U 0 = [ 1 n , 1 n , . . . 1 n ] U_0 = [\frac{1}{n},\frac{1}{n},...\frac{1}{n}] U0=[n1,n1,...n1]
U n = α M T U n − 1 + ( 1 − α ) U 0 U_n = \alpha M^T U_{n-1} + (1-\alpha)U_0 Un=αMTUn−1+(1−α)U0
其中:M为共现方阵,亦可以理解为转移概率矩阵
-
根据上面公式,迭代传播各节点的权重,直至收敛。
-
对节点权重进行倒序排序,从而得到最重要的N个单词,作为候选关键词。在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。例如,文本中有句子“中国人民站起来了”,如果“中国”和“人民”均属于候选关键词,则组合成“中国人民”加入关键词序列。
代码地址:Github代码链接