香侬读 | 使用元学习(Meta-Learning)进行少样本下的文本分类

香侬读 | 使用元学习(Meta-Learning)进行少样本下的文本分类

文章作者:Bao, Yujia and Wu, Menghua and Chang, Shiyu and Barzilay, Regina

文章链接arxiv.org/pdf/1908.0603

代码链接github.com/YujiaBao/Dis

收录情况:Work in Progress for ICLR2020


元学习与少样本学习

近些年,元学习(meta-learning)在处理少数据集的任务上十分流行,所谓元学习,就是让一个算法能够扩展到一个新的标注任务(类)上,这个标注任务(类)有不同于原有任务的标注类别,而且训练集很少。

目前元学习主要在CV上取得了较大成功,对NLP,还未有广泛的成功。元学习不易处理NLP的主要原因还是在CV和NLP的内在区别:CV的低级别模型,如边、颜色、点在不同任务上都是通用的;而NLP的不同任务,即使是同一个句子,其重点都是不同的。比如下图是HuffPost数据集中共41个类别不同词的相关度:



从图中可以看到,词和类别是高度相关的,但是对不同任务(类)而言,同一个词的重要性又是不同的。比如下图,同样是在数据集HuffPost中,如果把类别fifty抹去,之前的网络根本无法找出最重要的词来:



但是本文提出的方法可以很好地找到最重要的词,从而判断正确的类别。

本文提出了一个元学习模型用于少样本下的文本分类模型。总的来说,本文贡献如下:

  • 不直接考虑词,本文的方法使用词的分布式特征
  • 提出了一个少样本下的元学习文本分类模型
  • 使用了一个注意力生成器(Attention Generator)和一个岭回归器(Ridge Regressor)
  • 在跨类别迁移上模型表现良好

背景概述

我们首先阐释几个概念。

问题定义

现在我们有一个类别\mathcal{Y}^\text{train}集合,对这些类别,我们有足够的标注数据。又有一个类别集合\mathcal{Y}^\text{test},但是标注数据很少。我们的目标是通过类别集\mathcal{Y}^\text{train}的标注数据使得模型能够在类别集\mathcal{Y}^\text{test}的数据上也有较好的效果。

元学习

我们把元学习分为元学习训练(Meta-Training)和元学习测试(Meta-Testing),对于元学习训练,我们要创造若干个训练段(training episode),同理我们也有若干测试段(testing eposode)。

为了创造一个训练段,我们首先从\mathcal{Y}^\text{train}中随机取N个类别,再从每个类别中取K个训练样本作为训练集和L个样本作为测试集,所以就有NK个训练样本和NL个测试样本。一般来说,我们把这NK个训练样本称为支持集(support set),把NL个测试样本称为询问集(query set)。

在元学习测试阶段,对每个测试段,我们都先从\mathcal{Y}^\text{test}中随机取N个类,然后再从这N个类中取支持集和询问集,然后在所有段的询问集中验证模型效果。

下图是一个例子:



扩展

在上图中还出现了一个source pool,这就是本文的一个扩展。具体地,在元学习训练时,对每个训练段,我们把所有没被选择的类的数据作为source pool;在元学习测试阶段,source pool包括所有类的训练数据。

方法

模型主要分为两个模块:

  • 注意力生成器:该模块通过结合source pool的分布式特征和支持集,生成以类为基础的注意力大小,然后生成的注意力被用于岭回归器来修正词重要度的偏差
  • 岭回归器:对每个段,该模块接受注意力值并构建词汇表示,然后在询问集上进行预测

总的流程图如下:



注意力生成器

注意力生成器的目标是评估词的重要度,我们使用source pool来得到词的一般重要度,使用支持集得到类相关重要度。

由于出现越频繁的词重要度越低,所以用下式得到一般重要度:

s(x_i)=\frac{\epsilon}{\epsilon+P(x_i)},\epsilon=10^{-3}

这里P(x_i)是source pool中词x_i的unigram似然。


然后用下式得到类相关重要度:

t(x_i)=\mathcal{H}(P(y|x_i))^{-1}

这里条件似然P(y|x_i)是在支持集中使用正则线性分类器(Regularized Linear Classifier,具体请参考原文附录A.1)得到的,\mathcal{H}为求熵。显然,t(x_i)得到的是词x_i在类别y中的不确定度,从而也是重要度。


但是只用这些数据效果不好,原因有二:(1)source pool和支持集包含的是互补的数据,模型无法确定如何结合;(2)这些数据只是词重要度在分类问题上的估计。于是,我们使用BiLSTM结合这些数据:h=\text{BiLSTM([s(x);t(x)])},然后得到下面的注意力值:

\alpha_i=\dfrac{\exp(v^Th_i)}{\sum_j\exp(v^Th_j)}


岭回归器

对于岭回归器,我们首先得到样本的表示:

\phi(x)=\sum_i\alpha_i\cdot f_{\text{ebd}}(x_i),\quad f_{\text{ebd}}(x_i)\in\mathbb{R}^E


然后令\Phi_S\in\mathbb{R}^{NK\times E}是支持集的表示,Y_S\in\mathbb{R}^{NK\times N}是类别的one-hot表示。然后最小化下面的loss:

\mathcal{L}^{RR}(W)=\|\Phi_SW-Y_S\|^2_F+\lambda\|W\|^2_F,\quad W\in\mathbb{R}^{E\times N}


可以得到闭式解:

W=\Phi_W^T(\Phi_S\Phi_S^T+\lambda I)^{-1}Y_S


对询问集,令\Phi_Q是其表示,于是我们直接预测其标签:

\hat{Y}_Q=a\Phi_QW+b,\quad a\in\mathbb{R}^+,b\in\mathbb{R}

最后我们用softmax得到\hat{P}_Q,用交叉熵进行反向传播即可。


实验

本文在下面的数据集上进行了实验:20 NewsgroupsRCV1Reuters-21578Amazon product dataHuffPost headlinesFewRel。其他实验细节,若读者有兴趣可参见原文。

下表是6个数据集在不同表示(Rep.)和不同学习算法(Alg.)上的表现,其中NN是1近邻分类,FT是首先在所有训练样本上进行预训练,然后在支持集微调。



平均来说,本文的模型在N=5,K=1时提高6.26%的准确率,在N=K=5时提高3.84%准确率。下图说明了本文模型可以有效地避免过拟合:



下表是使用BERT之后不同模型的比较:



对于FewRel提升较大,对于HuffPost提升较少。

下图展示了分别使用s(\cdot),t(\cdot)和结合使用的PCA可视化结果,可以看到,结合使用两者可以有效区分不同类别的特征:



下图是两个例子:



小结

本文提出了一种少样本下的元学习方法,用于文本分类,在多个数据集上取得较好效果。本方法利用词的分布式特征得到注意力值,从而与词重要度建立联系,很好地缓解了过去单纯使用tf-idf或单纯使用词向量的不足。此外,在测试的时候,不需要经过复杂网络,只需用一个线性变换即可进行预测,在效果好的同时也很快,一举两得。

发布于 2019-09-02