本篇将会分享一篇用自动编码器(AutoEncoder)来做文档表示的文章,本文的结果会给自然语言生成、自动文摘等任务提供更多的帮助。本文作者是来自斯坦福大学的博士生Jiwei Li,简单看了下其简历,本科居然是北大生物系的,是一个跨界选手。本文的题目是A Hierarchical Neural Autoencoder for Paragraphs and Documents,于2015年6月放在arxiv上。
自动编码器之前接触的并不多,所以读了下Yoshua Bengio的deep learning一书补了一下知识。其实挺简单的,就是通过构造一个网络来学习x->x,最简单的原型就是h=f(x),x=g(h)。如果输入和输出的x都是完全一样的话,那么就没什么意义了。一般来说,后一个x会与前一个x有一些“误差”或者说“噪声”。而且自动编码器关注的是中间层h,即对输入的表示。如果h的维度小于x的维度,学习这个表示其实就是一个降维的过程。自动编码器有很多种类型,这里就不一一赘述了。
本文的贡献在于用分层LSTM模型来做自动编码器。模型分为三个,为递进关系。
1、标准的LSTM,没有分层。模型结构看起来和最简单的seq2seq没有区别,只是说这里输入和输出一样。看下图:
2、分层LSTM。这里分层的思想是用句子中的所有单词意思来表示这个句子,用文档中的所有句子意思来表示这个文档,一层接一层。看下图:
在word这一层,用一个标准的LSTM作为encoder,每一句中的最后一个word的hidden state作为该句的state,在sentence这一层,文档中所有的句子构成一个序列,用一个标准的LSTM作为encoder,得到整个文档的表示。decoder部分同样是一个分层结构,初始state就是刚刚生成的文档表示向量,然后先decoder出sentence这一层的表示,然后再进入该sentence对其内部的word进行decoder。
3、分层LSTM+Attention,这里的Attention机制和之前分享的是一样的,并且只在sentence这一层用了attention,参看下图:
在decoder部分中生成句子表示时,会重点注意输入中与该句子相关的句子,也就是输入中与之相同的句子。这里注意力的权重与Neural Machine Translation by Jointly Learning to Align and Translate 中的计算方法一样。
在实验中验证了本文模型的有效性,并且经过对比验证了第三种模型的效果最好,其次是第二种,最差的第一种,也与预期的相符。
昨天分享的也是一个分层模型,相比于单层的模型效果更好一些,这是否可以引起一些思考?本文也提到后面可以将本文的这种思想应用到自动文摘、对话系统、问答系统上。虽然seq2seq+attention已经在这几大领域中取得了不错的成绩,但如果改成分层模型呢,是不是可以取得更好的成绩?是不是可以将本文的input和output换作自动文摘中的input和target,然后用同样的方法来解决呢?我想应该是可以的。
另外,因为我个人比较关注自动文摘技术,自动文摘中abstractive类的方法一般都会涉及到Paraphrase(转述,换句话说),本文的自动编码器模型正好很适合做Paraphrase,输入一句话或者一段话,得到一个带有“误差”的语句通顺的版本。一种最简单的思路,用传统的方法提取出文中最重要的几句话(extractive式的方法),用Paraphrase处理一下得到文本摘要。
来源:paperweekly