一、瞎扯
这是我2019年写的第一篇博客,开篇说点题外话,翻了一下博客的记录,上一遍新闻自动摘要生成(一)的博客还是去年7月写的,这大半年的时间里,忙着秋招,忙着找工作,忙着实习,忙着完成毕业设计,以及忙着完成毕业论文,月初提交了毕业论文,也总算有时间可以继续书写博客。记得也是在CSDN上结识的一位师姐说的很对,“书写是对思维的缓存”。写博客不仅是对自己学习过程的一些记录,而且在知识输出的书写过程中,也更加深了自己对于知识的熟悉和掌握程度。年初也给自己定下了写20篇博客的计划,虽然目标看似艰巨,但希望自己能够努力做到极致。
二、回顾
新闻自动摘要生成这个系列的博客,我暂时准备分为四篇来写,其中前两篇介绍抽取式摘要生成的两种算法:MMR和TextRank,第三篇介绍偏向工程实现的两种方法,最后介绍一下seq2seq + Attention Based Model的方法。
这里是第一篇:自动摘要生成(一):最大边界相关算法(MMR)
由于第一篇文章写于半年之前,距今年代久远,而在这半年之中我对抽取式和生成式的摘要生成方法又有了不同的了解和认识,加之第一篇文章中欠缺了许多对摘要生成算法的系统性概述,所以就在这里补上吧,以后在写博客时候也会系统性的根据计划来写,努力避免这种“事后回头擦屁股”的情况发生。
言归正传,为大家重新介绍一下文本摘要算法。
现阶段的文本摘要算法,主要分为两个大致的方向,分别为:抽取式和生成式。
抽取式摘要
抽取式摘要,是将文章中的每一个句子看作一个最小单位,从整篇文章中选取出个能够表达整个文章主题思想的句子,将其作为整个文章的摘要。
抽取式摘要实现起来较为简单,并且由于组成摘要的句子都是从原文章中选取出来的,所以句子的可读性就有了保障。抽取式摘要生成算法要解决的问题是选取哪些个句子来表达文章主题,所以它的本质其实是一个优化组合的问题。
生成式摘要
生成式摘要,可以理解为我们初中时候,语文课后作业中经常要求的首先阅读整个文章,再用自己的语言来对文章中的信息和内容进行总结的过程。由于生成式摘要中的语言语句都是是由自己来组织的(语言模型输出的),所以整个摘要的可读性是一个大问题,换句话说就是训练出的语言模型能不能说人话。生成式摘要首先需要提取文章中所包含的信息,再将这些信息用训练语言模型来输出,所以它的的本质是一个编解码问题。
自然语言处理中基本所有的任务都可分为四类:
分类任务:如文本分类,情感分类。
标注类任务:如实体命名识别(NER),词性标注,句法分析。
文本匹配类任务:如问答系统,文本搜索,推荐召回。
文本生成类任务:如机器翻译,Image Caption。
抽取式摘要属于文本匹配任务。
生成式摘要属于文本生成类任务。
三、TextRank算法
好了,终于到了我们今天要讲的主题,TextRank算法。首先简单的介绍一下TextRank算法,TextRank算法的前身是PageRank算法,PageRank算法是由Google在20世纪90年代提出的,用于进行网页搜索结果排序的算法。后来对PageRank的公式稍加改动,衍生出了TextRank算法。
从这里我们也可以看出用于抽取式摘要算法的MMR和TextRank算法都是有搜索算法改变而来的,而搜索算法本质上解决的就是根据搜索内容来排序的问题,这也就体现出了为什么抽取式摘要算法是属于文本匹配类任务的一个优化组合问题了。
好,下面我们就先来看看PageRank算法是如何来排序网页的。
PageRank
首先,现Po出公式来瞧瞧。
:每一个网页的分数
:阻尼系数,作用是确保每一个网页都有分数
:推荐网页的页面
:网页推荐的页面
:网页推荐的页面的数量
其中网页的推荐例如网页A推荐了网页B的意思是:A网页中有B网页的链接,可以通过A网页到达B网页。
在计算每个页面的分数时,首先需要根据网页之间互相推荐的关系,构造出一个如下的邻接表出来。
In/Out |
A |