赞
踩
将一句话的每个字拆开,用x1——xT来表示,传统的RNN模型,输入的数据是一个x1数据,输入到一个ceil中进行计算,得到一个输出,将第一个ceil得到的结果输入到第二个ceil中进行计算。通过一个个节点的计算,最终输出结果是包含x1到xT整个输出结果的数据ht,最后通过一个softmax进行分类。
这样的结构不需要考虑句子的长度,句子的长度不影响整体的向量的维度。RNN可以处理变长的句子
LSTM是在RNN的基础上,添加了输入门,遗忘门,输出门。
LSTM计算一个损失函数,是通过一个最小化交叉熵的函数实现。通过一个累加完成公式的前半部分的计算,N为一个样本的数量,C代表一个类别的数量。如果是4分类别,那么这个C就是4。y为真实标签,y帽代表一个预测的标签。
共享权重模型,一个1对多的任务模型
不同的任务的输入和输出可能不同,输入层和输出层还达不到共享,但是隐藏层是可以完成模型共享。
论文作者针对中间层的共享权重的方法,提出三种共享权重的方法。
中间层是一个共享权重的一个层,上面和下面分别是初入的两个任务。同时进行两个任务的输入计算,两个任务都输出,分别做两个任务相应的softmax,然后映射到对应的类别。
x1m表示m任务的数据集,x1n表示n任务的数据集。输入一个xm还需要加上一个xts的数据,xts一开始是一个随机的得到的,不断去训练,不断的去调整这个结构,最后追加到数据当中去。
比如,x1m作为输入数据是一个1x300的向量,x1s也是一个1x300的向量。那么最终数据的数据 x帽=x1m 拼接 x1s 就是1x600的向量。
中间的LSTM部分是一个共享的模型,输入是不同的,走的softmax也是不同的,因为不同任务可能是不同的类别任务。 词向量的embeding也是共享的。不同任务用到的是同一个词向量模型。
用到的是两个LSTM的结构,上下两个。每个任务都拥有自己的LSTM层,两个任务之间不会有一个太多的影响。
两个输入并没有像第一个模型一样,添加了一个随机的xts,但是在下一个节点计算的时候,不仅用到了自己的任务上一步得到输出,还用到了另一个任务得到的输出结果,参与了下一步的计算。两个输出会被混合的利用到,这样就可以应用到其他数据集上学习到的一些特征。这样后作者任认为可以捕获到其他任务里面的信息,模型效果有提升。
最终的结果是c帽,是混合了两个任务的结果,然后加上一个wx的计算结果,需要经过tanh的激活函数。
需要经过累加得到两个任务的结果,mn分别是不同的任务,U是矩阵,h是上一个结果的输出,g另一个节点的累加结果。
每个任务都有一个LSTM,两个部分混合进行运算,改造LSTM进行运算。是一对任务同时进行,每个任务两两组合。
和其他模型一样,也是两个任务一起来,共享权重也是中间,是一个单独的共享权重。中间是有两个箭头,分别是前后双向的LSTM。
一共三个LSTM,每个任务自己的LSTM,还要一个中间的BiLSTM。
在输入的x1首先是进入自己任务的LSTM,还会copy一份输入到共享层去。共享层就有两个输入数据,一个是task1的x1,还要另一个任务的task2的输入x,运算出一个结果。经过双向的LSTM,前向得到一个结果ht和后向得到的ht,最终的输出是前向和后向得到的一个结果,就是将两个向量进行一个拼接操作。
输出的C帽,是由3个部分的组成,一个wx是自己任务下的LSTM中cell得到的结果,加上gm,和gs—m的结果
gm是上一层的结果计算公式得到的结果
gs_m是共享层计算运算到的结果。
通过共享层的一个信息,混入到一个输出结果中去,并且还加上了另外一个task的内容,最终得到一个分类结果。
第一个模型,共享的一方面是输入的可训练向量,另一方面是共享的是LSTM的共享层,两个任务共用了一个LSTM的层。所以在最后一个softmax的结果是包含了两个任务的一个信息。一个是他的层,一个是学习到的特征向量。
模型二,没有直接共享LSTM层,每一个任务都有自己的LSTM层,她们之间不用,每个时刻任务进行的时候,会混搭另一个另一个任务的隐藏层的输出,做一个运算,作为输入。
第三个模型,共享了中间共享层的输输出。
将最后一层得到的结果进行映射,最后使用的是一个全连接层完成映射工作,其中w代表的是一个第m任务上的权重。h代表第m个任务最后的输出 ,b是初始化的权重,再经过softmax将结果映射到0-1之间。最后得到的就是每个分类结果的概率值。每个分类结果的值加起来的和是1。取当中概率值最大的为当前类别
通过w,b矩阵,将前面学到的特征映射到概率上去。
损失是通过交叉熵计算出来,作者指出 通过一个线性的变换将所有的所有任务的loss,全部累加到一起。M代表有多少个任务,m代表当前的数据集,y帽是预测标签,和真实的 类别进行计算得到当前任务的loss。
λm是权重,作者认为不同任务之间的权重值应该是不一样的,取决于样本的数量和样本的类别数量来权衡。
怎么选数据和选任务
先随机选择任务,挑出一个任务,基于选好的任务,随机选择训练样本,去更新权重,计算权重,求梯度,更新参数,不断的选择任务,随机选择样本再去更新。
模型1和模型3,中间的共享层进行一个优化的过程。通过调参,来调整共享层的权重。
共享层可以用所有的数据进行预训练,通过无监督的方法,预训练全部的数据,训练一个词向量和共享层的权重,第三个模型就可以获取到所有数据的一个信息。基于预训练的一个信息,再去构建我们的第三个模型,作为与训练权重加载进去,效果更好。
最后的两个数据集没有划分训练集和测试集,所以需要我们自己手动划分一下。
词向量模型上,选择的是训练好的词向量模型,对于没有验证集的数据集做了10折的交叉验证,词向量的大小设置为64维度,LSTM的隐藏层大小为50个,学习率为0.1,正则为10的负的5次方。
分别比较了单任务与多任务的效果对比,验证集的微调后FineTuning结果提升明显
每个任务两两组合,4个任务,就有6种的组合结果,对比了单个模型的效果,对比多个模型的效果提升。
单个任务的结果就是一个基线,作为对比。
组合效果,和数据的来源有一定的关系,同类型的数据组合下,精确度会更好。
加入LM的改进,效果有一定的提升,最终再做一个微调整后,大概能提升2.8的提升,多任务是提升1.4%。
最后作者做了,相较于对比当时主流的模型。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。