Prateek Joshi作者丁楠雅校对王威力翻译

基于TextRank算法的文本摘要(附Python代码)

本文介绍TextRank算法及其在多篇单领域文本数据中抽取句子组成摘要中的应用。

TextRank 算法是一种用于文本的基于图的排序算法,通过把文本分割成若干组成单元(句子),构建节点连接图,用句子之间的相似度作为边的权重,通过循环迭代计算句子的TextRank值,最后抽取排名高的句子组合成文本摘要。本文介绍了抽取型文本摘要算法TextRank,并使用Python实现TextRank算法在多篇单领域文本数据中抽取句子组成摘要的应用。

介绍

文本摘要是自然语言处理(NLP)的应用之一,一定会对我们的生活产生巨大影响。随着数字媒体的发展和出版业的不断增长,谁还会有时间完整地浏览整篇文章、文档、书籍来决定它们是否有用呢?值得高兴的是,这项技术已经在这里了。

你有没有用过inshorts这个手机app?它是一个创新的新闻app,可以将新闻文章转化成一篇60字的摘要,这正是我们将在本文中学习的内容——自动文本摘要

自动文本摘要是自然语言处理(NLP)领域中最具挑战性和最有趣的问题之一。它是一个从多种文本资源(如书籍、新闻文章、博客帖子、研究类论文、电子邮件和微博)生成简洁而有意义的文本摘要的过程。

由于大量文本数据的可获得性,目前对自动文本摘要系统的需求激增。 

通过本文,我们将探索文本摘要领域,将了解TextRank算法原理,并将在Python中实现该算法。上车,这将是一段有趣的旅程!

目录

一、文本摘要方法

二、TextRank算法介绍

三、问题背景介绍

四、TextRank算法实现

五、下一步是什么?

一、文本摘要方法

早在20世纪50年代,自动文本摘要已经吸引了人们的关注。在20世纪50年代后期,Hans Peter Luhn发表了一篇名为《The automatic creation of literature abstract》的研究论文,它利用词频和词组频率等特征从文本中提取重要句子,用于总结内容。

参考链接:

http://courses.ischool.berkeley.edu/i256/f06/papers/luhn58.pdf

另一个重要研究是由Harold P Edmundson在20世纪60年代后期完成,他使用线索词的出现(文本中出现的文章题目中的词语)和句子的位置等方法来提取重要句子用于文本摘要。此后,许多重要和令人兴奋的研究已经发表,以解决自动文本摘要的挑战。

参考链接:

http://courses.ischool.berkeley.edu/i256/f06/papers/luhn58.pdf

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

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

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

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

二、TextRank算法介绍

在开始使用TextRank算法之前,我们还应该熟悉另一种算法——PageRank算法。事实上它启发了TextRank!PageRank主要用于对在线搜索结果中的网页进行排序。让我们通过一个例子快速理解这个算法的基础。 

PageRank算法简介:

图 1 PageRank算法

假设我们有4个网页——w1,w2,w3,w4。这些页面包含指向彼此的链接。有些页面可能没有链接,这些页面被称为悬空页面。

  • w1有指向w2、w4的链接

  • w2有指向w3和w1的链接

  • w4仅指向w1

  • w3没有指向的链接,因此为悬空页面

为了对这些页面进行排名,我们必须计算一个称为PageRank的分数。这个分数是用户访问该页面的概率。

为了获得用户从一个页面跳转到另一个页面的概率,我们将创建一个正方形矩阵M,它有n行和n列,其中n是网页的数量。

矩阵中得每个元素表示从一个页面链接进另一个页面的可能性。比如,如下高亮的方格包含的是从w1跳转到w2的概率。

如下是概率初始化的步骤:

1. 从页面i连接到页面j的概率,也就是M[i][j],初始化为1/页面i的出链接总数wi 

2. 如果页面i没有到页面j的链接,那么M[i][j]初始化为0

3. 如果一个页面是悬空页面,那么假设它链接到其他页面的概率为等可能的,因此M[i][j]初始化为1/页面总数

因此在本例中,矩阵M初始化后如下: 

最后,这个矩阵中的值将以迭代的方式更新,以获得网页排名。 

