句子压缩方法浅析
最近,因工作需要对中文句子压缩做了些粗浅尝试,初始的想法就是使用工具或者最简单的方法做句子压缩,但收效不佳,以下为是部分心得。
中文句子压缩的目的就是在不改变或尽可能最小改变原句的语义的情况下,将句子缩短。即让使句子变得简短,而不丢失重要思想。最简单的方法就是只抽取三重主谓宾,但是对主系表结构、主谓双宾结构的句子还是有些不方便。
对使用工具的方法,开始我尝试Stanford NLP,使用了句法分析然后做句法树的剪裁,剪裁规则是总结的模板。对英文效果尚可吧,但是中文效果实在一般,因为分词、句法分析的准确率在一步步降低,中文句子的句法树表示的不是很精确,尤其是口语化的句子。在之上通过规则裁剪出来的句法子树表述出的句子往往不能表述原句的基本意思。
语义角色标注(SRL)本是一种浅层的语义分析技术,标注句子中某些短语为给定谓词的论元 (语义角色) ,如施事、受事、时间和地点等。我也尝试使用了语义角色标注,通过谓词连接施事、受事形成简单句子,但结果也差强人意。这里要特别推荐一下Illinois Semantic Role Labeler(SRL),这是一款比较优秀的SRL工具包。
其实在句子一直存在:⑴缺乏大规模的平行语料库:现有语料库小,实际应用较难;⑵词法分析、句法分析的性能限制了压缩系统的性能(nlp基础任务需要提高性能);⑶缺乏有效的自动评测方法。
Clarke 和Lapata(2006)对Ziff-Davis 语料分析后发现该语料的缺陷不只是存在上文中我们提到的缺陷,他们的研究还发现:⑴人工标注的压缩结果与从文档摘要中抽取的压缩结果存在着本质的区别,抽取式的压缩结果压缩率过低,删除的词或短语过多,以至于无法表达源语句的大部分信息;⑵人工标注方式更倾向于删除单词,对于短语的删除较少。
他们在2008年提出:句子压缩的全局推断:整数线性规划方法(论文:《Global inference for sentence compression: An integer linear programming approach》),Courtney Napoles使用Java实现了上述方法(github:https://github.com/cnap/sentence-compression)。Napoles的代码中修正了Clarke和Lapata的模型)。由于原文使用了线性规划,Napoles使用了IBM公司的ILOG CPLEX(12.6 version)作为优化引擎。Napoles还使用了在English Gigaword 5上训练的基于SRILM的ARPA的三元语言模型,该模型是mtu的Keith Vertanen在NYT, APW等训练的,其单词量为12亿。
Napoles程序的效果在英文新闻语料上还是比较优秀的(注:此处的优秀仅表示个人感官,没有引入权威的评测方法),但是口语化的句子表现仍旧一般,由于没有合适的中文三元语言模型,未进行中文句子压缩的测试。
接着,尝试了神经网络来做生成式摘要的方法,说到这不能不请出:[Rush, 2015]《 A Neural Attention Model for Abstractive Sentence Summarization》,这篇Facebook用神经网络来做生成式摘要的开山之作,对后续工作影响深远,同时,Facebook Archive给出了开源版本(github: https://github.com/facebookarchive/NAMAS),可能是不知道是项目本身原因,还是Lua语言实现的原因这个项目的Star不足一千。客观的讲,其实本质上就是 conditional neural network language model,也就是要最大化概率
,还是有[Bengio, 2003]《A Neural Probabilistic Language Model》的影子,Rush使用了Bag-of-Words,CNN 和Attention-Based等三种 encoder 的方式,可以简称为 ABS,作者还尝试了与 extractive 的方法结合,就有了 ABS+ 模型。基本思路是除了考虑神经网络对当前词的预测概率,还新开个窗口,查找当前窗口内的词是否在原文中出现过,如果出现过,概率会增加。在 DUC-2004 和 Gigawords 的实验结果表名 enc1 < enc2 < enc3,基本都比之前非neural-network 的模型效果要好。ABS+ 的效果明显好于 ABS。
由于时间较短、研究尚欠,只走马观花式的做个大概,感觉中文句子压缩或者生成式摘要还停留在论文层次。借助于神经网络,中文自动生成取得了很大进步,但是在句子压缩和摘要生成领域还有漫长的路要走。