【Don’t Give Me the Details, Just the Summary! Topic-Aware Convolutional Neural Networks for Extreme Summarization】
Introduction
这篇文章的思路好像在什么地方曾经见到过,就是其Topic的处理的思路有似曾相识的感觉,可能是之前看文本分类的时候见到过,之前看一篇写ChatBot的也是使用这种手法。
文章主要讲的还是一个自动摘要的任务的解决方案,大家如果看过我之前的那篇笔记就知道自动摘要的任务一般会有两种解决方案,第一种是Extractive 第二种是Abstractive ,这篇使用的思路会更像是Abstractive一些。模型的基本组件是CNN(感觉Cohen很喜欢用CNN啊),然后还是用龙哥ROUGE作为评价标准。
Model
Convolutional Sequence-to-Sequence Learning for Summarization
与机器翻译这种一对一的任务不同,Document Summarization是从大的文档之中精简(Distill)信息,会更加的复杂,也会很容易造成信息的缺失。所以作者使用了卷积结构来处理文档的信息,其认为卷积的结构有两种主要的优点
- 与RNN这类神经网络不同,卷积神经网络可以通过Stack的方式处理更长的文本长度
- 可以从文本之中获取出来层次特征(Hierarchical Feature),使得可以表示长距离的依赖。这个概念有点绕,我简单的表达一个个人的观点,RNN无法捕捉长距离的依赖是由于梯度的消失或者爆炸,而梯度的出现问题的根源来自于序列长度太长了,这时候如果CNN捕捉了信息,由于是卷积操作,所以势必比RNN之中的序列的长度要短,也就解决了梯度的问题。
令$D$表示文本的集合$(w_{1},w_{2},\cdots,w_{m})$,将$D$Embedding进一个分布式空间$x = (x_{1},x_{2},\cdots, x_{m})$,同样的,也将词语的位置用向量表示为$p =(p_{1},p_{2},\cdots,p_{m})$,这里没说这个位置向量是怎么获得的,姑且以为是Attention is All you need里面的那样的获得的。令$t_{D}\in R^{f}$表示文档$D$的主题分布,而对于每一个单词的主题分布记作$t’ = (t_{1}’,\cdots, t_{m}’)$,其中$t_{i}’$代表第$i$个单词的主题分布。
那么将上面的词语信息,位置信息,主题信息混合在一起,可以得到一个综合的表达$e_i$
$$e_{i} = [(x_{i}+p_{i}) ; (t_{i}’ \odot t_{D})]$$
而将$e_{i}$丢进一个GLU(Gate Liner Unit)之中,得到了文档的向量化的表达$z^{u}$.
而对于Decoder来说,其和Encoder的结构差不多,只不过是这里的$t_{D}$没有Point-Wise的与$t_{i}$相乘,这个也是正常的,因为在Decoder本身就是要去预测这些单词,那怎么获得每一个单词的信息呢?还有一个点就是在Decoder之中大家可以注意一下他的卷积层是蓝色的直角三角形,这就意味着,在当前的状态仅仅是依靠之前的步数的信息,而不是和Encoder一样利用上下文的信息,而这也是很很正常的事情,因为Decoder无法获得之后的信息嘛。其输出的中间层为
$$g_{i} = [(x_{i}’ + p_{i}’);t_{D}] \in R^{f+f”}$$
然后就是计算Attention了,这里的Attention称为是Multi-Hop Attention,为什么叫这个名字呢,因为计算的过程有点像是Attention会随着时间不断的Hop,是一个动态的过程,而不是像普通的Attention的静止的,这个的实现方法是先去计算
$$d_{i}^{l} = W_{d}^{l}h_{i}^{l}+b_{i}^{l}+g_{i}$$
其中的$l$代表的是第$l$层的Decoder,$W,b$都是参数矩阵。
然后计算Attention
$$a_{ij}^{l} = \frac{\exp(d_{i}\cdot z_{j}^{u} )}{\sum_{t=1}^{m} \exp(d_{i}^{l}\cdot z_{t}^{u})}$$
其中的$z^{u}_{j}$是Encoder最后一层的$z$的第$j$个元素。计算出来了Attention之后,得到Context Embedding
$$c_{i}^{l} = \sum_{j=1}^{m}a_{ij}^{l}(z_{j}^{u},e_{j})$$
将这样的一个$c^{L}$与$h^{L}$相加之后得到真正的$h^{L}$然后开始生成下一个单词
$$h_{i}^{L} = c_{i}^{l}+h_{i}^{L}$$
$$p(y_{i+1}|y_{:i},D,t_{D},t’) = softmax(W_{0}h_{i}^{L}+b_{o})$$
这样得到的新的$y_{i+1}$再加进Decoder之中的下一个状态,然后再卷积,残差连接……重新循环一遍。直至输出最后一个[END]标签(应该会生成一个END标签表示写完了吧,没看源码请原谅。)
Comments
又是蛮难理解的一篇文章,里面的Decoder的运作机理自己尝试理解了一会才弄明白,和其他的模型的Decoder的机理有点差异吧,果然人都是按照自己的过去的经历思考问题的。这里的Decoder更像是一步一步的生成东西,而并非是哗啦啦把Hidden State丢进一个Generator生成什么东西。文中使用的多层CNN代替了RNN,想不到效果似乎还真好,自己也不该有这种限定啊,认为序列任务还是RNN和其变种的天下。其实Transformer已经证明了这一点,不使用序列的网络结构做文本相关的任务也可以获得很多很棒的结果。
说到Transformer,这里的处理思路和Transformer还是非常类似的,同样的Position Embedding,同样的Encoder-Decoder(BERT之中的E-D架构还要更加常规一些)。Cohen这篇文章也其实就是在FaceBook那篇文章的基础上加了一个Topic-Aware,大家可以和Facebook的那篇《Convolutional Sequence to Sequence Learning》对比着读。
Reference
Comments
Leave a Comment