三、TextRank算法

现在我们已经掌握了PageRank,让我们理解TextRank算法。我列举了以下两种算法的相似之处:

  • 用句子代替网页

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

  • 相似性得分存储在一个方形矩阵中,类似于PageRank的矩阵M 

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

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

2. 接下来把文本分割成单个句子

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

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

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

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

让我们启动Jupyter Notebook,开始coding!

备注:如果你想了解更多图论知识,我推荐你参考这篇文章

https://www.analyticsvidhya.com/blog/2018/09/introduction-graph-theory-applications-python/

三、问题背景介绍

作为一个网球爱好者,我一直试图通过对尽可能多的网球新闻的阅读浏览来使自己随时了解这项运动的最新情况。然而,事实证明这已经是一项相当困难的工作!花费太多的资源和时间是一种浪费。

因此,我决定设计一个系统,通过扫描多篇文章为我提供一个要点整合的摘要。如何着手做这件事?这就是我将在本教程中向大家展示的内容。我们将在一个爬取得到的文章集合的文本数据集上应用TextRank算法,以创建一个漂亮而简洁的文章摘要。

请注意:这是一个单领域多文本的摘要任务,也就是说,我们以多篇文章输入,生成的是一个单要点摘要。本文不讨论多域文本摘要,但您可以自己尝试一下。

数据集下载链接:

https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2018/10/tennis_articles_v4.csv

四、TextRank算法实现

所以,不用再费心了,打开你的Jupyter Notebook,让我们实现我们迄今为止所学到的东西吧!

1. 导入所需的库

首先导入解决本问题需要的库

2. 读入数据

现在读取数据,在上文我已经提供了数据集的下载链接。

3. 检查数据

让我们快速了解以下数据。

 数据集有三列,分别是‘article_id’,‘article_text’,和‘source’。我们对‘article_text’列的内容最感兴趣,因为它包含了文章的文本内容。让我们打印一些这个列里的变量的值,具体看看它们是什么样。

输出:

现在我们有两种选择,一个是总结单个文章,一个是对所有文章进行内容摘要。为了实现我们的目的,我们继续后者。

4. 把文本分割成句子

下一步就是把文章的文本内容分割成单个的句子。我们将使用nltk库中的sent_tokenize( )函数来实现。

打印出句子列表中的几个元素。 

输出:

5. 下载GloVe词向量

GloVe词向量是单词的向量表示。这些词向量将用于生成表示句子的特征向量。我们也可以使用Bag-of-Words或TF-IDF方法来为句子生成特征,但这些方法忽略了单词的顺序,并且通常这些特征的数量非常大。

我们将使用预训练好的Wikipedia 2014 + Gigaword 5 (补充链接)GloVe向量,文件大小是822 MB。

GloVe词向量下载链接:

https://nlp.stanford.edu/data/glove.6B.zip 

 让我们提取词向量: 

现在我们在字典中存储了400000个不同术语的词向量。 

6. 文本预处理

尽可能减少文本数据的噪声是一个好习惯,所以我们做一些基本的文本清洗(包括移除标点符号、数字、特殊字符,统一成小写字母)。

 去掉句子中出现的停用词(一种语言的常用词——is,am,of,in等)。如果尚未下载nltk-stop,则执行以下代码行:

现在我们可以导入停用词。 

接下来定义移除我们的数据集中停用词的函数。 

我们将在GloVe词向量的帮助下用clean_sentences(程序中用来保存句子的列表变量)来为我们的数据集生成特征向量。

7. 句子的特征向量

现在,来为我们的句子生成特征向量。我们首先获取每个句子的所有组成词的向量(从GloVe词向量文件中获取,每个向量大小为100个元素),然后取这些向量的平均值,得出这个句子的合并向量为这个句子的特征向量。

8. 相似矩阵准备

下一步是找出句子之间的相似性,我们将使用余弦相似性来解决这个问题。让我们为这个任务创建一个空的相似度矩阵,并用句子的余弦相似度填充它。

 首先定义一个n乘n的零矩阵,然后用句子间的余弦相似度填充矩阵,这里n是句子的总数。

 将用余弦相似度计算两个句子之间的相似度。

