TF-IDF与余弦相似性的应用(三):自动摘要

2018 年 5 月 2 日 黑龙江大学自然语言处理实验室 阮一峰


作者:阮一峰

博客链接:http://www.ruanyifeng.com/blog/2013/03/tf-idf.html


有时候,很简单的数学方法,就可以完成很复杂的任务。这个系列的前两部分就是很好的例子。仅仅依靠统计词频,就能找出关键词和相似文章。虽然它们算不上效果最好的方法,但肯定是最简便易行的方法。


今天,依然继续这个主题。讨论如何通过词频,对文章进行自动摘要(Automatic summarization)。



如果能从3000字的文章,提炼出150字的摘要,就可以为读者节省大量阅读时间。由人完成的摘要叫"人工摘要",由机器完成的就叫"自动摘要"。许多网站都需要它,比如论文网站、新闻网站、搜索引擎等等。2007年,美国学者的论文《A Survey on Automatic Text Summarization》(Dipanjan Das,  Andre F.T. Martins, 2007)总结了目前的自动摘要算法。其中,很重要的一种就是词频统计


这种方法最早出自1958年的IBM公司科学家H.P. Luhn的论文《The Automatic Creation of Literature Abstracts》。


Luhn博士认为,文章的信息都包含在句子中,有些句子包含的信息多,有些句子包含的信息少。"自动摘要"就是要找出那些包含信息最多的句子。


句子的信息量用"关键词"来衡量。如果包含的关键词越多,就说明这个句子越重要。Luhn提出用""(cluster)表示关键词的聚集。所谓"簇"就是包含多个关键词的句子片段。



上图就是Luhn原始论文的插图,被框起来的部分就是一个"簇"。只要关键词之间的距离小于"门槛值",它们就被认为处于同一个簇之中。Luhn建议的门槛值是4或5。也就是说,如果两个关键词之间有5个以上的其他词,就可以把这两个关键词分在两个簇。


下一步,对于每个簇,都计算它的重要性分值



以前图为例,其中的簇一共有7个词,其中4个是关键词。因此,它的重要性分值等于 ( 4 x 4 ) / 7  = 2.3。


然后,找出包含分值最高的簇的句子(比如5句),把它们合在一起,就构成了这篇文章的自动摘要。具体实现可以参见《Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites》(O'Reilly, 2011)一书的第8章,python代码见github。


Luhn的这种算法后来被简化,不再区分"簇",只考虑句子包含的关键词。下面就是一个例子(采用伪码表示),只考虑关键词首先出现的句子。

Summarizer(originalText, maxSummarySize):      
    // 计算原始文本的词频,生成一个数组,比如[(10,'the'), (3,'language'), (8,'code')...]     wordFrequences = getWordCounts(originalText)      
    // 过滤掉停用词,数组变成[(3, 'language'), (8, 'code')...]     contentWordFrequences = filtStopWords(wordFrequences)      
    // 按照词频进行排序,数组变成['code', 'language'...]     contentWordsSortbyFreq=sortByFreqThenDropFreq(contentWordFrequences)      
    // 将文章分成句子     sentences = getSentences(originalText)      
    // 选择关键词首先出现的句子     setSummarySentences = {}     for each word in contentWordsSortbyFreq:         firstMatchingSentence = search(sentences, word)         setSummarySentences.add(firstMatchingSentence)          
        if setSummarySentences.size() = maxSummarySize:              
           break     // 将选中的句子按照出现顺序,组成摘要     summary = ""     for each sentence in sentences:          
        if sentence in setSummarySentences:            summary = summary + " " + sentence    
    return summary


类似的算法已经被写成了工具,比如基于Java的Classifier4J库的SimpleSummariser模块、基于C语言的OTS库、以及基于classifier4J的C#实现和python实现。


附:github链接 

https://github.com/ptwobrussell/Mining-the-Social-

Web/blob/master/python_code/blogs_and_nlp__summarize.py




推荐阅读

基础 | TreeLSTM Sentiment Classification

基础 | 详解依存树的来龙去脉及用法

基础 | 基于注意力机制的seq2seq网络

原创 | Simple Recurrent Unit For Sentence Classification

原创 | Highway Networks For Sentence Classification


欢迎关注交流



登录查看更多
1

相关内容

就是说在不改变文档原意的情况下,利用计算机程序自动地总结出文档的主要内容。自动摘要的应用场景非常多,例如新闻标题生成、科技文献摘要生成、搜索结果片段(snippets)生成、商品评论摘要等。
基于多头注意力胶囊网络的文本分类模型
专知会员服务
76+阅读 · 2020年5月24日
【ACL2020-复旦大学NLP】异构图神经网络的文档摘要提取
专知会员服务
34+阅读 · 2020年5月1日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
计算机视觉最佳实践、代码示例和相关文档
专知会员服务
17+阅读 · 2019年10月9日
基于句子嵌入的无监督文本摘要(附代码实现)
基于知识图谱的文本挖掘 - 超越文本挖掘
专知
38+阅读 · 2019年8月18日
手把手 | 基于TextRank算法的文本摘要(附Python代码)
大数据文摘
11+阅读 · 2018年12月27日
独家 | 基于TextRank算法的文本摘要(附Python代码)
数据派THU
14+阅读 · 2018年12月21日
计算文本相似度常用的四种方法
论智
33+阅读 · 2018年5月18日
干货 | 自然语言处理(3)之词频-逆文本词频(TF-IDF)详解
机器学习算法与Python学习
3+阅读 · 2017年12月19日
干货 | 自然语言处理(2)之浅谈向量化与Hash-Trick
机器学习算法与Python学习
3+阅读 · 2017年12月13日
干货 | 自然语言处理(1)之聊一聊分词原理
机器学习算法与Python学习
5+阅读 · 2017年12月7日
Arxiv
7+阅读 · 2019年10月6日
Arxiv
3+阅读 · 2019年3月1日
Arxiv
3+阅读 · 2018年12月19日
Arxiv
5+阅读 · 2018年3月28日
Arxiv
5+阅读 · 2018年1月30日
VIP会员
相关VIP内容
基于多头注意力胶囊网络的文本分类模型
专知会员服务
76+阅读 · 2020年5月24日
【ACL2020-复旦大学NLP】异构图神经网络的文档摘要提取
专知会员服务
34+阅读 · 2020年5月1日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
计算机视觉最佳实践、代码示例和相关文档
专知会员服务
17+阅读 · 2019年10月9日
相关资讯
基于句子嵌入的无监督文本摘要(附代码实现)
基于知识图谱的文本挖掘 - 超越文本挖掘
专知
38+阅读 · 2019年8月18日
手把手 | 基于TextRank算法的文本摘要(附Python代码)
大数据文摘
11+阅读 · 2018年12月27日
独家 | 基于TextRank算法的文本摘要(附Python代码)
数据派THU
14+阅读 · 2018年12月21日
计算文本相似度常用的四种方法
论智
33+阅读 · 2018年5月18日
干货 | 自然语言处理(3)之词频-逆文本词频(TF-IDF)详解
机器学习算法与Python学习
3+阅读 · 2017年12月19日
干货 | 自然语言处理(2)之浅谈向量化与Hash-Trick
机器学习算法与Python学习
3+阅读 · 2017年12月13日
干货 | 自然语言处理(1)之聊一聊分词原理
机器学习算法与Python学习
5+阅读 · 2017年12月7日
相关论文
Top
微信扫码咨询专知VIP会员