一种基于抽取式多文档摘要方法的自动化写作方法与流程

文档序号:18553374发布日期:2019-08-30 22:16阅读:235来源:国知局
一种基于抽取式多文档摘要方法的自动化写作方法与流程

本发明属于计算机应用,计算机系统,因特网,信息处理及其技术产品。



背景技术:

针对新闻的自动化写作指的是计算机软件系统与大数据资源相互配合的智能算法应用,写作系统通过数据的收集、整理、分析整合等步骤完成一篇新闻稿件的写作。2010年以来国外媒体如美联社,国内媒体如新华社和腾讯新闻等相继推出了各自的写作机器人,目前的写作主要是面向财经、体育、突发事件如极端天气与地震等领域的写作。目前这些自动写作系统的特点是信息源格式固定且高度精炼,输出稿件普遍篇幅较短,实现方式多是借助领域专家人工定制的模板,将信息源产生的新数据填入相应模板的对应位置,效果类似手机话费查询时的回复短信。特点是快速可靠,确保保证了重要信息的及时发布。缺点则是只能处理简单消息,格式千篇一律,且只能根据消息源的特点花费大量人力创建模板,而在其他领域这些模板又完全不适用。总的来讲,这些系统无法实现一般性新闻的稿件写作。

从人类进行新闻稿件写作的过程来看,主要分为信息收集与写作两个阶段。我们目前处于的大数据时代,得益于搜索引擎,网络爬虫等技术,信息收集的自动化过程是非常容易做到的。然而如何模拟人的能力,对收集到的数据进行整理,整合重要信息“写”出新闻稿件则是相当困难的一件事。

定位文本中的重要信息并以较短的篇幅输出的技术在学术研究领域称为自动文档摘要技术。文档摘要技术的学术研究与新闻写作的不同之处在于,文档摘要需要系统找到重要信息,要控制输出篇幅,而对语义上的连贯性则不甚重视。而新闻稿件的写作则力求语义连贯、无重复地叙述一件事,篇幅方面则有较大灵活性。实践中,文档摘要技术通常用于新闻资讯的“总结概括”以辅助用户对原文的理解。摘要技术分为两类,一类是基于原句抽取的系统,优点是句子作为处理单位不会存在可读性问题,但是句子之间的排列方式可能会带来阅读上不通顺的问题;另一类则是借助自然语言生成的生成式摘要系统,句子所用的词汇不必来源于原文,借助于近年来深度学习在自然语言生成方面的巨大成功,生成式摘要开始在各种评测中接近抽取式摘要的效果。基于深度学习,尤其是循环神经网络的语言生成技术的自然语言生成技术近来有很多写作方面的新奇应用,如自动写诗,图片描述等任务。然而,目前来讲,基于深度学习的生成式摘要距离实际部署应用仍有较大距离,一是无法处理较长的文本,对多文档更是无能为力,二是泛化能力很差,在一个数据集上训练测试的效果,在别的数据集上往往效果很差,最后,所生成的语言本身也经常出现语病、局部重复等现象。



技术实现要素:

本发明的目的在于提出一种基于抽取式多文档摘要方法的自动化写作方法,在已拥有大数据文本检索平台的基础上,实现可以根据用户提供的话题,自动按话题生成一篇或多篇完整新闻稿件的自动化撰写。

为此,本发明提出一种基于抽取式多文档摘要方法的自动化写作方法,包括如下步骤:a1、用户输入与数据预处理:接收用户输入的关键词,在数据检索平台检索相关数据,并对检索出来的相关数据进行初步处理;a2、图排序:对多个文档的输入,系统首先识别出所有句子,并对所有句子的重要性进行评分;a3、去冗余:如果句子中存在的两个或多个相似度超过预定阈值的句子,则只保留其中一个,输出去除了冗余句的有序句子列表;a4、构造输出:按照篇幅限制在上一阶段提供的有序句子列表中从前到后选择最重要的句子,并对这些句子进行重新排序,输出排好序的句子所构成的文稿。

在一些实施例中,本发明还包括如下特征:

步骤a1中所述数据预处理包括:对检索出的数据进行如下初步处理:垃圾数据的过滤及有效文档的聚类。

步骤a2中图排序包括:对多个文档的输入,系统首先识别出所有句子,并对所有句子的重要性进行评分。

