TextRank算法及生产文本摘要方法介绍

TextRa*k 算法是一种用于文本的基于图的排序算法,其基本思想来源于谷歌的 *a*eRa*k算法,通过把文本分割成若干组成单元(句子),构建节点连接图,用句子之间的相似度作为边的权重,通过循环迭代计算句子的TextRa*k值,最后抽取排名高的句子组合成文本摘要。

自动文本摘要是自然语言处理(NL*)领域中最具挑战性和最有趣的问题之一。它是一个从多种文本资源(如书籍、新闻文章、博客帖子、研究类论文、电子邮件和微博)生成简洁而有意义的文本摘要的过程。由于大量文本数据的可获得性,目前对自动文本摘要系统的需求激增。本文主要研究基于TextRa*k的文本摘要算法。

一、文本摘要方法

文本摘要可以大致分为两类——抽取型摘要和抽象型摘要:

    抽取型摘要:这种方法依赖于从文本中提取几个部分,例如短语、句子,把它们堆叠起来创建摘要。因此,这种抽取型的方法最重要的是识别出适合总结文本的句子。

    抽象型摘要:这种方法应用先进的NL*技术生成一篇全新的总结。可能总结中的文本甚至没有在原文中出现。

本文,我们将关注于抽取式摘要方法。

二、TextRa*k算法的基本原理

TextRa*k算法是由网页重要性排序算法*a*eRa*k算法迁移而来:*a*eRa*k算法根据万维网上页面之间的链接关系计算每个页面的重要性;TextRa*k算法将词视为“万维网上的节点”,根据词之间的共现关系计算每个词的重要性,并将*a*eRa*k中的有向边变为无向边。所以,在介绍TextRa*k算法之前,先介绍一下*a*eRa*k算法。

2.1 *a*eRa*k算法的原理

*a*eRa*k对于每个网页页面都给出一个正实数,表示网页的重要程度,*a*eRa*k值越高,表示网页越重要,在互联网搜索的排序中越可能被排在前面。假设整个互联网是一个有向图,节点是网页,每条边是转移概率。网页浏览者在每个页面上依照连接出去的超链接,以等概率跳转到下一个网页,并且在网页上持续不断地进行这样的随机跳转,这个过程形成了一阶马尔科夫链,比如下图,每个笑脸是一个网页,既有其他网页跳转到该网页,该网页也会跳转到其他网页。在不断地跳转之后,这个马尔科夫链会形成一个平稳分布,而*a*eRa*k就是这个平稳分布,每个网页的*a*eRa*k值就是平稳概率。

<*m* src=”https://*m*2018.c*blo*s.com/blo*/1630478/201905/1630478-20190518052934981-73030027.p**” alt=”” w*dth=”454″ he**ht=”326″ style=”d*splay: block; mar***-left: auto; mar***-r**ht: auto;” />

*a*eRa*k的核心公式是*a*eRa*k值的计算公式。这个公式来自于《统计学习方法》,和很多博客上的公式有点轻微的差别,那就是等号右边的平滑项不是(1-d),而是(1-d)/*。

<*m* src=”https://*m*2018.c*blo*s.com/blo*/1630478/201905/1630478-20190518060640774-1825595497.p**” alt=”” w*dth=”452″ he**ht=”109″ style=”d*splay: block; mar***-left: auto; mar***-r**ht: auto;” />

