基于交叉可视训练的半监督序列建模

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rosefun96/article/details/85412976

背景

半监督学习结合迁移学习是一个研究热点,预训练表征与多种形式的半监督学习是互补的。
这篇论文(具有交叉视训练的半监督序列建模(Semi-Supervised Sequence Modeling with Cross-View Training)),思想是确保对不同输入视图预测与主模型的预测一致,这和word dropout类似,允许利用未标注数据来加强模型的鲁棒性。与mean teacher等self-ensemble模型相比,是专门为nlp设计的。

1 介绍

无监督的表示学习算法,如word2vec和ELMo,提高了许多有监督的NLP模型的准确性,主要是因为它们有利于大量未标记的文本,而有监督的模型仅在主要训练阶段期间从有标记数据中学习。因此,我们提出了跨视图训练(CVT),这是一种半监督学习算法,使用标记和未标记数据的混合来改进Bi-LSTM句子编码器的表示。在标记的示例中,使用标准监督学习。在未标记的示例中,CVT教导了辅助预测模块,其看到输入的受限视图(例如,仅一部分句子)以匹配看到整个输入的完整模型的预测。由于辅助模块和完整模型共享中间表示,这反过来改进了完整模型。

现在利用无标签数据的主要方法是预训练+微调。预训练过程中,只利用无标签数据。更早的半监督学习方法,自我训练模型,是连续从混合的有标签、无标签数据中,学习。这篇论文使用交叉可视训练来进行序列建模(这种模型也是自我训练)。

自我训练中,模型在标记的样本正常学习,并且作为未标记样本的teacher Model,对这些样本进行预测,并且预测获得样本作为训练样本再次训练获得一个student model。
但是,这样存在过拟合的情况,就是,模型的训练样本已经得到他的预测结果。通过加入噪声,对student model可以产生较好的效果(对图像数据而言),但是对文本这种离散输入,加入噪声有点困难。
这篇论文解决思路是引入多视图学习,使用不同视图的输入,尽量让模型获得一致的输出。这种CVT方法,引入辅助预测模块——吧词向量表示作为预测目标,这样就引入了student model。每个student model的输入时模型中间层表示的子集。
其中,student model连接到共享的bi-lstm编码器。基于此,提出使用序列标记器的辅助预测模块,并且应用于英语到越南语机器翻译方面。
CVT方法可以有效与多任务学习相结合,只需在共享的Bi-lstm编码器为不同任务添加额外的预测模块。

2 cross-view training

2.1 方法
D l = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } \mathcal D_l = \left \{ {(x_1,y_1),(x_2,y_2),...,(x_N,y_N)} \right\} 表示有标签数据集, D u l = { x 1 , . . . , x M } \mathcal D_{ul} = \left\{ {x_1,...,x_M} \right\} 表示无标签数据集。使用 p θ ( y x i ) p_\theta(y|x_i) 代表 x i x_i 输出的类别.
在这里插入图片描述

模型对有标签样本输入,容易学到Washington是一个“位置”,对于无标签样本,辅助预测模块是通过训练得到相同的预测。
CVT方法中,模型交替学习一小部分的有标签样本和一小部分的无标签样本。对于有标签样本,CVT使用标准的交叉熵:
L s u p ( θ ) = 1 D l x i , y i D l C E ( y i , p θ ( y x i ) \mathcal L_{sup}(\theta) = \frac{1}{|\mathcal D_l|}\sum\limits_{x_i,y_i \in \mathcal D_l } {CE(y_i, p_{\theta}(y|x_i)}

CVT k个辅助预测模块学习无标签样本时,预测模块通常是一个小型神经网络(比如,一个隐层结一个softmax层)。并且输入时 x i x_i 的一小部分,记为 h j ( x i ) h^j(x_i) ,实际中,可以将LSTMs的输出结果作为输入。

对未标记样本,模型首先通过推理产生软标签 p θ ( y x i ) p_{\theta}(y|x_i) 。CVT训练辅助预测模块来保证与主预测模块的一致性,预测目标为最小化loss:
L C V T ( θ ) = 1 D u l x i D u l D ( p θ ( y x i ) , p θ j ( y x i ) ) \mathcal L_{CVT}(\theta) = \frac{1}{|\mathcal D_{ul}|} \sum\limits_{x_i \in \mathcal D_{ul}} D( p_{\theta}(y|x_i), p_\theta^j(y|x_i) )

D为KL散度。 p θ ( y x i ) p_\theta(y|x_i) 为主模型预测值,训练过程中,这个值固定,也就是辅助模块,可以学会初始化主要模块。CVT通过增强模型的表示学习来工作。随着辅助模块的学习,输入的表示质量提升,预测效果也提升,主预测模型性能也提升。
总的损失函数为: L = L s u p + L C V T \mathcal L = \mathcal L_{sup} + L_{CVT} . 使用随机梯度下降来减少损失。特别的是,交替使用有标签样本减少 L s u p L_{sup} 和无标签样本减少 L C V T L_{CVT} .

3 训练模型

3.1 依赖性解析

在这里插入图片描述


reference:

  1. 论文;
  2. 机器之心 18年nlp研究
  3. 开源代码

猜你喜欢

转载自blog.csdn.net/rosefun96/article/details/85412976
今日推荐