用余弦相似度初始化这个相似度矩阵。

9. 应用PageRank算法

在进行下一步之前,我们先将相似性矩阵sim_mat转换为图结构。这个图的节点为句子,边用句子之间的相似性分数表示。在这个图上,我们将应用PageRank算法来得到句子排名。

10. 摘要提取

最后,根据排名提取前N个句子,就可以用于生成摘要了。

现在我们实现了一个棒极了、整齐的、简洁、有用的文章总结!

五、下一步是什么?

自动文本摘要是一个热门的研究课题,在本文中我们仅仅讨论了冰山一角。展望未来,我们将探索抽象文本摘要技术,其中深度学习扮演着重要的角色。此外,我们还可以研究下面的文本摘要任务:

 1. 问题导向:

  • 多领域文本摘要

  • 单个文档的摘要

  • 跨语言文本摘要

    (文本来源是一种语言,文本总结用另一种语言)

2. 算法导向:

  • 应用RNN和LSTM的文本摘要

  • 应用加强学习的文本摘要

  • 应用生成对抗神经网络(GAN)的文本摘要 

后记

我希望这篇文章能帮助你理解自动文本摘要的概念。它有各种各样的应用案例,并且已经产生了非常成功的应用程序。无论是在您的业务中利用,还是仅仅为了您自己的知识,文本摘要是所有NLP爱好者都应该熟悉的方法。               

我将在以后的文章中尝试使用高级技术介绍抽象文本摘要技术。同时,请随时使用下面的评论部分让我知道你对这篇文章的想法或任何问题。

数据集下载链接:

https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2018/10/tennis_articles_v4.csv

算法代码链接:

https://github.com/prateekjoshi565/textrank_text_summarization

原文标题:

An Introduction to Text Summarization using the TextRank Algorithm (with Python implementation)

原文链接:

https://www.analyticsvidhya.com/blog/2018/11/introduction-text-summarization-textrank-python/

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程文本分割文本处理文本摘要TextRank
11
相关数据
Hans Peter Luhn人物

IBM计算机科学、图书馆和信息科学领域的研究员,也是Luhn算法、KWIC(上下文关键词)索引和信息选择性传播(SDI)的创造者。他的发明已经在计算机科学、纺织工业、语言学和信息科学等不同领域得到应用。他获得了80多项专利。

深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

排序算法技术

排序算法是将一串数据依照特定排序方式进行排列的算法,最常用到的排序方式是数值顺序以及字典顺序。基本上,排序算法的输出必须遵守下列两个原则:输出结果为递增序列(递增是针对所需的排序顺序而言);输出结果是原输入的一种排列、或是重组。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

文本分割技术

文本分割是将书面文本分割成有意义的单位的过程,如单词、句子或主题。这个术语既适用于人类阅读文本时使用的心理过程,也适用于计算机中实现的人工过程,计算机是自然语言处理的主题。这个问题并不简单,因为虽然有些书面语言有明确的词界标记,例如书面英语的单词空间和阿拉伯语独特的最初、中间和最后的字母形状,但这种信号有时是含糊不清的,在所有书面语言中都不存在。

GloVe技术

Stanford开发的用于词向量表示的一个库/工具

线搜索技术

最优化问题中,线搜索是一种寻找目标函数 的局部最小值 的近似方法。 它是最基础的迭代近似方法之一,另一种是置信域方法。 线搜索近似首先找到一个使目标函数 下降的方向,然后计算 应该沿着这个方向移动的步长。 下降方向可以通过多种方法计算,比如梯度下降法,牛顿法和拟牛顿法。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

余弦相似性技术

余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为0到1之间。

图论技术

图论是以“图”为研究对象的一个数学分支,是组合数学和离散数学的重要组成部分。图是用来对对象之间的成对关系建模的数学结构,由“顶点”(又称“节点”或“点”)以及连接这些顶点的“边”(又称“弧”或“线”)组成。值得注意的是,图的顶点集合不能为空,但边的集合可以为空。图可能是无向的,这意味着图中的边在连接顶点时无需区分方向。否则,称图是有向的。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

推荐文章
暂无评论
暂无评论~