分类和抽取的联合模型

最近在作意看法释挖掘项目中解释性意见分类任务,尝试将解释性意见分类和意看法释抽取任务联合训练,在这里对最近的工做作一下整理。由于是实验室的天然科学基金项目中的子任务,项目数据暂时还未公开,在这里就不展开介绍具体任务了。性能

 

1、思路优化

解释性意见句的类别是依据意见句中的意看法释的内容进行定义的,那么在对句子进行分类以前,若是模型获取到了意见句中的意看法释信息,是否有助于模型进行分类呢?spa

一样的,意看法释抽取任务是在乎见句中识别句中的意看法释片断,那么在识别片断以前,若是模型获取到了句子的类别特征,是否有助于模型进行片断识别呢?设计

基于上述的思考,我提出将这两个任务放在一块儿训练,创建联合模型获取更多的特征用于训练,但愿能同时提升这两个模型的效果。调试

 

2、设计模型排序

首先,我须要获得这两个任务的pipeline模型的性能,做为接下来进行联合模型训练时的参照。这里就选用单层的BILSTM模型做为pipeline模型。ip

而后,联合训练的话大致上有这么两个思路:it

1. 先训练分类模型,而后将分类的结果做为新的特征加入片断识别模型中;pip

2. 先训练片断识别模型,而后将识别出的片断的模型隐层信息做为新的特征加入分类模型中。class

其中,分类模型和片断识别模型能够共用一个BILSTM,模型之间能够共享参数,也可使用不一样的BILSTM,两个模型分别训练参数。

 

3、实验状况

针对前面提到的几点思路,设计了如下几个实验:

3.1 提取分类特征用于片断识别

实验尝试一:
joint-model-5-sgd-200:分类和片断识别使用的是不一样的LSTM,用的是SGD优化器,将分类的预测结果embedding以后加入片断识别中。在训练了500轮以后,片断识别再加入分类提取的特征;
joint-model-3-adam:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器;
joint-model-4-adam-20:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,分类的特征映射为20维的向量,做为新特征加入片断识别中;
joint-model-4-adam-50:将分类的特征映射改成50维,其余设置与上个模型相同;
joint-model-5-adam-20:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,分类的预测标签embedding以后,做为新特征加入片断识别中,embed_size设为20;
joint-model-5-adam-50:将embed_size设为50,其余设置与上个模型相同;
 
结果分析:
(1)joint-model-3-adam模型的片断抽取距离pipeline还有2个点,形成这种状况的缘由多是种子还未固定,由于原数据是按类别排序的,太整齐,因此只是在每一个程序训练以前打乱了1000次,以后每次运行再打乱1次,若种子未固定,则随机的状况会差异比较大。可是鉴于分类的性能和pipeline一摸同样,这个缘由可能并不成立。还须要再排查一下缘由。
(2)受到AAAI分词论文的影响,调了一下加入特征的维度,对比joint-model-4-adam-50和joint-model-4-adam-20模型,都运行到180+轮时,50维的性能是比20维的好的,因此能够继续调试维度,加大维度可能能提升性能;
(3)对比joint-model-5-adam-20和joint-model-5-adam-50模型,发现都运行到170+轮时,50维的性能就不好了,20维的性能还算正常范围,结合joint-model-5-sgd-200模型的运行状况,发现若加入的是embedding特征,可能维度小一些较好;
(4)对比(2)和(3)分析的状况,发现针对不一样的特征融合方法,调参仍是不太同样的,多是由于模型5中加入的是全新的embedding向量,这种随机初始的可能会形成很大的噪声影响,因此维度要小一些,而模型4中加入的是lstm以后的结果,二者不太同样。这是个人一些猜想。
 
实验尝试二:
根据以前的实验状况,对模型进行了一下调整,保存pipeline的最好模型,做为pretrain的参数导入模型,并且在分类上再也不backward,提取分类特征用于片断识别。
joint-model-4-adam-20:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,分类的特征映射为20维的向量,做为新特征加入片断识别中;
joint-model-4-adam-100:将分类的特征映射改成100维,其余设置与上个模型相同;
joint-model-5-adam-16:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,分类的预测标签embedding以后,做为新特征加入片断识别中,embed_size设为16;
 
实验尝试三:
保存了pipeline的最好模型,做为pretrain的参数导入模型,在分类上继续backward,提取分类特征用于片断识别:
joint-model-4-adam-10:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,分类的特征映射为10维的向量,做为新特征加入片断识别中;
joint-model-5-adam-8:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,分类的预测标签embedding以后,做为新特征加入片断识别中,embed_size设为8;
 
实验尝试四:
分别运行了pipeline模型,保存了pipeline的最好模型,在联合模型中,保存的最好模型做为pretrain的参数导入模型,在分类上继续backward,提取分类特征用于片断识别:
joint-model-4-adam-20:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,分类的特征映射为20维的向量,做为新特征加入片断识别中;
joint-model-4-adam-50:分类的特征映射为50维的向量;
joint-model-4-adam-80:分类的特征映射为80维的向量;
joint-model-4-adam-100:分类的特征映射为100维的向量;
joint-model-5-adam-16:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,分类的预测标签embedding以后,做为新特征加入片断识别中,embed_size设为16;
joint-model-5-adam-50:embed_size设为50;
joint-model-5-adam-80:embed_size设为80;
joint-model-5-adam-100:embed_size设为100;
 
3.2 提取片断特征用于分类模型
将pipeline保存的最好模型做为pretrain的参数导入模型,在片断抽取任务上继续backward,提取片断特征用于分类:
joint-model-7-adam:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,将预测的片断的lstm输出,通过max pooling以后和分类的lstm输出cat到一块儿,最后预测分类结果;
joint-model-8-adam:分类和片断识别使用的是不一样的LSTM,用的是Adam优化器,将预测的片断的lstm输出作lstm的相减操做,结果和分类的lstm输出cat到一块儿,最后预测分类结果;
 
模型实现过程当中的注意点:
对这两个任务进行联合训练时,须要对这两个任务分别backward,同时又须要任务之间共享特征,因此backward的时候不能清空计算图,想要不清空计算图能够这么作:
pytorch实现:loss.backward(retain_graph=True)
这样就能够保留计算图上的节点了
相关文章
相关标签/搜索