图排序的算法属于通过构造文本图并在文本图上运行排序算法。

步骤a3中去冗余的做法是:对于输入的句子列表,先保留排名最高的句子到输出列表中,然后挨个对后面的所有句子进行如下处理:挨个比较与输出列表中的句子的相似度,若当前被分析的句子与输出列表中的某个句子相似度大于所设置阈值,那么当前句子被过滤,反之,则加入输出列表的末尾。

所述步骤a4中,构造输出包括:从步骤a3中的有序句子列表的头部开始,选择句子,计算字数,直到加入某个句子后,总字数大于或等于篇幅限制,然后停止选择过程。

在选取了足够篇幅要求的句子之后,对句子之间的前后顺序进行最终的调整,句子调整的原则如下:首先,对于两个句子来讲,若这两个句子来自于同一篇原文,那么前后关系基本可以按照原始的前后关系来;而若两个句子s1,s2来自于不同的文章,首先以s1分析对象,若s1与s2的上文的某个句子s3非常相似,那么s1应该排到s2之前的必要性应正比于s1与s3的相似度,且反比于s3与s2在原文中相隔的句子数目,同时若s1与s2的下文中的某个句子s4的相似度很高,那么s1应该排到s2后面的必要性应正比于s1与s4的相似度,同时反比于s4到s2的距离。

把所有句子看做节点,对于任意两个节点,从一个节点到另一节点按上面方式构造一条有向边,该有向边起始于开始节点并指向结束节点,并且该有向边的权值用“必要性”指标表示,基于所有输出句构建一个有向文本图,边的方向代表起始节点“应该”位于末尾节点之前,权值代表其“应该”的必要程度,即代表了语义连贯性;在这样一个有向、带权、可能有环的文本图上进行路径选择,即根据这个图选择一个节点作为起始节点,然后从这个节点出发不重复地加入其它节点,并保留文本图中节点之间的边,输出的句子节点列表可以看做一条带权的路径。

路径构造算法基于图排序理论,选择贪心搜索的方式遍历文本图构造主路径,若遇到环,则停止贪心过程,将剩余节点按照多重规则加入主路径。

本发明还包括一种计算机程序,其特征在于,存储有计算机程序,所述程序可以被执行以实现上述的方法。

本发明的有益效果有:本发明提供的一种基于大量相关文本“素材”进行自动化的文章生成的方法,能帮助用户快速了解相关资讯的重点及大致发展历程,可帮助普通用户用于跟进新闻热点,也可以辅助专业的新闻编辑,即提供一个或多个大致的“文章草稿”。

附图说明

图1是本发明实施例自动写作系统的算法框架示意图。

图2是本发明实施例应用textrank的文本图示意图。

图3是本发明实施例用于句子顺序调整的语义图示意图。

具体实施方式

本发明下述实施例致力于基于抽取式多文档摘要技术为基础构建新闻的自动写作系统,不仅要实现摘要系统的普遍要求即找出重要信息,同时也要确保信息的完整性与连贯性,基本的功能是用户给定一个话题,系统自动收集相关数据,并以适合人类阅读的方式输出对应的完整文章。本方法可以帮助用户对复杂新闻事件快速了解全貌,也可以用来对感兴趣的新闻话题的持续跟踪,即可以随着事件的发展借助我们的系统对不同阶段加以描述。也可以作为新闻编辑人员的辅助工具,即可以先借助我们的系统基于当前新闻热点进行写作,以辅助编辑人员了解事情的最新进展或者帮助查漏补缺发现之前未注意的方面。

本方法的实施前提是已经存在了大数据文本检索平台,其具体实现方式不做限制,只要满足资讯数据的充足与基本的全文检索接口即可。本方法属于文本大数据平台的具体应用方案,其具体实施方案包括四个阶段:用户输入与数据预处理,图排序,去冗余,构造输出。

用户输入与数据预处理阶段:

本阶段主要涉及接收用户输入的关键词,在数据检索平台检索相关数据,并对检索出来的相关数据进行初步处理的阶段。

