本文作者在上述算法中,首先,对文章标题和内容分别进行切词及停用词等过滤;接着,使用TF-IDF进行特征选择;然后,分别进行Bayes分类器训练;最后,对未标注集合U‘进行分类,取置信度较高的p个正例和n负例。由于类别数量分布差异性,本文中p和n的选取对每个类别都不一样,主要是通过分类器阈值和Top N值共同来选取的,为了保证分类器的精度,阈值设置较高,取可信度较高的Top N(N<=10000)。
PU-Learning算法
图3 PU-Learning获取正负例训练语料过程
段焕中
腾讯高级工程师
概述
机器学习常用算法基本上可以分有监督(包括半监督)和无监督学习。有监督学习,通常指分类问题,通过已有训练样本语料(即已知数据及其输出结果)去训练一个最优模型,然后用该模型去预测未知数据的分类结果;无监督学习又称非监督学习,是在没有已知训练样本语料的情况下,直接对数据进行建模获得分类结果,通常指聚类问题。传统的文本分类技术基本都是有监督学习,而文本分类过程中,带标签的训练语料获取是其首要解决的问题。虽然互联网的迅速发展,产生了海量数据,但这其中标注的数据却很少,实际中往往都是需要进行人工整理和标注,其代价成本高,效率低。也正是由于标注数据的稀缺,很多实际应用中训练模型往往达不到理想效果,正所谓“巧妇难为无米之炊”!在有监督学习过程中,虽然训练学习算法各个千秋,差异有别,但相比训练语料的规模和质量来说,后者往往起到关键性因素,乃“数据决定结果”。因此,好的训练语料对模型效果起到决定性作用。
随着微信公众平台的不断发展,微信公众号的下发类别内容也是越来越丰富,为这些类别内容训练文本分类器成为了我们的业务目标。首先需要解决的问题是如何为众多的类别分类模型寻找训练语料。尤其像公众号资讯文章,每天新增量为百万量级,累计一段时间后,其数量可想而知。面对如此庞大数据及170个二级类别分类,如果光靠人工标注训练样本是不现实的。因此,本文采用了Co-Training和基于KL距离(Kullback-Leibler Divergence)的PU-Learning半监督分类算法;依次挖掘出未标识集中最可靠的正例和负例,接着用训练好的增强型分类模型来分类,与其他方法相比,不仅提高了分类的准确和召回,而且具有鲁棒性。
技术方法
对于文本语料获取来说,无论是使用Co-Training还是PU-Learning学习算法,首先需要解决的问题是各个类别种子语料。本文采用三种获取类别种子正例语料的方法:
方法一:利用文章内容的AP Clustering的结果,结合其粉丝数和发文活跃度,挑选各个类别top公众号下发内容作为类别种子正例语料;
方法二:使用PLSA类别聚类结果,对文章进行打分排序,根据阈值和Top原则选取各个类别的种子正例语料;
方法三:结合领域词典及Word2vec方法进行扩词,然后根据扩展关键词通过有限自动机进行字符串匹配,获取高精度正例语料。
最后,对上述三种获取各个类别正例语料进行去重合并作为候选种子训练语料。有了各个类别种子训练语料就可以进行分类器训练,经过特征抽取和特征选择后,分别进行Bayes模型训练和logistic回归模型训练,这个两个模型分别应用于Co-Training算法和PU-Learning算法。虽然最开始得到的是弱分类器,但经过Co-Training和PU-Learning多次循环迭代后,得到的分类器会越来越强,而且具有很好的稳定性。具体技术方法流程见图1。
图1 文本训练语料获取方法
技术原理与实现
Co-Training算法
在进行机器学习训练时,获取未标注数据往往比获取标注数据容易得多。而单纯利用人工标注的方法获得训练集通常是一件成本较高的事情。对于一个特定的问题,如果只存在少量的标注数据,并且这个问题可以从两个不同的角度来描述,我们就可以尝试利用Co-Training的方法来产生更多的标注样本。
Co-Training算法,又称为协同训练算法,是一种半监督的学习方法,它利用小规模的标注数据,分别训练两个分类器,对大规模的未标注数据进行标注。最初是由A.Blum和T.Mitchell在1998年提出的,该算法基于如下两个假设条件:
第一,数据集有两个充分冗余的视图(或者属性)X(分别为x1、x2),如果视图(或者属性)训练样例足够,且在视图(或者属性)x1、x2上均能单独训练出一个强分类器;
第二,两个视图(或者属性)x1、x2彼此之间相互独立;
满足如上两个条件,就可以对未知语料数据集进行Co-Training算法学习。其基本流程:首先,给定一个已知标签数据集L和未知标签数据集U;从未知数据集U中随机挑选出u个样例形成新的未知数据集U’;接着,在已知数据集L中根据两个视图(或者属性)x1、x2分别训练出两个分类器c1和c2;然后,使用分类器c1和c2分别对未知数据集U‘进行分类标签,根据阈值分别获取置信度最高的p个正例,n个负例,并将分类出的正负例结果均添加到已知标签数据集L中;最后从数据集U中随机选取2p+2u个样例数据补充到数据集U’中;重复上述过程迭代k次直到满足截止条件为止。以网页分类为例,可以利用网页本身的内容和超链接的信息分别训练出不同的分类器。
图2 Co-Training样本空间
如图2所示,左侧为空间x1,右侧为空间x2,被连接的两个点表示一个样本。其中实线连接表示已标注,虚线连接表示未标注。所有连通的点所对应的分类是一致的,根据这个性质我们可以不断的对未标注的数据进行标注。
计算微信用户阅读兴趣时,需要对公众号下发的文章进行分类,而高质量及足够数量的正负例语料获取是首要面临的问题。在进行一级分类时,由于不同类别的区分度较大,可以直接筛选得到充足的标注数据直接进行分类器训练;但二级分类类别较细,且存在部分交叉,直接通过一级分类器、通过AP Clustering已标注优质公众号类别、类别关键字扩展(word2vec)等方法获得的语料虽精度较高,但数据量较小,不足以支撑二级分类器的训练和建立,而且没有效果保证。同时,我们有足够大量的未标注公众号文章,因此,我们利用Co-Training方法来对大量的未标注文章进行标注,获得足够数量的标注样本,以满足二级子类的模型训练要求。
Co-Training方法要求使用两种不同的方法来描述同一个分类问题。对于用户阅读兴趣的二级分类,我们可以从两个角度来描述,一是文章的标题,文字精炼类别性强;二是文章的内容,具体描述信息丰富,两者都能描述文章的类别和类别内容,并结合Bayes模型作为Co-Training内部迭代分类器。本文中将前述三种方法过滤合并得到170个分类的高精度小样本数据,作为已标注数据集L,而大量的未标注文章作为未标注数据集U,算法逻辑如下:
输入:标注集合L;未标注集合U
输出:新的标注集合L‘
在上述算法中,首先,对文章标题和内容分别进行切词及停用词等过滤;接着,使用TF-IDF进行特征选择;然后,分别进行Bayes分类器训练;最后,对未标注集合U‘进行分类,取置信度较高的p个正例和n负例。由于类别数量分布差异性,本文中p和n的选取对每个类别都不一样,主要是通过分类器阈值和Top N值共同来选取的,为了保证分类器的精度,阈值设置较高,取可信度较高的Top N(N<=10000)。
PU-Learning算法
图3 PU-Learning获取正负例训练语料过程
根据上述3步处理后,可以获得各个类别的正负例训练语料,然后通过Sampling方法抽取各个类别的正负例语料进行模型训练,以获得相应分类器,并进行效果评估。
总结
本文从公众号文章内容类别分类业务出发,以获取相关类别文本正负例训练语料,提出了获取种子语料的三种方法,并结合Co-Training以及PU-Learning算法思想,具体实现了这两种方法获得了高质量文本训练语料,完成了微信用户阅读兴趣二级类别分类模型的训练。实验结果表明,通过该技术方法不仅大大减少了获取训练语料的成本,而且有效地提高了分类模型的质量和稳定性。
内容转自公众号:腾讯课堂产品学院
网友评论