我在做什么
顾名思义,多文档自动摘要,即是完成多个文档的摘要内容提取。
在这里,我们的研究对象,单指灾害事件。
设计思路
在完成多文档自动摘要前,首先要思考以下几个问题:
- 以什么为基本单位做内容提取?
- 什么才能称为重要的内容?
基本单位
对于一个文档,我们可以将它拆分为:文档本身,段落,句子,词语,字。
- 首先,摘要内容将会是一段可阅读的内容,因此我们不能以"词语"、"字"为单位,因为很显然,他们都不能表达完整语义。
- 第二,一个文档完整的描述了一个事件,它包含了很多方面的内容,因此也不能以文档本身为单位,它包含的内容太多,不具有原子性。
- 第三,一部分情况下,段落描述的是一个事件某一个方面的内容,但我们依旧要考虑,由于文档来自于网络,在一些情况下,一个文档都只有一个段落,描述了过多的内容。
结论:
以句子为基本单位,它表达了完整的语义,只描述了某个特定的内容。
聚类
一个事件会由多方面内容组成。例如对于一个新闻事件:飞机失事。它必定会涉及到:现场情况、财产损失,人员伤亡、救援情况、后期处理等方面的内容。因此,我们需要基本单位进行分类。遗憾的是,我们无法预知一个事件将会由多少方面的内容构成。因此,这里将会提到一个算法:聚类,用于自动分类。
重要内容
重要的内容很好理解,大量文档都提及的内容,必定是重要的内容。
因此我们可以认为,一个句子,如果大量出现,那它必定是重要内容。
设计结论
- 将多文档拆分为句子集合。
- 句子集合聚类。
- 得到重要的类。
- 对类组合,得到摘要(删除类中相似的元素,得到重要元素)。
实现
对于第一步,做简单的字符串拆分处理,即可从文档集合得到句子集合。对于第二步,下文将详细描述聚类算法。对于第三步,一个类包含的元素越多,即表示这个类越重要。对于第四步,需要解决两个问题,什么是相似的元素,什么是重要的元素。
句子相似判断
句子相似度计算从上世纪50年代开始,至今已经有了不短的研究历史,中文句子相似度计算虽然起步较晚,但也有了不少的研究成果。对于相似度计算算法本文不做过多叙述(注意:这不代表此算法对于本文来说不重要)若要深入研究可查阅相关资料。本文将使用较为简单的句子相似度计算:编辑距离矢量。
聚类算法
基于相似度计算,我们可以提出下面的比较巧妙而简单的聚类算法。
聚类即是将相似的元素归类到一起,在此可以把句子集合抽象为一个无向图:句子为节点,为相似的句子节点连接一条边。
所有的子图即是最后的结果,但我们依旧要注意到许多单节点图和节点数量较少的图,这意味着它们可能不重要,因此无需考虑这些集合。
集合相似句子和重要句子
相似的句子很好处理,显然,若聚合中存在相似度很高的句子子集合,保留其中最重要的那条。
重要句子:对于集合中的任意一个句子A,A其他元素的相似值的总和记作Va。按照V值递减排序,即可得到靠前的重要句子。