用户输入是本系统的对外接口,用户输入感兴趣的关键词,如同在搜索引擎的搜索框中填写关键词,接下来的流程直到文章稿件的输出则属于算法处理部分。系统接收到用户输入的关键词后,将通过检索接口到数据平台检索相关的文档数据。应用关键词以及这些设置来检索数据的功能,现代常用的检索系统如elasticsearch等都有所提供。关于检索文本的数目,时间范围等本系统做了一定的默认设置,默认情况下,本系统以100篇相关文章为数目上限,以用户检索时间点到之前一周时间为时间区间检索相关数据,同时用户也可以自定义这些。

根据用户输入的关键词及限制条件在数据平台检索出文本数据后,在正式进行句子重要性排序之前,需要对检索出的数据进行初步处理,主要分为两类:垃圾数据的过滤及有效文档的聚类。垃圾数据主要是指广告、过短文本、过长文本(调研报告等不属于新闻资讯领域类的文档)、与关键词关联度不大的文章等。初步的过滤靠字数的分析进行,过长过短都将被过滤。通过字数分析过滤之后的文档集,会进行聚类算法,将原始文档按话题重点分为几类,这里采用的聚类算法对类别数目不加限制,这样,热门类别下通常有较多文档,而有一些冷门的类别下可能只有一到两篇文档,我们认为这样类别的文档属于与当前用户关注的热门话题不相关的垃圾数据,也进行过滤。

这样,经过数据的预处理阶段,若查询、过滤、聚类、最后再过滤冷门类别之后,若没有任何数据留下,则认为当前数据平台对于当前话题无法提供足够的“素材”,写作过程宣告失败。若最后有一个或几个类别,每个类别下都有足够数目的文档数量(数量根据实际情况由算法工程师设置,如3个),则在每个类别下都可以分别进行后续的处理,每个类别可以生成一篇文章出来,即每个类里面都有后面要介绍的图排序、去冗余、构造输出的过程,系统会保留所有类的生成结果。对于这些一个或多个输出结果的处理,将交由本系统的用户自行处理。

图排序阶段:

图排序阶段的作用是,对多个文档的输入,系统首先识别出所有句子,并对所有句子的重要性进行评分。“图排序”指的是本阶段用的算法属于通过构造文本图并在文本图上运行排序算法。本阶段所依赖的技术属于多文档摘要的学术研究领域。我们通过改进文档摘要领域的重要算法textrank来作为我们图排序的核心算法。textrank算法本身是摘要领域,在文本图上借鉴pagerank算法的做法来识别重要句子,其主要思想在于若一个句子与很多句子存在相似性,那么这个句子属于比较重要的句子。经典的textrank算法考查句子相似性是通过比较两个句子是否还有完全相同的短语或单词来进行的,而我们应用google提出的word2vec模型,将其应用到句子相似度比较当中,从而能发现更深层次的语义联系,从而能有效找出句子之间的相似关系,最后有利于算法识别重要句子,同时也有利于去掉语义上冗余的句子。图排序阶段的输出是,所有句子按重要性打分后按重要性从高到低排列的句子列表。

去冗余阶段:

在获取了句子按重要性从高到低的列表之后,在选取排名最高的句子按篇幅要求组成输出之前,为了在有限篇幅尽可能多表达信息,同时为了可读性考虑,输出的句子中不应该存在两个高度相似的句子,这就是去冗余阶段的目的。本阶段的输入是前一步的有序句子列表,输出则是去除了冗余句的有序句子列表。

这一阶段的做法是,对于输入的句子列表,先保留排名最高的句子到输出列表中,然后挨个对后面的所有句子进行如下处理:挨个比较与输出列表中的句子的相似度,若当前被分析的句子与输出列表中的某个句子相似度较大(大于所设置阈值,比如按下文要介绍的句子相似度计算方法,两个句子之间的相似度是介于0到1之间的小数,我们可以认为大于0.4的情况,属于两个句子的相似度较大,0.4就是所定的“阈值”),那么当前句子应该被过滤,反之,则应该加入输出列表的末尾,如此处理完之后的输出句子列表就是我们本阶段的输出。

构造输出阶段:

