排查问题犹如警察破案一样,是一个分析线索,推理的过程.
在教育领域存在这样的一个场景,某个学生做错一个题目,学生希望系统出一些跟该题目相关的习题或者视频资料进行针对性的查漏补缺,提高学习的练习和复习的效率,这个在学术上称为FSE (finding similar exercise )问题。
最常见的一个做法是人工标注出题库里面使用每道题的对应的相似题,然后预埋到数据库中,这样用户使用的时候直接从数据库中进行相似题目读取,但这样的问题在于前期的数据标注的耗时、成本高,无法满足不同学生不同的颗粒度的需求,另外一个做法在于直接基于知识点或者文本进行文本检索的方式,往往这样获得的习题是相似度比较高的重题,供学生直接去练习会伤害用户的体验,达不到提升用户的能力。所以,相似题的任务上需要较为精细的进行结构化的语义模型进行匹配.
提到模型自然而然需要的是数据,数据问题是当前面临的第一个刺手的问题,当前尤其是教育领域,具有非常强的专业知识且存在一定的主观性,标注过程需要多个教研专家的判断,不仅仅耗时,而且费用高,最终给到研发的有标注的数据也是非常有限,数据的稀少往往很难满足模型对数据的渴望。
在小数据规模下,通过减少模型的大小从而减缓模型的过拟合可能,但是模型的表达能力也同样也一定程度得到下降。所以,一般有效且简洁的方式还是数据层面上,通过数据增强的方式,让模型见到更多的数据,从而提高到模型的泛化性。
那如何通过数据增强的方式获得更多的数据呢? 首先还是开始一波方法的调研,Google&CMU的 ACL 2021一篇综述文章对NLP中常见的数据增强方法进行了比较细致的归纳:
这里面提到的数据增强方法包括三类,基于规则方面的技术、基于实例的插值方法和基于模型的方法。这里基于规则的方法中比较常见的做法是同义字/词/句的替换、删除、修改等。基于实例插值的方法,类似一些MIXUP/Mixed Sample Data Augmentation (MSDA)/CUTMIX/CUTOUT/COPY-PASTE等技术。还有就是基于模型的生成方法,比如seq2seq的生成方法,使用RNN、transformer作为解码器的, back-translation回译的方法,还有些生成对抗网络GAN的方法。
在这里方法中,基于规则的方法操作起来比较简单,经过一些常见的替换、删除、修改或造成原始的语义上偏移,比如 ‘一元一次方程’ --> ‘一元二次方程’ ,造成了概念层面的本质的改变,导致相似性发生巨大的改变,而基于模型的生成方法,类似于Seq2Seq、生成对抗网络GAN需要大量的数据才能够学习一个比较好的生成器,而这样的生成器也很难保证概念上差异。本文主要介绍的是基于数据关系的数据增强方式,应该属于基于规则的类似方法,下面将介绍其在我们的业务上进行实验。
我们选择的业务是初中化学相似题,早期我们尝试过随机化相同知识点作为负例的数据增强方式是有提高的,而这里主要介绍一种基于数据关系增强的方式,简单的说,就是题目对的基于交换性增强和基于传递性进行增强。
交换性:
正交换:如果ab相似,那么ba相似;
负交换:如果ab不相似,ba也不相似;
传递性
正传递:如果ab相似,bc相似,那么ac相似;
负传递:如果ab相似,bc不相似,那么ac不相似;
使用上述提到的基于传递性和交换性的数据增强,实验效果如下,默认的指标是P@5:
传递性 | baseline | 正传递 | 负传递 | 正负传递 |
---|---|---|---|---|
base | 0.7536 | 0.7265 | 0.7833 | 0.7522 |
base+对称 | 0.7794 | 0.7403 | 0.7982 | 0.7681 |
从实验结果看,发现如下有趣的结论:
从效果看,负传递是大腿,正传递拖了后腿,这里通过正传递的方式增加了训练数据的规模,但是效果却没有提高,反而下降这么剧烈,是为什么呢?且看下文分析
通过上述朴素的数据增强方式在初中化学的实验过程中发现,加入正传递,模型的P@5下降十分的明显,我们追溯到数据增强的原始数据和增强数据发现了效果下降的两个原因:
第一个原因是,正传递会一定程度导致题目的相似得分的下降,比如ab相似得分0.7,bc相似得分0.7,经过正传递后ac相似得分可能只有0.49,不足0.5,可能认为不相似了;
另一个比较致命的问题是一些正标注的样本存在一些比较大的标注错误,尤其是一些多知识点的题目,比如ab不相似误标注为相似,经过正传递后会产生2条错误样本,错误被间接的放大了。
那么如何去克服正传递提到的两个问题呢?我们设计了<font color=red> 一种增强版本的正传递</font>,核心思路是传递是保证传递性时的质量,具体做法是新增两个题目是单一的知识点的约束下进行传递,因为单一知识点的样本标注一般而言更加准确,标注更加的置信,传递后的样本质量更好。
顺着刚刚我们提到增强版本的正传递的思路进行实验,实验效果如下:
传递性 | baseline | 负传递 | 加强正传递 | 加强正负传递 |
---|---|---|---|---|
base | 0.7536 | 0.7833 | 0.7731 | 0.809 |
base+对称 | 0.7794 | 0.7982 | 0.775 | 0.811 |
实验效果还是比较符合预期的,加入增强版本的正传递后,能获得收益2.0个点收益;结合着负传递,性能获得进一步的提高;再结合着交换性,性能获得少量的提高。
另外,我们在高中化学相似题进行同样的实验,实验效果如下:
实验组 | P@ 1 | P@3 | P@5 | 收益 |
---|---|---|---|---|
base组 | 0.83 | 0.8007 | 0.7857 | 0 |
base组+正传递 | 0.8097 | 0.7744 | 0.7515 | -3.4% |
base组+负传递 | 0.852 | 0.8341 | 0.8225 | +3.7% |
base组+正负传递 | 0.8279 | 0.7898 | 0.7702 | -1.5% |
base组+负传递+对称 | 0.8531 | 0.8257 | 0.8074 | +1.5% |
base组+(负传递+对称) | 0.8654 | 0.8403 | 0.8268 | +4.1% |
<font size=2>备注:高中化学的知识点比较多,基本上3个左右的知识点,单知识点的pair数50条,正向传递后无数据.</font>
发现一致的结论:简单的正传递性能获得下降,负传递获得提高。这里关于交换性中发现,直接在原始的所有数据上进行数据交换性增强的方法没有只在负传递增强后的数据效果好,进一步验证我们的标注的原始样本中存在一些噪音,在对称交换中需要加入一定的约束。
数据增强从原理上看,增加模型的训练数据,避免模型陷入过拟合从而提高模型的泛化能力,一般还是能够获得一定的性能提高,如果发现通过数据增强后效果没有提升,需要进一步排查一下数据,看看原始数据和数据增强的质量,然后设计出一种带约束的数据增强的方式保证增强样本的质量,从而提升模型的效果。
Feng, Steven Y., et al. "A survey of data augmentation approaches for nlp." arXiv preprint arXiv:2105.03075 (2021).
Zhang, Hongyi, et al. "mixup: Beyond empirical risk minimization." arXiv preprint arXiv:1710.09412 (2017).
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。