最近几年在人工智能领域中大热的工程技术deep learning,将机器对图像,语音,人类语言的认知能力都提升了不少,前前后后也涌现出不少不仅仅是很cool而且是非常实用的应用,比如人脸识别,猫脸识别,无人车,语义搜索等等。其中,深度学习技术对图像和语音的影响最大,但对人类语言的理解(NLP)做的没有那么那么好。所以,不必太过鼓吹人工智能将会如何如何,民众的期待不应太过接近科幻电影,不然只能换来无尽的失望,从而导致寒冬的来临。
However, I would encourage everyone to think about problems, architectures, cognitive science, and the details of human language, how it is learned, processed, and how it changes, rather than just chasing state-of-the-art numbers on a benchmark task.
以上是一些简单的背景介绍,下面进入正题。
自动文摘(auto text summarization)是NLP中较难的技术,难点很多,至今并没有一个非常让人满意的、成熟的技术来解决这个问题。
想法
大家在查文献的时候,输入一个关键词之后,会返回一个paper列表,如果你只看paper的title可能会被一些标题党蒙骗,如果每篇paper都看abstract,时间会花太久,看着很烦。所以我在想,给rsarxiv添加一个功能,基于query的research survey生成。当你输入一个keyword之后,返回的结果不仅仅是paper列表,还有一个非常精炼的survey,你可以通过阅读survey了解到每篇paper的最核心工作,如果你感兴趣的话,可以进一步查看paper的具体内容。(比摘要还要精炼)
基于这个idea,开始逐步地了解自动文摘技术,所以这一系列blog的目的是为了记录我在学习自动文摘过程中的一些点滴心得。
介绍
第一篇blog对自动文摘做一个简单的介绍。
自动文摘技术应用最广的领域在于新闻,由于新闻信息的过载,人们迫切地希望有这么一个工具可以帮助自己用最短的时间了解最多的最有用的新闻(为什么不直接看标题呢?因为很多新闻为了哗众取宠,故意将标题起的特别吸引人眼球,但却名不副实),因此就有了Yahoo 3000w$$ 收购summly的交易。另外,搜索引擎也是应用之一,基于query的自动文摘会帮助用户尽快地找到感兴趣的内容。前者是单文档摘要技术,后者是多文档摘要技术,后者较于前者会更加复杂一些。
自动文摘出现的重要原因之一是信息过载问题的困扰,(当然个性化推荐系统是解决信息过载的另外一个好的办法)另外一个重要原因是人工文摘的成本较高。可以想象,如果计算机有能力写出一个topic下的综述paper,也就不需要survey作者去花大量的时间来读和写了。
自动文摘要解决的问题描述很简单,就是用一些精炼的话来概括整篇文章的大意,用户通过阅读文摘就可以了解到原文要表达的意思。问题包括两种解决思路,一种是extractive,抽取式的,从原文中找到一些关键的句子,组合成一篇摘要;另外一种是abstractive,摘要式的,这需要计算机可以读懂原文的内容,并且用自己的意思将其表达出来。现阶段,相对成熟的是抽取式的方案,有很多很多的算法,也有一些baseline的测试,但得到的摘要效果差强人意,对后者的研究并不是很多,人类语言包括字、词、短语、句子、段落、文档这几个level,研究难度依次递增,理解句子、段落尚且困难,何况是文档,这是自动文摘最大的难点。
自动文摘(二)
引:
自动文摘的方法主要分为两大类,extractive和abstractive。前者是目前最主流、应用最多、最容易的方法,后者相对来说更有一种真正人工智能的味道。还有另外一种分类方法是,单文档摘要和多文档摘要,前者是后者的基础,但后者不只是前者结果简单叠加那么简单。本文只介绍单文档的extractive方法。
Extractive (抽取式)Summarization
抽取式的方法基于一个假设,一篇文档的核心思想可以用文档中的某一句或几句话来概括。那么摘要的任务就变成了找到文档中最重要的几句话,也就是一个排序的问题。
排序是一个非常经典的问题,也是一个非常多解决方案的问题。比如:Google根据用户的query生成的网页列表,就是一个排序之后的结果;再比如Amazon的推荐系统推荐给用户的N个可能感兴趣的产品,也都是通过算法做了排序输出的。
排序针对不同的问题,需要提出不同的指标,比如有的应用关心的是相关性,有的关心的是时效性,有的关心的是新颖性等等,在这个层面上来讨论排序,会有不同的模型。
一般的抽取式摘要问题,会考虑相关性和新颖性两个指标。相关性是指摘要所用的句子最能够代表本文档的意思,而新颖性是指候选句子包含的冗余信息要少,尽可能每句话都可以独立地表达出一种独立的意思。
下面简单介绍一些思路。
1.预处理
NLP任务的标准流程中第一步都是预处理,将拿到的文本做分句,这里有两种可能性,一是用句点或者其他可以表达一句话结尾的符号作为分隔,另外一种是用逗号作为分隔符获取句子。
2.词、句表示
这一步的思路是:将词、句子表示成计算机能理解的量,然后计算一些指标进行排序。这个地方也是各种算法、模型最大的不同之处:
(1)Bag Of Words。词袋模型将词定义为一个维度,一句话表示成在所有词张成的空间中的一个高维稀疏向量。
(2)TFIDF。可以理解为带权重的词袋模型,计算出每个词的TFIDF值,作为该词的权重。
(3)LDA/LSI。将整篇文档利用TFIDF模型表示成一个矩阵,做SVD降维分解,生成两个矩阵,一个是文档-话题矩阵、另一个是词-话题矩阵。得到词-话题矩阵之后,可以得到句子-话题矩阵。
(4)Word Embedding。Tomas Mikolov提出的Word2Vec,用了很多技巧和近似的思路让word很容易地表示成一个低维稠密向量,在很多情况下都可以达到不错的效果。词成为了一个向量,句子也可有很多种方法表示成一个向量。
3.排序
这里介绍两种常见的方法。
(1)基于图排序
将文档的每句话作为节点,句子之间的相似度作为边权值构建图模型,用pagerank算法进行求解,得到每个句子的得分。
(2)基于特征
特征工程在深度学习火之前是解决特定领域问题的良药,这里用到的特征包括:
1)句子长度,长度为某个长度的句子为最理想的长度,依照距离这个长度的远近来打分。
2)句子位置,根据句子在全文中的位置,给出分数。(比如每段的第一句是核心句的比例大概是70%)
3)句子是否包含标题词,根据句子中包含标题词的多少来打分。
4)句子关键词打分,文本进行预处理之后,按照词频统计出排名前10的关键词,通过比较句子中包含关键词的情况,以及关键词分布的情况来打分。
代表算法是TextTeaser。
4.后处理
排序之后的结果只考虑了相关性并没有考虑新颖性,非常有可能出现排名靠前的几句话表达的都是相似的意思。所以需要引入一个惩罚因子,将新颖性考虑进去。对所有的句子重新打分,如下公式:
a score(i) + (1-a) similarity(i,i-1), i = 2,3,….N
序号i表示排序后的顺序,从第二句开始,排第一的句子不需要重新计算,后面的句子必须被和前一句的相似度进行惩罚。
这个算法就是所谓的MMR(Maximum Margin Relevance)
5.输出
输出的结果一般是取排序后的前N句话,这里涉及到一个非常重要的问题,也是一直自动文摘质量被诟病的问题,可读性。因为各个句子都是从不同的段落中选择出来的,如果只是生硬地连起来生成摘要的话,很难保证句子之间的衔接和连贯。保证可读性是一件很难的事情。
这里有一个取巧的方法,就是将排序之后的句子按照原文中的顺序输出,可以在一定程度下保证一点点连贯性。
路漫漫其修远兮,吾将上下而求索
参考:
[1] TextRank源码阅读笔记
https://gist.github.com/rsarxiv/11470a8d763b2845f671061c21230435
[2] TextTeaser源码阅读笔记
https://gist.github.com/rsarxiv/4e949264b3bda98828b84cf2991e57e4
自动文摘(三)
引:
- 蜀道之难 难于上青天
虽然有很多SaaS提供Summarization的服务,虽然有很多App尤其是新闻类App标榜自己拥有多么牛的技术做Summarization,我们还是不得不承认自动文摘的技术离一个高水平的AI还有一段距离,很长的一段距离。都说自动文摘很难,到底难在哪里?
- Abstractive
上一篇博客分享了Extraction方法的一些思路,本篇简单聊一点Abstractive的想法。Abstractive是一个True AI的方法,要求系统理解文档所表达的意思,然后用可读性强的人类语言将其简练地总结出来。这里包含这么几个难点:
(1)理解文档。所谓理解,和人类阅读一篇文章一样,可以说明白文档的中心思想,涉及到的话题等等。
(2)可读性强。可读性是指生成的摘要要能够连贯(Coherence)与衔接(Cohesion),通俗地讲就是人类读起来几乎感觉不出来是AI生成的(通过图灵测试)。
(3)简练总结。在理解了文档意思的基础上,提炼出最核心的部分,用最短的话讲明白全文的意思。
上述三个难点对于人类来说都不是一件容易的事情,何况是发展没太多年的自然语言处理技术。人工智能领域中AI能够领先人类的例子很多,包括前不久很火的Alpha狗,图片识别,主要是利用计算机远强于人类的计算能力,但也有很多的领域,AI离人类的水平还有很远,比如paper的survey,summarization,机器翻译等等。
近几年随着Deep Learning的火爆,研究者们利用一些最新的研究成果来做summarization,比如attention model,比如rnn encoder-decoder框架,在一定程度上实现了abstractive,但还是处于研究初期,效果还不算很好。
- Evaluation
自动文摘最大的一个难点是评价问题,如何有效地、合理地评价一篇文摘的效果是一个很难的问题。
(1) 人工评价
一千个读者,有一千个哈姆雷特,不同的人理解一篇文档会有很大的不同,基于人工评价的方法有类似于评价开放的文科辨析题目答案一样,需要从答案中寻找一些所谓的要点,计算要点覆盖率,打分。人工评价结果在很大程度上都是可信的,因为人可以推理、复述并使用世界知识将具有类似意思但形式不同的文本单元关联起来,更加灵活一些,但时间成本太高,效率太低。
(2)自动评价
计算机评价效果,需要给定参考摘要作为标准答案,通过制定一些规则来给生成的摘要打分。目前,使用最广泛的是ROUGH系统(Recall-Oriented Understudy for Gisting Evaluation),
基本思想是将待审摘要和参考摘要的n元组共现统计量作为评价依据
然后通过一系列标准进行打分。包括:ROUGH-N、ROUGH-L、ROUGH-W、ROUGH-S和ROUGH-SU几个类型。通俗地将就是通过一些定量化的指标来描述待审摘要和参考文摘之间的相似性,维度考虑比较多,在一定程度上可以很好地评价Extracive产生的摘要。
这里涉及到一个重要的问题,就是标注语料问题。自动评价需要给定一系列文档已经他们的参考文摘,用来测试不同的算法效果。TAC(Text Analysis Conference)和TREC(Text REtrieval Conference)两个会议提供了相关的评测数据集,自动文摘领域的paper都是以这些数据集为baseline,与其他paper的算法进行对比。会议的数据集毕竟有限,新的领域中做自动文摘需要建立自己的数据集作为标准。
现有的评价标准存在的一个重要问题在于没有考虑语义层面上的相似,评价extractive还好,但评价abstractive就会效果不好了。Deep Learning其实就是一个representation learning,将世界万物表示成数字,然后作分析。在词、句子甚至段落这个层面上的表示学习研究的非常多,也有很多的state-of-the-art的结果,所以做语义层面上的评价并不难。
重要性
评价对于一个研究领域非常重要,是牵引这个领域前进的首要因素,评价需要制定标准,标准的好坏关系到这个领域的研究质量,尤其是研究者们的paper质量,因为大家相互比较算法的优劣就十分依赖这样的标准。
标准数据集的建立以及baseline的提出,是最首要的任务。
完整内容请点击“阅读原文”
转自:大数据挖掘DT数据分析