本阶段的主要作用是,按照篇幅限制(对于篇幅,系统有预设的800字限制,但是用户在使用系统时,在提供关键字的同时也可以指定自己中意的字数)在上一阶段提供的有序句子列表中从前到后选择最重要的句子,并对这些句子进行重新排序,以使其尽可能符合人的阅读体验,输出则是排好序的句子所构成的文稿。选择句子的过程是,从上一个阶段的有序句子列表的头部开始,选择句子,计算字数,直到加入某个句子后,总字数大于或等于篇幅限制,然后停止选择过程。在选取了足够篇幅要求的句子之后,这些句子当前的前后顺序是按排序算法赋予的重要性排列的,但为了保证最终的输出能在语义连贯方面符合人类的阅读体验,系统需要对句子之间的前后顺序进行最终的调整。句子调整的原则如下:首先,对于两个句子来讲,若这两个句子来自于同一篇原文,那么前后关系基本可以按照原始的前后关系来;而若两个句子s1,s2来自于不同的文章,首先以s1分析对象,若s1与s2的上文的某个句子s3非常相似,那么s1应该排到s2之前的必要性应正比于s1与s3的相似度,且反比于s3与s2在原文中相隔的句子数目,同时若s1与s2的下文中的某个句子s4的相似度很高,那么s1应该排到s2后面的必要性应正比于s1与s4的相似度,同时反比于s4到s2的距离;同理以s2为分析对象,“s2位于s1上文”和“s2位于s1下文”的两个必要性指标都可以计算。这样,若把所有句子看做节点,对于任意两个节点,可以从一个节点到另一节点按上面方式构造一条有向边,该有向边起始于开始节点并指向结束节点(如像上面的s2节点位于s1节点之前,就可以据此构造一个s2->s1的有向边),并且该有向边的权值可以用上面提到的“必要性”指标(具体计算公式在下文提供)表示,因此,两两句子节点之间可能存在有向带权边,并且按照上面的分析,s1指向s2的有向带权边应该有两条(s1位于s2上文,以及s2位于s1下文),为简化计算,我们仅保留一个权值较大的边,同时s2指向s1的有向边也保留两条有向边中的较大者。按照这样的逻辑,两个句子之间都可以建立这样的关系,于是,基于所有输出句构建了这样一个有向文本图,边的方向代表起始节点“应该”位于末尾节点之前,权值代表其“应该”的必要程度,即代表了语义连贯性。在这样一个有向、带权、可能有环的文本图上进行路径选择,即根据这个图选择一个节点作为起始节点,然后从这个节点出发不重复地加入其它节点,并保留文本图中节点之间的边,输出的句子节点列表可以看做一条带权的路径,由于这些边的权值直接来自于文本图,代表语义连贯性,路径构造算法的目的即最大化这个路径的权值之和,也就是最大化语义连贯性。

路径构造算法基于图排序理论,选择了贪心搜索的方式遍历文本图构造主路径(贪心搜索就是选择节点构造路径时每次选择当前的最大权值点,以图3来演示:选定好起始节点如s1,然后从该节点出发,选择权值最大的边构造路径,s1出发的边中,到s2的边权值最大,因此将s2加入路径,然后再从s2出发,从s2到s3和到s5的取值都是最大值,实际遇到这种情况可以任意选择一个最大值,此时把s3加入路径,后面再从s3出发寻找最大权值边以此类推),若遇到环(如按照图3从s1出发贪心搜索,会有一个s1->s2->s3->s4的路径,而到s4节点时,从s4出发的最大权值边是s4->s3,而s3已经在我们维护的路径中了,因此构成了环,从示意图中也可以看出,现有的路径选择会导致s3到s4之间构成环),则停止贪心过程(如图3的过程,即保留s1-s2-s3-s4路径,贪心搜索过程结束),将剩余节点按照多重规则加入主路径。多重规则的详细说明在具体实施方式部分进行详细阐述。

最后,这个重新排好序的句子列表就是当前类别下的输出文稿。

本发明实施例的主要目的在于在具备大型文档检索系统这一基础设施的前提下,提供一个提供自动化机器写作的方案。其中主要涉及3个关键点,一、基于全文检索准备原料,基于摘要系统选择重要信息,并根据语义文本图来保证连贯性这样一整套的解决方案二、在准备原料过程中注意通过垃圾数据识别,聚类等对原始数据进行清理,以保证生成质量三、通过google的word2vec模型获取分布式词向量,可以借此得到词的语义关联,基于词的语义关联获取句子的语义关联,并借此提高摘要效果,去冗余效果,同时也借助这种语义关联来最后调整输出的句子之间的前后顺序来提高可读性。

