查看原文
其他

【源头活水】Mixtext 半监督分类

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

作者:知乎—杨帆

地址:https://www.zhihu.com/people/yang-fan-27-12

深度学习的成功一半要归功于模型和计算力,另一半则要归功于数据。
在深度学习的很多领域,监督学习已经取得了很好的成果。当然,前提是需要有大量且高质量的标注数据集,通常没有标注的数据集是很多且容易获得的,在深度学习初始阶段,为了解决这个问题,很多公司雇佣廉价劳动力来做数据标注,费时费力还不讨好,当手上有部分标注好的数据集大量未标注数据的时候,如何彻底利用这些数据来建立一个泛化性能能够比肩拥有大量标注数据集的监督学习模型是一个值得深入研究的问题。

01

背景
在NLP分类任务中同样存在标注数据少的问题,现有的半监督学习:(1)利用VAEs(variational auto encoders )变分自编码重构句子,通过学习重构句子的隐藏变量预测句子的标签(2)通过self-training使模型对无标签的数据输出预测的置信度再加入到训练集去训练模型(3)使用添加扰动(对抗训练)或者数据增强的形式进行训练(4)使用无标签数据训练再用有标签数据微调。上述提及到的方法没有同时使用有标签和无标签数据,在训练过程中可能会过拟合有标签的数据,造成模型泛化性能的降低。Mixtext要做的就是在训练过程中同时利用有标签数据和无标签数据来生成新样本,以增强模型的泛化性能。

02

亮点
1. 隐空间向量插值
Mixtext示意图
对于两个有标签的样本,在隐空间内进行线性插值获得新的样本,新样本的标签也采用原样本标签的线性插值:
NLP采用了embedding的思想把句子映射到高维空间,在高维空间内插值是合理的,最近 (Jawa-har et al., 2019) 研究表明Bert的不同层有不同的作用,这些层抓住了信息表达的不同形式,从语法层次到语义层次。例如第9层,语义任务表现最出色,第3层预测句子长度最出色。在插值的时候需要考虑  的取值和选定的隐含层。
 的选取采用lambda分布:
其中  为人为选定的参数,在各个类别比较少的时候,取值偏大,论文中选为2或16,这个时候  越在0.5左右,此时会产生新的样本,当各个样本的数量大于200时,论文选取的值为0.2或者0.4,这个时候  越在0.1左右,此时会产生相似样本,只是样本被添加了部分噪音。
半监督插值
上图为Mixtext的结构示意图,输入 ,  分别为有标签数据、无标签数据、无标签数据的增强数据,  采用回译法获得。对应的标签为  。其中无标签数据的Label靠猜测获得。  和 相同。
将数据输入模型就能获得模型对其标签分布的预测,再对无标签数据及其增强数据的标签概率做加权平均作为其预测标签。其中  和  大小由人为给定,论文中直接给定的是1和0。
再对标签锐化,使得其更像真实标签:
T取为0.5 。
这样所有的样本就有了标签,在训练的时候,Mixtext随机从  中抽取两个样本在隐空间内作插值。
2. 损失函数设计
样本的损失函数包括两大类:
(1)样本都来自有标签数据集  ,直接采用有监督学习的损失函数。
(2)样本都来  ,采用一致性损失,无标签数据和增强数据的分布一致性,代表为KL散度。
(3)标签猜测最小熵,认为只有猜测的标签熵最小才是准确的猜测,通过损失函数来控制猜测行为。
最终的损失函数表达为:


03

实验结果

作者在四个不同的数据上做了测试,在样本比较少的时候有明显的提升,在样本量比较大是基本上就没有效果了。
另外对比了一下不同的学习模型的表现,说明了mixtext的多训练几个epoch也不会严重过拟合。
最后研究了一下选取哪些层对结果提升最大,发现对于bert-base(12层)选取7,9,12的表现最好。

04

个人实验和思考
显然mixtext是一个很有趣的研究,隐空间插值这个很容易想到,但是能做出这么多花样,作者还是下了不少功夫的。我在看到这篇论文以后也是很兴奋的跑到中文数据集上去做测试,结果并没有我想的那么美好。
(1)我在测试时,没有对无标签数据集数据增强,因为google翻译的api实在是太拉垮了。后来查阅了相关文献发现,上面提到的一致性损失对半监督学习十分重要,对无标签数据,希望微小扰动下数据输出基本没有变化,在mixtext中这种微小扰动表现在回译法引起的输入扰动和无标签数据的插值增强的扰动,因此数据增强是体现一致性损失的重要环节。
(2)测试了  的取值,确实对于各个样本的量大于200时,选取0.2或者0.4的效果是要好于2或16的,在大样本时插值新样本效果并不好。在插值的时候限制了  的权重更大,插值得到的结果被认为是  的增强,此时假设混合体的标签更接近  是合理的,这和一致性损失的要求是一致的,而当  接近0.5时再假设标签是线性混合可能已经不再正确。
(3)测试了选取不同bert的层,发现确实是{7,9, 12}层的表现好于低层。


05

可能的改进方向
(1)采用小的  ,那么可以认为新数据是原数据的增强数据,如果  ,则  。  ,则  。则计算损失函数时,监督的按照监督的算交叉熵,无监督的按照无监督的算一致性损失,一致性损失可以用KL散度也可以用L2 Norm,另外对所有的数据都可以使用熵最小损失。
(2)尝试不同的NLP数据增强,包括回译法,同义词替换,语句翻转等。
(3)  可以随着时间的增加,从零开始逐渐增大到最大值,因为越是往后训练模型越是准确。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存