文章目录
一、NN之前的摘要生成技术简述
1.1 抽取式模型
从原始文本中提取单词和单词短语来创建摘要。
1.1.1 pyTeaser
pyTeaser 是Scala项目TextTeaser的Python实现,它是一种用于提取文本摘要的启发式方法。
把句子进行排序,然后选择和文档最相关的Top5句子作为摘要。句子排序规则包括如下四个方面:
- 文档和句子标题共有的单词数。
- 关键词:文本进行预处理之后,按照词频统计出排名前10的关键词,通过比较句子中包含关键词的情况,以及关键词分布的情况来打分。
- 句子在文中的位置:比如每段的第一句是核心句的比例大概是70%
- 句子长度:定义理想句子长度,然后给每个句子按照离这个长度的远近打分。
1.1.2 LatentSemanticAnalysis
这篇论文我专门写了一篇博客,请移步论文阅读-基于LSA的摘要生成
1.1.3 TextRank
TextRank 算法是一种用于文本的基于图的排序算法,通过把文本分割成若干组成单元(句子),构建节点连接图,用句子之间的相似度作为边的权重,通过循环迭代计算句子的TextRank值,最后抽取排名高的句子组合成文本摘要。本文介绍了抽取型文本摘要算法TextRank,并使用Python实现TextRank算法在多篇单领域文本数据中抽取句子组成摘要的应用。
计算句子向量之间相似矩阵,再转为图结构,其中节点是句子,边是句子之间的相似性得分。
1.1.4 分类模型
将摘要生成视为一个分类模型:摘要中是否要包含这句话。
特征
这篇文章首先是找出四类特征:
-
surface:句子的外在特征 -
content: 句子中词本身代表的信息 -
event: 句子中包含的event的特征 -
relevance: 这个句子和其他句子相关性
模型
先通过监督学习的方式,找到有效的特征,训练好监督模型。这种方法需要很多标注数据。为了解决这个问题,又引入了半监督学习的方式,即每轮学习,将未标注样本通过分类器得到label,然后和已标注数据一起重新进行训练.
训练过程伪码如下:
1.1.5 基于序列的HMM模型
1.2 生成式模型
这种方法的核心就是找出文章的关键信息并将之编码进特征向量组,然后再通过NLG系统生成摘要。早期的生成方法都是通过先验知识预定义出一些摘要模板,通过填槽和平滑技术完成摘要生成任务。
二、基于神经网络的摘要生成
大部分的基于NN的生成任务基本分成三步:
- 词向量编码
- 句子或者文章编码
- 上述向量喂入一个模型,对抽取式方法来说,就是句子排序或选择;对生成式方法来说,就是生成
神经网络可被用于上述三步的任何一个过程,步骤一中,可以使用Word2Vec,CW,GloVe这些编码模型;步骤二中,可以用CNN或者RNN提取句子或文章特征;步骤三中可以将神经网络作为regressors进行排序或选择(抽取式)或作为decoders进行生成(生成式)
2.1 抽取式
抽取式的摘要生成任务主要是通过各种基于选择的方法,所以有两个需要解决的问题,一是如何对句子进行表示,二是如何选出最合适的句子作为摘要,既要考虑覆盖也要考虑冗余。
这里会按时间顺序介绍五种抽取式模型,每种模型都会介绍句子表示和句子选择方法。
2.1.1 连续向量空间模型
原文是Extractive summarization using continuous vector space models
这篇论文中,句子是通过unfolding Recursive Auto-encoder (RAE)进行编码的。首先句子变成一个二叉树结构(比如通过句法分析得到一棵二叉树),这样节点维度是一样的。
编码过程为,对于一个叶子节点,将其左子节点右子节点拼接,然后进行一个线性变换,再进行一个非线性变换,得到该节点的向量。
这种句子编码方法在效果上可能并不是最好的,也需要大量的标注数据,但是速度很快。
[recursive RAE开源代码](http://nlp.stanford.edu/ socherr/codeRAEVectorsNIPS2011.zip) 没有下载下来
这篇论文中,作者将如何选择摘要集 视作一个最优化问题:最大化句子的差异性,同时又要保证和输入文本的覆盖度。这是一个 NP难问题,但是可以通过模函数来解决,即只要分别解决多样性和覆盖性两个函数,这个问题就可以解决。
这个问题LinandBilmes在2012年解决了,
2.2.2 CNNLM
YinhePei在2015年提出用CNN来进行句子编码,主要是通过窗口为5 的context进行卷积,再进行池化操作,抓取句子中的重要语义信息作为句子编码。
在句子选择问题上,作者仍然将之视为一个最优化问题。
是将句子向量进行了相似性计算的结果矩阵
(未完待续。。。)