如前所述,本发明技术是在大型文档检索库基础上,根据用户提供关键词、篇幅要求等查询条件,在检索库中检索出相关“素材”,然后根据这些素材生成新的“文稿”的算法过程。本发明不涉及具体的文档检索库的指定,只要该检索库满足如下条件即可:1.提供按关键词的全文检索功能2.所维护的文本数据最好是齐全的,并且随着时间推移不停有新的数据添加进去。

本发明的算法过程主要可以划分为如下四个处理模块:数据预处理模块,图排序模块,去冗余模块,以及输出构造模块,如图1所示。各个模块的处理细节如下。

数据预处理模块:

数据预处理模块主要负责接收用户输入,在文档检索库上检索出相关的素材文本,并对这些文本进行初步的清理。

接收用户输入的方式不做具体规定,一般情况下都是设置静态html页面,获取用户输入,并通过httppost的方式将数据提交给系统。本系统的处理范围就是从接收用户提交开始,到返回生成文稿结束。

接收用户输入后,系统首先将通过检索系统获取相关的素材,一般的全文检索系统如elasticsearch都可以设置自定义查询条件,如关键词、时间、检索数目上限等,这里不做具体规定,不过按经验来讲,检索系统应该提供数十篇字数起码数百的“素材”,才足够支撑后面写作算法所需要的数据量,自动写作系统将在多个环节检查数据量是否足够进行后面的操作,一旦不足,系统将不会产生有效输出。经验来讲,检索系统应该返回100篇左右的“素材”文章才足以进行效果较好的写作算法。

针对依据用户输入检索出来的素材文本,需要对其进行预处理,预处理的目的一方面是清除无效内容(如字数极短的文本、通篇是重复标题内容的水文、含有政治敏感词等),一方面则是需要进行初步的聚类操作。

清除无效内容的操作基本通过分析字数,由开发人员根据实际经验设定字数阈值来进行过滤。

聚类的作用是使同一类下的话题更为集中,同时自动过滤掉较为生僻的话题,同时聚成的多个类可以分别应用后面的算法,以对用户提供多个备选文稿。

聚类算法的实现由两步构成:第一步,使用tf-idf找出每篇素材文稿中的关键词列表,列表为按重要性从高到低排列的top10关键词。第二步,以top10关键词作为每篇文档的代表,按照关键词重合数目进行聚类操作。具体实现过程如下:

关键词提取算法,首先对于当前的所有素材文档,用文档集d表示:d={d1,d2,…,dn},文档频率tf考查单词t在文档d中的出现频率,计算方式为:tf(t,d)=f(t,d)/|d|,其中的tf(t,d)表示单词t在文档中的出现次数,|d|表示文档d中总的单词数目。逆文档频率idf的计算方式如下:

其中|d|表示此次的文档总数目,df表示文档集d中含有单词t的文档的数目。最终,对于任意单词t的tf-idf权值计算方式如下:

tf-idf(t,d,d)=tf(t,d)·idf(t,d)(2)

根据此tf-idf权值,可以获取每篇文档的所有单词的重要性,从而获取每篇文档的top10关键词,并按重要性从高到低降序排列。

聚类的第二步也就是对所有抽取了关键词列表的文章,对检索出的文章列表,取第一篇文章作为第一类,从第二篇文章开始——遍历所有类,并对现有类中每个类中的所有文章挨个比较,只要发现两篇文章重合的关键词个数超过阈值,则将文章归为该类,若遍历完之后都没有大于阈值的情况,则新增一类。阈值的设置需要开发人员根据具体实践过程的效果选择,一般是介于3到6的数字。

至此,已完成了所有聚类操作,下面需要的是对所有类簇的数量进行分析,过滤掉某些较为“生僻”的类即该类中包含的文档数量少于指定阈值的。若经过此步骤后没有剩下有效数据,则认为文档库中包含的“素材”不足,若能剩下一个或多个类,则在每个类下面分别引入后面的处理模块,这样,每个类都会生成一篇文稿并最终合并起来返回给用户。

图排序模块

图排序模块的输入是来自于有效类下面的多篇文档,多文档中的内容进行基本的断句和分词后,以句子为单位进行应用textrank算法,最终获取每个句子的重要性,输出为以按重要性从高到低降序排列的句子列表。