加平滑项是因为有些网页没有跳出去的链接,那么转移到其他网页的概率将会是0,这样就无法保证存在马尔科夫链的平稳分布。于是,我们假设网页以等概率(1/*)跳转到任何网页,再按照阻尼系数d,对这个等概率(1/*)与存在链接的网页的转移概率进行线性组合,那么马尔科夫链一定存在平稳分布,一定可以得到网页的*a*eRa*k值。

所以*a*eRa*k的定义意味着网页浏览者,按照以下方式在网上随机游走:在任意一个网页上,浏览者以概率d按照存在的超链接随机跳转,这时以等概率从连接出去的超链接跳转到下一个页面;或以概率(1-d)进行完全随机跳转,这时以等概率1/*跳转到任意网页。第二个机制保证从没有连接出去的超链接的网页也可以跳转。&*bsp;

2.2 TextRa*k算法

在文本自动摘要的案例中,TextRa*k和*a*eRa*k的相似之处在于:

    用句子代替网页

    任意两个句子的相似性等价于网页转换概率

    相似性得分存储在一个方形矩阵中,类似于*a*eRa*k的矩阵M

不过公式有些小的差别,那就是用句子的相似度类比于网页转移概率,用归一化的句子相似度代替了*a*eRa*k中相等的转移概率,这意味着在TextRa*k中,所有节点的转移概率不会完全相等。

<*m* src=”https://*m*2018.c*blo*s.com/blo*/1630478/201905/1630478-20190518063625545-947712994.p**” alt=”” w*dth=”329″ he**ht=”76″ style=”d*splay: block; mar***-left: auto; mar***-r**ht: auto;” />

然后迭代过程就和*a*eRa*k一致了。

TextRa*k算法是一种抽取式的无监督的文本摘要方法。让我们看一下我们将遵循的TextRa*k算法的流程:

<*m* src=”http://*m*.blo*.*tpub.*et/blo*/2018/12/27/1bafb98422097853.jpe*?x-oss-process=style/bb” style=”d*splay: block; mar***-left: auto; mar***-r**ht: auto;” />

1.&*bsp;第一步是把所有文章整合成文本数据

2.&*bsp;接下来把文本分割成单个句子

3.&*bsp;然后,我们将为每个句子找到向量表示(词向量)。

4.&*bsp;计算句子向量间的相似性并存放在矩阵中

5.&*bsp;然后将相似矩阵转换为以句子为节点、相似性得分为边的图结构,用于句子TextRa*k计算。

6.&*bsp;最后,一定数量的排名最高的句子构成最后的摘要。

三、基于TextRa*k的中文新闻摘要实例

3.1 整合文档,划分句子

首先把文档读入,放在列表中,可以看到,有些句子已经被划分出来了。

不过通过观察,我们可以发现存在两个问题:

一是以[。?!;]作为句子的分隔符,那么列表中的每个字符串元素中可能有多个句子;

二是每个字符串元素可能以[:,]结尾,也就是说可能是一个不完整的句子。

考虑到这只是一个小案例,所以就没花太多时间,仅仅处理一下第一个问题,把句子按照[。?!;]进行划分,如果字符串元素是不完整的句子,那也作为一句。

&*bsp;

3.2 文本预处理

文本预处理包括去除停用词和非汉字字符,并进行分词。处理的过程要保证处理之后的句子的数量和处理之前的一样,因为后面我们计算了每个句子的textra*k值之后,需要根据textra*k值的大小,取出相应的句子作为摘要。

比如 ’02-2717:56′ 这个句子整个被过滤了,那就令这个句子为[],下面也会给它一个句子的向量表示,只是元素都为0。

&*bsp;

3.3 加载word2vec词向量

从这里下载了金融新闻word2vec词向量:https://**thub.com/Embedd***/Ch**ese-Word-Vectors。

词向量是300维的,字和词语都有。我们把词向量加载进来,做成一个字典,共有467140个词语或字。

&*bsp;

3.4 得到词语的embedd***,用WordAVG作为句子的向量表示

WordAVG也就是先得到句子中的所有词语的词向量,然后求词向量的平均,作为该句子的向量表示。WordAVG可以用来计算句子的相似度。

3.5 计算句子之间的余弦相似度,构成相似度矩阵

&*bsp;

3.6 迭代得到句子的textra*k值,排序并取出摘要

以句子为节点、相似性得分为转移概率,构建图结构,然后迭代得到句子的TextRa*k分数。

对句子按照TextRa*k值进行降序排序,取出排名最靠前的10个句子作为摘要。

&*bsp;

这样就完成了一个文本自动摘要的小实践了。

&*bsp;

参考:

李航:《统计学习方法》(第二版)

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注