专题 | 自然语言处理学习笔记(二):encoder-decoder框架和attention mechanism两种研究

机器之心 2016-05-22

投稿

作者: 阿儁是个nerd


虽然有很多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


自动文摘最大的一个难点是评价问题,如何有效地、合理地评价一篇文摘的效果是一个很难的问题。


人工评价


一千个读者,有一千个哈姆雷特。


不同的人理解一篇文档会有很大的不同,基于人工评价的方法有类似于评价开放的文科辨析题目答案一样,需要从答案中寻找一些所谓的要点,计算要点覆盖率,打分。人工评价结果在很大程度上都是可信的,因为人可以推理、复述并使用世界知识将具有类似意思但形式不同的文本单元关联起来,更加灵活一些,但时间成本太高,效率太低。


自动评价


计算机评价效果,需要给定参考摘要作为标准答案,通过制定一些规则来给生成的摘要打分。目前,使用最广泛的是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的提出,是最首要的任务。


接下来,重点介绍近期abstractive summarization的一些研究情况。abstractive是学术界研究的热点,尤其是Machine Translation中的encoder-decoder框架和attention mechanism十分火热,大家都试着将abstractive问题转换为sequence-2-sequence问题,套用上面两种技术,得到state-of-the-art结果,2015年来已经有许多篇paper都是这种套路



Encoder-Decoder


Encoder-Decoder不是一种模型,而是一种框架,一种处理问题的思路,最早应用于机器翻译领域,输入一个序列,输出另外一个序列。机器翻译问题就是将一种语言序列转换成另外一种语言序列,将该技术扩展到其他领域,比如输入序列可以是文字,语音,图像,视频,输出序列可以是文字,图像,可以解决很多别的类型的问题。这一大类问题就是上图中的sequence-to-sequence问题。这里以输入为文本,输出也为文本作为例子进行介绍:



encoder部分是将输入序列表示成一个带有语义的向量,使用最广泛的表示技术是Recurrent Neural Network,RNN是一个基本模型,在训练的时候会遇到gradient explode或者gradient vanishing的问题,导致无法训练,所以在实际中经常使用的是经过改良的LSTM RNN或者GRU RNN对输入序列进行表示,更加复杂一点可以用BiRNN、BiRNN with LSTM、BiRNN with GRU、多层RNN等模型来表示,输入序列最终表示为最后一个word的hidden state vector。


decoder部分是以encoder生成的hidden state vector作为输入“解码”出目标文本序列,本质上是一个语言模型,最常见的是用Recurrent Neural Network Language Model(RNNLM),只要涉及到RNN就会有训练的问题,也就需要用LSTM、GRU和一些高级的model来代替。目标序列的生成和LM做句子生成的过程类似,只是说计算条件概率时需要考虑encoder向量。


这里,每一种模型几乎都可以出一篇paper,尤其是在这个技术刚刚开始应用在各个领域中的时候,大家通过尝试不同的模型组合,得到state-of-the-art结果。


该框架最早被应用在Google Translation中,paper详情可以见[1],2014年12月发在arxiv上。


Attention Mechanism


注意力机制在NLP中的使用也就是2015年的事情,也是从机器翻译领域开始。我们仔细看decoder中生成目标文本序列这部分,第一个word的生成完全依赖于encoder的last hidden state vector,而这个vector更多的是表示输入序列的最后一个word的意思,也就是说rnn一般来说都是一个有偏的模型。


打个比方,rnn可以理解为一个人看完了一段话,他可能只记得最后几个词说明的意思,但是如果你问他前面的信息,他就不能准确地回答,attention可以理解为,提问的信息只与之前看完的那段话中一部分关系密切,而其他部分关系不大,这个人就会将自己的注意力锁定在这部分信息中。这个就是所谓attention mechanism的原理,每个hidden state vector对于decoder生成每个单词都有影响,但影响分布并不相同,请看下图:




图中行文本代表输出,列文本代表输入,颜色越深表示两个词相关性越强,即生成该词时需要多注意对应的输入词。不同的paper在使用attention上会有不同的技巧,这里不一一赘述了。


Neural Summarization


使用deep learning技术来做abstractive summarization的paper屈指可数,大体的思路也类似,大概如下:


0、首先将自动文摘的问题构造成一个seq2seq问题,通常的做法是将某段文本的first sentence作为输入,headlines作为输出,本质上变成了一个headlines generative问题。


1、选择一个big corpus作为训练、测试集。自动文摘的技术没有太成熟的一个重要原因在于没有一个成熟的大规模语料。一般来说都选择Gigawords作为训练、测试集,然后用DUC的数据集进行验证和对比。


2、选择一个合适的encoder,这里可以选simple rnn,lstm rnn,gru rnn,simple birnn,lstm birnn,gru birnn,deep rnn,cnn,以及各种各样的cnn。不同model之间的组合都是一种创新,只不过创新意义不太大。用encoder将输入文本表示成一个向量。


3、选择一个合适的decoder,decoder的作用是一个language model,用来生成summary words。


4、设计一个合适的attention model。不仅仅基于encoder last hidden state vector和上文来预测输出文本序列,更要基于输入中“注意力”更高的词来预测相应的词。


5、设计一个copy net。只要是语言模型都会存在相同的问题,比如out-of-vocabulary词的处理,尤其是做新闻类摘要的生成时,很多词都是人名、机构名等专有名词,所以这里需要用copy net 将输入中的词copy过来生成输出。在生成中文摘要问题上,将words降维到characters可以避免oov的问题,并且取得不错的结果。


接下来想做的事情是将neural summarization相关的paper精读之后写成blog。


作者微博:阿儁是个nerd

微信公众号:paperweekly,每周会分享 1-2 篇 AI领域 paper 的摘译和评价。

博客地址,http://rsarxiv.github.io/ 。

作者还开发了一款产品 RSarXiv,一款好用的arxiv cs paper推荐系统,在 App Store 搜索 rsarxiv 即可。网站地址:http://rsarxiv.science/web。 


©本文为机器之心投稿文章,转载请联系本公众号获得作者授权

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@almosthuman.cn

投稿或寻求报道:editor@almosthuman.cn

广告&商务合作:bd@almosthuman.cn


本站仅按申请收录文章,版权归原作者所有
如若侵权,请联系本站删除
觉得不错,分享给更多人看到