在应用排序算法之前,需要进行一些基础设施的搭建。首先是常用词的词向量,需要准备充足的文本数据,比如文档检索平台过去一段时间范围内收录的文本数据,通常一百万篇左右的常规新闻报道数据即可满足需要。在这些文本数据上应用google的word2vec算法,获取一个词向量模型,这里不详细解释word2vec作用原理,它仅是一个对常用词进行向量化的工具。我们获取到的是对于语料中的每个常用词,都有一个固定维数(如128维)的向量表示,这些常用词的总数目不应少于1万。然后另一方面的基础设施是一个句子编码的接口,即给出一个句子,对其进行分词后,根据现有的词向量的模型,获取整个句子的向量表示。这里采用的方式是学术论文《asimplebuttough-to-beatbaselineforsentenceembeddings》中提出的sif模型,其具体计算方式如下:

对于输入的句子集合s={s1,s2,…,sn},现在已有提前训练好的词向量模型输出的目标是对于所有句子的编码对于s中的所有句子s,进行首先计算vs的初值:

接下来获取整个向量空间的pca主成分u(可以通过pca算法工具包计算得到,pca算法这里不再详细介绍),然后再次对每个句子s的权值vs更新为:通过以上过程,即可对所有句子进行向量化。词向量模型以及句子向量的计算方法需要实现为可调用的程序接口,即输入是某一类下面的所有句子,输出则是这些句子的对应向量。

在拥有了查询句子向量以及词向量接口的基础上,下面介绍具体的排序算法那过程。如之前提到的,排序算法的输入是某类下的所有文本数据,对于这些纯文本数据,首先需要根据正则表达式进行断句,分割出算法的基本处理对象——句子,同时每个句子维护三个属性,一是句子编号,句子编号需要同时体现文章位置与句子位置,位数根据实际情况决定,比如若能保证每个类中文档数量不超过9个,每篇文章的句子数量不超过99个,句子编号可以采用文章位置*1000+句子位置,如202表示的是第二篇文章中的第二个句子,二是句子对应的分词列表,这里使用的分词工具应使用之前训练词向量时的同样的工具,三是句子向量,这个可以通过查询之前介绍的接口获得。

接下来就是运用textrank算法对句子进行重要性排序的过程,首先需要以句子为节点,以句子之间的相似度为加权边构建图结构,两个句子si和sj的相似度通过计算两个句子对应向量的余弦相似度来得到:

构建好文本图后,如图2所示,图2中输入文本含有五个文档(分别用d1,d2…d5表示),每个文档有三个句子(分别用s1,s2,s3表示),句子对应图上节点,句子之间的相似度对应加权边,相似度为0的两个节点之间没有边。对于文本图中的每个节点赋予一个随机权值pr(si)∈(0,1),然后开始迭代计算,每轮迭代,按如下方式对所有节点的权值挨个按如下方式进行更新:

其中in(si)表示文本图中节点si的前邻节点,out(si)表示文本图中si的后邻节点,d为阻尼系数,通常被设为0.85。每次算法迭代都需要进行如此的参数更新,直到前后两轮的迭代,每个节点的权值变化都小于所设阈值(阈值一般取小于千分之一的数字),算法收敛,获取到了每个句子的最终权值,权值就是节点的重要性评分,最后按重要性从高到低将句子节点排序之后作为本模块的输出传到下一个处理模块。

去冗余模块:

去冗余模块的作用是对于上一个模块输出的有序句子列表进行进一步处理,过滤掉文字乃至语义上重复的句子,防止两个高度相似的句子出现在最终结果里影响阅读体验。具体处理过程是针对上一步所获取的排好序的句子列表从头开始处理,正式的处理从第二个句子开始,将其和之前的第一个句子进行相似度比较(即两个句子向量的余弦相似度),若相似度大于指定阈值,则认为当前句是冗余句,排除掉当前句子,对于后面的每个句子,都要挨个和之前处理后保留下来的所有句子,重复之前的相似度比较来决定去留。整个过程就是确保输出的句子列表中相互之间不存在高度相似的情况。

本处理阶段作为一个单独模块实现,作为重要性排序与后面的语序调整两个模块之间的过渡阶段,保持相对独立,同时也方便开发人员调整过滤句子的相似度阈值。

构造输出模块:

