使用TextRank算法为文本生成关键字和摘要

使用TextRank算法为文本生成关键字和摘要

TextRank算法基于PageRank,用于为文本生成关键字和摘要。其论文是:

Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics, 2004.

先从PageRank讲起

PageRank最开始用来计算网页的重要性。整个www可以看作一张有向图图,节点是网页。如果网页A存在到网页B的链接,那么有一条从网页A指向网页B的有向边。

构造完图后,使用下面的公式:

S(Vi)=(1d)+djIn(Vi)1Out(Vj)S(Vj)

S(Vi) 是网页i的重要性(PR值)。d是阻尼系数,一般设置为0.85。 In(Vi) 是存在指向网页i的链接的网页集合。 Out(Vj) 是网页j中的链接存在的链接指向的网页集合。 midOut(Vj) 是集合中元素的个数。

PageRank需要使用上面的公式多次迭代才能得到结果。初始时,可以设置每个网页的重要性为1。上面公式等号左边计算的结果是迭代后网页i的PR值,等号右边用到的PR值全是迭代前的。

举个例子:

3使用TextRank提取关键字

  3.1 TextRank for Keyword Extraction
  两个词汇单元之间的任何关系都能够被定义为是潜在的有用连接(edge),这个连接可以添加到两个顶点之间。我们使用同现的关系来控制词之间出现的距离:如果在一个最大的窗口N个单词里两个相关的词汇同现,那么这两个顶点是连接的,N可以被设置为2-10的任何值。同现连接表示在句法联系之间的关系,同样的,发现语义的连接对处理词之间的模棱两可有帮助,他们代表对一个给定文本的结合度。
  将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。
  textrank关键词抽取算法完全是无监督的,整个过程如下。首先,将文本进行标记,和注释部分演说标签——一个必须的预处理步骤使得句法滤波器能够应用。为了避免图的大小长的太厉害,我们通过增加所有可能的超过一个词汇单元(ngrams)组成的系列连接,我们仅仅考虑单一的词作为添加到图的候选者,对于多词的关键字最后需要重构。
  接下来,所有的通过句法滤波器的词汇单元添加到图里,同样增加边在这些同时出现在一个窗口大小里的单词词汇单元之间。在这个图构建完毕之后(无向无权图),每个顶点的得分设置为1,排序算法在第二部分描述过了,公式如下:

S(Vi)=(1d)+djIn(Vi)1Out(Vj)S(Vj)

排序算法在这个图里迭代几次直到收敛-通常需要20--30次迭代,阈值设为0.0001。
   一但获得图里每一个顶点的最终得分,将对顶点进行降序排序,排名top T的顶点保留下来进一步处理。T可以设置为任意固定值,通常设置为5到20个关键词用来限制关键词的数量,我们有更灵活的办法,决定关键词的数量基于文本的大小。
   在进一步处理中,所有选出来的词汇都作为潜在的关键词,之后系列将组成多词的关键词。例如:Matlab code for plotting ambi-guity functions。如何通过textrank排序算法把MATLAB和code都选出来了,那么唯一的关键词将是MATLAB code。

每个单词作为pagerank中的一个节点。设定窗口大小为kk,假设一个句子依次由下面的单词组成:

w1,w2,w3,w4,w5,…,wnw1,w2,w3,w4,w5,…,wn
[w1,w2,…,wkw1,w2,…,wk]、[w2,w3,…,wk+1w2,w3,…,wk+1]、[w3,w4,…,wk+2w3,w4,…,wk+2]等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。

基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。

使用TextRank提取关键短语

参照“使用TextRank提取关键词”提取出若干关键词。若原文本中存在若干个关键词相邻的情况,那么这些关键词可以构成一个关键短语。

例如,在一篇介绍“支持向量机”的文章中,可以找到三个关键词支持、向量、机,通过关键短语提取,可以得到支持向量机。
使用TextRank提取摘要

将每个句子看成图中的一个节点,若两个句子之间有相似性,认为对应的两个节点之间有一个无向有权边,权值是相似度。

通过pagerank算法计算得到的重要性最高的若干句子可以当作摘要。

论文中使用下面的公式计算两个句子Si和Sj的相似度:

Similarity(Si,Sj)=wkwkSiwkSjlog(Si)+log(Sj)

S(Vi)=(1d)+djIn(Vi)1Out(Vj)S(Vj)

这个方法不好,改为余弦相似性。

分子是在两个句子中都出现的单词的数量。|Si|是句子i的单词数。

由于是有权图,这里相似度作为两条边的权值,PageRank公式略做修改:

WS(Vi)=(1d)+dVjIn(Vi)wjiVkOut(V)jwjkWS(Vj)

你可能感兴趣的:(新闻热点)