导读:本文是“数据拾光者”专栏的第二十二篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本文主要分享将主动学习应用到文本分类任务,对于希望将主动学习应用到实际的机器学习项目的小伙伴可能会有帮助。 欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。
摘要:本篇主要讲解将主动学习应用到文本分类任务。首先讲了下为啥要研究主动学习。因为标注样本是有成本的,所以我们要尽量用更少的标注样本来得到一个效果更好的模型,这是研究主动学习的原因和目的;然后详解主动学习,主要包括主动学习的定义、基本流程、查询策略的设计原则、常用的查询策略以及主动学习的评价指标等;最后讲了下将主动学习应用到文本分类实战的详细步骤,从使用不同的BERT预训练模型获取多个分类器到基于委员会的查询策略获取不确定性较大的样本,再到基于SimBERT获取语义相似度较远的样本,再到结合业务视角选择最终的样本。对于希望将主动学习应用到实际的机器学习项目的小伙伴可能会有帮助。
下面主要按照如下思维导图进行学习分享:
01 为啥要研究主动学习
1.1 研究主动学习的原因和目的
熟悉机器学习的小伙伴知道机器学习包括有监督学习、半监督学习和无监督学习等。有监督学习就是咱们的样本数据必须包含标签,比如我们要做文本分类任务,根据一条文本模型给出相应的类别。模型训练的时候我们提供给模型的训练数据必须包含需要识别的文本和标签,相当于你要告诉模型这条数据属于哪一类。无监督学习则相反,提供给模型的样本数据不需要包含标签,比如语言模型,只需要提供给模型海量的文本数据,那么模型就可以自己学习到语言学知识了。而半监督学习介于有监督学习和无监督学习之间,需要少量有标签的样本数据。
而主动学习则和其中的有监督学习和半监督学习有关。因为它俩都需要有标签的标注样本,而通常情况下标注样本是需要成本的。因为我主要做文本分类任务,所以下面关于主动学习的讲解中尽量通过文本分类的例子来进行说明。因为我目前主要做的文本分类任务来说,我需要大量的标注语料用于模型训练,所以需要有标注人力投入。可以这么说,模型文本分类能力的好坏和训练语料的数量和质量强相关。但是一个现实的问题是标注人力资源是有限的,也就是说一定时间内标注人力产出的标注样本是有限的。但是同样数量的标注样本可能对于模型的提升是不同的。
咱们拿考试举例。假如在一定的时间内大家都可以做100道题。小A选题比较随意,从海量的题库里面随机找100道题来做。这里的100道题可能包含非常简单的、重复性比较高的题,所以提升非常有限。而小B选题则会使用各种策略,比如简单和困难的题目比例均衡、选一些自己经常做错的题或者题目的差异性非常大等等。经过这么一波骚操作,虽然小A和小B都做了100道题,但是做题的效果却截然不同。
经过上面的例子,咱们引出研究主动学习的原因和目的:标注样本是有成本的,我们要尽量选出那些能提升模型能力的样本。下面是医学领域中标注X射线图像和CT图像的标注时间成本和金钱成本图:
图1 标注样本的时间成本和金钱成本
1.2 对应到我们的业务场景
对应到我们的业务场景中,我主要做文本分类任务。就拿开发“股票”分类器来举例。我需要识别用户搜索是不是对“股票”感兴趣。通常情况下一个标注人员一天能标注1000条样本。没有使用主动学习之前主要采用随机采样策略,可能同时还会兼顾业务视角比如考虑用户搜索pv,也就是选择pv较高的样本进行标注。这种策略的坏处很明显,选择的样本可能很多是模型很容易识别的。所以我需要尽量找到模型“难”于识别的样本让人工标注,然后将人工标注的数据提供给模型训练,相当于将人工经验融合到机器学习模型中,从而提升模型的识别能力。
02 主动学习详解
2.1 什么是主动学习
上面讲了学习主动学习的原因和目的,说到底就是选出更有价值的标注样本让标注人员标注,从而提升标注效率。这里咱们引用文章《Active Learning Literature Survey》里对主动学习的定义:主动学习是机器学习的一个子领域,在统计学领域也叫查询学习或最优实验设计。
2.2 主动学习的基本流程
个人感觉主动学习和通常的机器学习流程非常相似,主要包括五个核心部件和三个环节。核心部件主要包括无标签数据池、样本选择策略、标注者、标签数据集和机器学习模型。三个环节则主要包括从无标签数据池中根据一定的策略选择标注样本交给标注者标注、标注者标注完样本放入标签数据池中、从标签数据池中获取训练样本用于模型训练,然后就是不断的循环直到模型的效果达到线上要求。其中区别之处就在于这个选择策略,这也是主动学习的核心。下面是主动学习的基本流程图:
图2 主动学习的基本流程
2.3 主动学习查询策略的设计原则
主动学习最重要的在于如何选择样本进行标注。这里选择策略的设计主要有两个原则:不确定性原则和差异性原则。不确定性原则很好理解,就是选择那些模型不容易判别的样本提交给人工去标注。还拿文本分类任务来说,将用户搜索进行分类对于标注者来说是比较简单的。这里咱们尽量把模型认为比较“难”的样本选出来让人工标注。至于如何体现这个难,下面在介绍查询策略的时候进行详细说明。而差异性原则主要是选择的样本需要有一定的差异性。比如英语考试中有听力题、单选题、多选题、完形填空、排序题以及作文等不同的模块,其中听力题、多选题、完形填空和作文对于我来说比较难。如果仅考虑不确定性原则,可能我挑选出来的题会集中在某一类。但是如果我想英语考试能取得好的成绩,我需要在这几类比较难的题中都选出一些题进行训练,这就是差异性原则。通过下面这张可视化图进一步说明差异性原则:
图3 差异性原则说明图
上图中是一个二分类任务。其中绿色代表第一类样本,黑色代表第二类样本。现在我们使用模型去预测未标注样本获得样例1和样例2,图中通过蓝色表示。对于模型来说加入样例2比加入样例1对模型的贡献度会更大,因为样例1附近已经有相似的样本,所以从样本差异性更大的角度来说选择样例2会更加合适。
综合下来,主动学习查询策略的设计原则需要尽量让选择的样本既“难”又“全”。
2.4 主动学习常用的查询策略
上面介绍了主动学习查询策略的设计原则,接下来讲下主动学习常用的查询策略:
(1)随机采样策略
随机采样策略没啥好说的,就是从未标注的样本中随机选择一定比例的样本提交给标注者介绍。这里最先介绍,主要是可以作为对照策略。
(2)不确定性策略
不确定性采样策略应该是用的比较多的策略,就是将未标注的数据集中比较“难”的样本选出来提供给标注者标注。这里重点是如何衡量样本的不确定性,也就是这个“难”的定义。机器学习中主要以下三种策略:置信度最低策略、熵策略等。
置信度最低策略就是选择模型认为置信度比较低的样本。假如我们现在根据少量的数据已经训练得到了一个文本分类模型,这里以二分类举例。现在我们使用这个模型去预测未标注的数据集,根据模型我们会得到每个样本判定为0或者1的概率值。现在模型判定A样本的概率值为(0.95,0.05),判断B样本的概率值为(0.55,0.45)。根据置信度最低策略,我们会选择B样本提交给标注者标注,因为B的置信度比较低,模型拿不准。把模型拿不准认为比较“难”的样本让人去判断,然后把人工的经验通过标注样本再提供给模型,这样模型就学习到了人工的经验。置信度最低策略是相对来说比较简单但是非常实用的策略。,我们目前线上主要使用的也是这个策略。
这里有小伙伴可能比较关注文本分类任务中最初的训练样本是怎么得到的。这里说明下,实际的业务场景中前期的样本可以通过关键词匹配的角度来获取样本。比如开发“股票”分类器,我会去各大网站先挖掘一批能表征股票的关键词,然后通过这些关键词去匹配用户搜索,然后将匹配到的用户搜索提交给标注者标注。这里当然会考虑业务场景,比如选择pv较高并且长度比较短的用户搜索去标注。选择pv较高的query主要是因为每天用户搜索有千万级,而基于性能的角度只会预测头部的query,所以训练语料也尽量考虑用头部的query。选择较短的原因则是结合实际业务场景中用户搜索一般比较短,更符合实际的分布。
熵策略主要是利用信息论中的熵来判定样本的识别难度,因为信息论里面熵是对不确定性的测量。感觉和置信度最低策略类似,主要是从不同的维度来衡量样本的不确定性。
(3)基于委员会的查询策略
基于委员会的查询策略类似集成学习。比如我们现在做“股票”分类器,使用不同的BERT预训练权重得到了多个模型,这里可以是google中文版的BERT权重、基于哈工大全词掩码的RoBERTa版本权重或者百度ERNIE权重。将不同预训练权重的模型分别去预测无标签数据,选择那些模型预测不一致的数据作为“难”区分的样本。使用的评估指标可以是熵或者KL散度。这种基于委员会的查询策略相比于上面的不确定性策略会更加合理点。因为分别使用了多种BERT预训练模型去评估样本,相当于集成了不同预训练模型学习到的知识,所以考虑的会更加全面点。目前我们线上主要也使用的这种基于委员会的查询策略,使用三种预训练权重去训练三个分类器,然后考虑每个分类器的预测结果来获取最低置信度的样本。
(4)基于语义相似度最远的查询策略
上面的不确定性策略和基于委员会的查询策略主要是从不确定性原则的角度来选择对模型比较“难”的样本。前面说了我们不仅要选比较难的样本,还要选差异性比较大的样本。差异性比较大的样本主要考虑使用SimBERT从语义相似度最远的角度来实现。SimBERT主要用于计算文本语句的相似度。当我们通过基于委员会的查询策略找到一批模型比较“难”区分的样本之后,选择这批样本和现有的语料计算语义相似度,选择相似度较远的样本进行标注。这样相当于综合了不确定性和差异性共同来获取标注样本。
2.5 主动学习的评价指标
关于主动学习的评价指标可以通过节约的样本标注比例来说明。假如模型需要达到一定的效果指标,如果没有使用主动学习需要标注1W条样本。现在通过主动学习,咱们只需要标注6000条样本就能达到线上的模型指标。那么节省的样本比例为(10000-6000)/10000=40%。相当于减少了40%的样本标注率。
03 将主动学习应用到文本分类实战
研究了主动学习的原理以及使用的查询策略,那么针对我们现在文本分类任务使用主动学习任务的详细步骤如下:
(1)对同一个标签使用集成学习的方式训练多个分类器
虽然我们目前主要使用基于哈工大全词掩码的RoBERTa-wwm-ext模型来进行文本分类,但是经过实验确认使用百度的ERNIE模型和添加标签描述信息的GOOGLE中文版本BERT模型一样能得到不错的文本分类效果。这里开发同一个标签的分类器时我们会基于三个不同的权重开发三个不同的分类器;
(2)基于委员会的查询策略获取不确定性较大的样本
对于每个标签我们已经得到了三个分类器。使用三个分类器分别去预测未标注数据集,将分类器预测不一致的、置信度较低的样本挑选出来作为候选标注样本;
(3) 基于SimBERT获取语义相似度较远的样本
上面已经得到了不确定性较高的样本,这里主要从差异性较大的角度来进一步筛选样本。使用SimBERT来计算已有的训练集和候选标注样本集的相似度,选择相似度较大的样本作为候选标注样本;
(4) 结合业务视角选择最终的样本
上面已经从主动学习的角度选择了候选标注样本。最终有价值的标注还需要考虑实际业务。这里我们选择那些用户搜索pv比较高的query作为标注样本。因为用户搜索量级每天在千万级别,而真正能带来较大消耗的是那些头部query,所以我们的分类器需要能很好的识别头部query,对应的训练语料也最好从头部query中去挑选。这样可以使得我们模型使用的训练语料尽量接近线上预测数据的分布。除此之外,选择的标注样本长度不应该很长,毕竟实际业务场景中的用户搜索一般较短。
总结
本篇主要讲解将主动学习应用到文本分类任务。首先讲了下为啥要研究主动学习。因为标注样本是有成本的,所以我们要尽量用更少的标注样本来得到一个效果更好的模型,这是研究主动学习的原因和目的;然后详解主动学习,主要包括主动学习的定义、基本流程、查询策略的设计原则、常用的查询策略以及主动学习的评价指标;最后讲了下将主动学习应用到文本分类实战的详细步骤,从使用不同的BERT预训练模型获取多个分类器到基于委员会的查询策略获取不确定性较大的样本,再到基于SimBERT获取语义相似度较远的样本,再到结合业务视角选择最终的样本。对于希望将主动学习应用到实际的机器学习项目的小伙伴可能会有帮助。