本模块的任务是对于上一模块传来的有序句子列表,按照之前的篇幅要求从有序句子列表中从前到后选择排名靠前的句子,并对这些句子进行重新排序,以使其尽可能符合人的阅读体验,输出则是排好序的句子所构成的文稿。

重新排序的思想在于两个句子之间的前后关系应该考虑所来自原文的上下文的关系。两个来自于不同文章中的句子s1,s2,若s1与s2的前文的某个句子非常相似,则s1应该排在s2的前面,若s1和s2的后文的某个句子非常相似,则s1应该排在s2的后面。使用句子向量计算余弦相似度(即两个句子向量按公式(5)计算出的数值结果,数值是0到1之间的小数)。这样s1到s2上文或下文的“相邻的必要性”(相邻必要性就是指一个句子应该排到另一个句子之前的必要性,我们的算法可以按公式(7)将其数值化,比如s1到s2的相邻必要性为0.4,s3到s2的相邻必要性是0.5,显然s3应该排到s2之前)可以量化为两个值,同理s2到s1上文或下文也各有两个值。为简化计算,s1到s2上文的权值,取s1到s2的“相邻必要性”和s2到s1的“相邻必要性”两个值中的较大值,即若句子看做图中的节点的话,s1到s2只保留一个有向边,取值为较大权值,表示s1到s2的“相邻必要性”,同理,s2到s1也只保留一个较大权值的有向边,一般的,对于两个来自不同原文的节点ssi和ssk,假设sj,l是ssi上文中与ssk最相似的句子,那么,ssk应该排在ssi之前的相邻必要性的权值为:

其他情况以此类推。

这样,句子列表中的两两句子之间都可以构造两条边。整个图可以看做是句子之间的语义连贯性的建模,如图3所示。输出的构造过程则基于这个语义关联图来对句子进行重排。输出的目标则是从这个图中选择一条覆盖所有节点的没有环的路径,并使这个路径的上的边的权值之和最大。这里需要解决的两个问题是:一是路径的起始节点的选取需要进行限定,参考句子在原文中的位置,我们选择最靠前的句子作为首节点,然后按照贪心策略,每次按照权值最大的边往后选取节点构造路径(即第4.2.1节描述的贪心搜索过程)。二是这条路径构造过程中可能会遇到环(参考第4.2.1节对环的描述),导致无法“一笔画”覆盖所有节点。此时需要将剩余节点再加回主路径,加回主路径的过程分三步处理:a)对于剩余所有节点,重新选择首节点,并同样按贪心策略向后延展,构造第二条路径,若遍历完所有节点之前,第二条路径又遇到环,开始构造第三条路径,以此类推…b)对于非主路径的其他路径,按其构造的前后顺序首尾相连(目的是保持前后顺序,优先处理前面的节点)c)从次要路径的首节点开始往后挨个分析:主要进行以下几轮分析来确定其在主路径上的插入位置:首先遍历主序列上的节点,若存在某个主序列节点跟当前节点来自同一篇原文,并且在原文中是前后相邻的关系,则把待处理节点按照在原文中的位置,放到主序列中的那个节点的前后或者后面;若上一步没找到合适的位置,则进行第二轮遍历,即对该主序列从头开始挨个检查两个节点之间的位置,查找这样一个位置(两个节点之间,比如原来的序列是s1-s2-s3-s4,我们寻找一个位置把s5插入到这个序列中,这个例子中总共有4个位置可以考虑),这个位置插入当前节点之后,新形成的两个边的权值都大于原来的那条边,则把当前待处理节点放到这个位置;若上一步仍未找到合适位置,则进行第三轮的遍历,查找一个位置,在这个位置插入当前待处理节点之后,新形成的两个边的权值一个大于原来的那条边,而另一个不小于指定的阈值,若符合要求,则把当前节点放入当前位置;若上一步没有找到合适位置,则进行第四轮的遍历,寻找一个位置,插入当前节点后,新形成的两个边的权值平均权值,在所有可以插入的位置中最大,这次若遍历结束后仍没找到合适的位置,则将当前待处理节点放到序列的最后。

经过上述基于语义图的重排之后的句子列表就是本模块的输出。同时对于个系统来讲,经过预处理聚类之后可能存在多个类,每个类最终经过语义重排模块之后都有输出,系统需要整合这些结果返回给用户。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1