反卷积网络在文本表征方面的应用

来源:互联网 发布:海湾编程软件 下载 编辑:程序博客网 时间:2024/05/16 06:18

这篇博客主要参考了2017年NIPS会议的paper《Deconvolutional Paragraph Representation Learning》。首先值得一提的是,这篇文章是反卷积网络在文本领域的第一篇应用,(反卷积网络在2010年在paper《Deconvolutional Networks》中提出的,主要用于图像处理领域,当一个原始的图像经过卷积和反卷积操作后,就能够提取出图像中的边缘特征)。

读这篇博客之前首先要清楚反卷积操作和卷积操作的具体细节,其实说起来很简单:反卷积操作就是卷积操作的反向过程。如果非常理解卷积操作的话,应该很清楚一个输入是如何通过卷积的特殊方式转化成输出形式的,那么反卷积就是把输出和输入颠倒过来,同时保持输入和输出对应单元元素的对应关系不变,这就是反卷积过程。如果一个原始的输入信号通过一层一层的卷积操作最终变成了一个向量的形式,同样可以通过对称的反卷积方式一层一层的变换回去再变成和原始输入信号同等维度的输出。

这篇论文的整体架构如下所示:
这里写图片描述
从图中可以看出这个架构由两个大部分组成,分别是Convolution Layers和Deconvolution Layers两个部分组成,同时不难看出这两个部分中的卷积和反卷积操作设置关于中间线成镜面对称。输入层的矩阵表征的是一个句子,句子在经过了padding之后长度为60,词向量的维度是300,在经过了两层卷积之后变成了500维的lantent向量,最后在经过对称的反卷积操作重新扩展回去,变成和输入层一样维度的矩阵。在这个过程中有一个细节需要注意,就是在输入的词向量和输出的词向量都进行了归一化的处理,这样对于损失函数来说每一个词语的权值都大致是相当的,它的归一化方式是以每一个词语为单位,即使得每一个词向量的模为1。(反正这点我有一点点的质疑,不应该以词向量的每一个维度为单位进行归一化更合理吗?这个以后可以继续进行探究。)

从这个过程中,我们不难看出,第一阶段的卷积操作完成了对原始句子的编码操作(Encoder),第二阶段的反卷积操作完成了对原始句子的解码操作(Decoder),我们的目标就是要使得输入值和输出值越相似越好,那么就有如下的损失函数:
p(wt=v)=exp(τ1Dcos(wt,We[v]))vVexp(τ1Dcos(wt,We[v]))
其中wt是输出值,v是输入值,Dcos(x,y)是两个向量夹角的cos值,定义为<x,y>||x||.||y||
可以看出p(wt=v)表示的是输出的wt是输入v词的概率,我们要做的就是最大化这个概率,那么对于全局的语料来说我们要做大化的式子就如下所示:
L=dDtlogp(wd=v)

到目前为止整个网络的无监督部分就已经讲解完了,作者还那这个基于反卷积的Decoder和基于RNN的Decoder进行了比价,结论就是:这个基于反卷积的Decoder在生成信号的时候是一下子直接生成了所有的输出信号,这些信号都是基于那个latent vector h;但是基于RNN的Decoder就不一样了,它是一步一步生成的输出信号,每一次只生成一个,而且每一个输出信号都依赖于上一个输出的信。当然这两种方式各有优点,基于RNN的方式一般用在language generation的场景,因为这样方式生成的句子更加的连贯(毕竟当前时刻的输出信号也收到了上一时刻的输出信号的影响),但是缺点就是如果某一时刻的输出信号错了,后面的依赖于当前输出信号的部分都将会出错。基于反卷积的方式就不一样了,它不存在前后的依赖性,一下子生成输出,它对于更长的文本有更好的适应能力,适合用在文本分类和文本总结的场景中。

下面就以文本分类为例,来说明一下如何利用上述无监督训练的网络来帮助进行文本的分类训练。因为在进行文本分类的时候,是需要label数据进行训练的,但是往往有label的数据非常有限,如何利用刚才无监督的网络进行增强,下面就是一种解决方案:
把上述卷积-反卷积架构中的latent vector h之前的卷积部分其实和进行文本分类的主要部分是完全一样的,只不过在文本分类的场景应用中,在latent vector之后跟的是softmax分类部分,这样就可以把这两种任务的损失函数写在一起达到联合训练的效果:
Ltotal=αdDl+Dutlogp(wd=t)+dDlLsoftmax
其中Dl代表了有label的数据集,Du代表了无label的数据集,Lsotmax 代表了分类任务的损失函数, α是一个控制两个比例的系数,它在训练中是一个动态调整的值,从1一直减少直到一个预先设定的最小值αmin。这样肯定比单独使用有label的数据集能取得更好的效果。

阅读全文
0 0