近年来,人工智能与机器学习的应用越来越广泛,尤其是在互联网领域。在微博,机器学习被广泛地应用于微博的各个业务,如Feed流、热门微博、消息推送、反垃圾、内容推荐等。
值得注意的是,深度学习作为人工智能和机器学习的分支,尤其得到更多的重视与应用。深度学习与众不同的特性之一,在于其能够对原始特征进行更高层次的抽象和提取,进而生成区分度更高、相关性更好的特征集合,因此深度学习算法还经常被叫作“自动特征提取算法”。由此可见,无论是传统的基础算法,还是时下最流行的深度学习,特征的选择与提取,对于模型最终的预测性能至关重要。另一方面,优选的特征集合相比原始特征集合,只需更少的数据量即可得到同样性能的模型,从系统的角度看,特征选择对机器学习执行性能的优化具有重大意义。
特征选择在微博经历了从最原始的人工选择,到半自动特征选择,到全自动特征选择的过程,如图1所示。我们将详细介绍微博在各个阶段的实践与心得。
在互联网领域,点击率预估(Click Through Rate)被广泛地应用于各个业务场景,在微博,CTR预估被应用在各个业务的互动率预估中。对于CTR预估的实现,逻辑回归(Logistic Regression)是应用最多、最广泛而且被认为是最有效的算法之一。LR算法的优势在于提供非线性的同时,保留了原始特征的可解释性。LR模型产出后,算法人员通常会对模型中的权重进行人工审查,确保高权重特征的业务含义是符合预期的。为了提升LR算法的预测性能,业务人员与算法人员通常会根据对业务的理解,人工选择各类特征(基于内容的特征、基于用户的特征、基于环境和场景的特征等)或进行特征之间的组合。对特征进行人工选择的弊端显而易见,首先要求相关人员对业务场景有足够的熟悉和了解,通过自身的领域知识区分高区分度特征和低区分度特征。仅此一项就引入了太多的变数,不同人员对业务的理解不尽相同,很多时候人工选择具有主观性和局限性。再者,在人工特征选择完成后,需要整理相关数据进行重训练,从而验证新引入的特征对模型预测性能的提升是否有效,这是一个反复迭代的过程,期间会消耗大量的时间和精力。通常需要重复多次,才能选出少量高区分度的业务特征,由此可见,人工选择特征方法的性价比是相对较低的。
针对人工选择存在的问题,微博这几年开始引入自动化特征选择方法作为人工选择的辅助。首先尝试的是相关性法,即根据特征本身的相关性或特征与标签之间的相关性来对特征进行选取和过滤。方差法是特征自相关性的典型代表,通过计算特征自身的方差值,来反映特征的变化程度,方差趋近于零的特征基本上无差异,对于样本的区分起不到关键作用。因此,通过方差法,可以过滤掉区分性差的特征。既然特征的选取取决于其对标签区分的贡献,我们不如直接计算特征与标签之间的相关性来选取贡献大的特征,而丢弃掉贡献小(相关性小)的特征。在该类方法中,比较典型且应用广泛的有:皮尔森系数、卡方检验、互信息。方法的原理大同小异,考虑到卡方检验能够同时支持连续和离散特征,在微博我们采取了卡方检验对特征进行初步筛选。
传统的特征选择方法从方式上大致分为三大类,即相关性、包裹法和嵌入法。刚刚提到的根据特征与标签之间的相关性对特征进行选取的方法就是相关性法。在对包裹法和嵌入法进行尝试之前,为了能够详尽特征选择的方法,我们尝试利用降维的方式进行特征选择。从严格的意义讲,降维法不能叫作特征“选择”/“筛选”方法,因为降维法(如PCA、SVD)原理是将高维度特征压缩到低维空间中,压缩的过程中造成了信息的丢失和损失,却在低维空间保留(生产)了新的区分度更高的特征集合。所以降维法是对原始特征集合进行了变换和扭曲,生成了新的特征空间和集合。降维法的优点显而易见,即无需用户干预,自动对特征空间进行变换和映射,生产高区分度的特征集合;缺点是其在低维空间生产的特征不具有可解释性,新的特征集合对业务人员和算法人员来说是不可读的,无业务意义的。这个特性与后文提及的通过DNN来提取特征有相似之处。
前面提到特征选择的三大法宝,即相关性、包裹法和嵌入法。鉴于包裹法与嵌入法都是通过模型训练效果来反推特征的选取与过滤,微博将这两种方法进行了统一的尝试与实践。该类方法的思路是先根据现有的特征集合和数据,对模型进行训练,然后根据模型的效果(如AUC、准确度等)和特征自身的权重大小来对特征进行选取。如对于包裹法,比较经典的方法是逐步递减原始特征的集合,观察所训练模型效果的变化,当模型效果出现显著下降时,即认为下降前一组的特征集合是最佳候选集合。对于嵌入法来说,比较典型的方法是通过L1或L2正则的特性,通过模型训练得到各个特征的权重,如L1具备低绝对值碾压特性,即对于权重较低的特征,直接将其权重截断为零,这样保留下来的即认为是具有高区分度的特征集合。这类选择方法基于模型本身对特征进行过滤,因此选取出的特征集合有效性很好,但是该类方法同样存在明显的弊端:首先,方法本身看上去似乎相互矛盾,特征选择的目的是为了训练出预测性能更好的模型,而这里却通过先进行模型训练,再做特征选择,总有一种“鸡生蛋,蛋生鸡”的感觉。再者,通过模型选取特征,需要对模型进行训练和评估,相当于每次都把机器学习流程迭代一遍,尤其是包裹法,需要不断的剔除可疑特征、重训练的过程,在模型效果大幅降低前,经过数轮的计算和迭代。其次,有一个很重要的细节经常被忽略,即用于特征选择参与模型迭代训练的数据,不能参与最终的(特征选择完成后的)模型训练,否则会带来臭名昭著的过拟合问题,道理显而易见。
前文提到深度学习又叫“自动特征提取算法”,天生自带特征提取属性。但在介绍“自动特征提取算法”之前,我们有必要认识一下自动特征提取的前辈:GBDT(Gradient Boosting Decision Trees)。GBDT通过不断地拟合上一棵决策树的残差来不断逼近目标值,决策树的信息增益算法结合GBDT特别的组合结构,造就了其叶子节点天生的高区分度特性。通过将原始特征导入GBDT进行训练,再将得到的模型对原始数据进行预测,就得到了GBDT转换/映射后的叶子节点特征集合,再将这个叶子节点组成的特征集合导入其他算法(如LR)进行训练。GBDT的优点是特征自动选择,区分度高;缺点与PCA和后面的深度学习类似,即新产生的特征不具备可解释性。
深度学习算法由神经网络衍生而来,主要是指具有不同网络结构(如用于图像特征提取的CNN卷积神经网络结构、用于时序相关的RNN循环神经网络,以及由全连接组成的DNN深度神经网络等)的深层神经网络。神经网络的每一层神经元都会根据上一层的输入做非线性激活,并将其输出作为下一层神经网络的输入,每一层神经元都可以理解为某一个层次的特征抽象,每一层网络都可以形成一个新的特征集合,这种天然的特性为我们进行特征选择提供了新的思路。通过构建深层神经网络,并将最后一个隐层的神经元集合作为特征抽象,后续可以接入各种分类算法,如LR、决策树、朴素贝叶斯等进行预测。
随着新技术的出现与成熟,微博在特征选择的演进上也与时俱进,在微博业务发展的不同阶段,曾经分别对这些选择方法进行实践与尝试,图2总结了不同特征选择方法对于模型预测性能的提升效果,仅供读者参考。
图2对比数据来自同一份数据集(特征选取与训练分开,各百万条样本)与同一组特征集合(118个原始特征),采用不同的特征选择方法对特征进行过滤、选择、提取。橘色曲线表示对原始特征进行特征选择后,不同特征选择方法保留的有效特征个数,如用GBDT进行特征选择后,仅仅留下44个有效特征。保留特征的个数主要取决于算法本身与业务人员的选择。如对于方差法、卡方检验等相关性排序法,需要业务人员和算法人员指定保留的特征个数;而像L1正则与GBDT,则完全由算法本身根据数据分布特点,来决定原始特征的去留。最后的DNN即深度学习,也是根据经验人为指定最后一层隐层的特征个数。蓝色曲线表示采用不同特征选择方法后,用另一份单独的数据集进行训练后的模型(LR模型)预测性能,我们这里用业界应用广泛的AUC(Area Under Curve)来衡量模型的有效性。方差法和卡方检验完全取决于特征本身及其与标签的相关性,因此提升幅度有限。正则化与GBDT等采用模型倒推的方法进行特征选取,因此预测性能有显著提升。深度学习能够在多个层次对特征进行抽象,最后一层隐层代表了特征的最高层次抽象,因此区分度最好。
本文首先介绍了不同特征选择算法的各自特点及其在微博业务应用中的演进历程,最后通过对比试验,给出了不同方法对于模型预测性能效果的提升,希望能够对读者有参考价值。
作者简介:
吴磊,新浪微博算法平台高级工程师,主要负责以Spark为核心的大数据计算框架、机器学习平台的设计和实现。
张艺帆,新浪微博算法平台算法工程师,主要负责微博个性化排序、推荐等模型的选择、优化;特征的处理与选择等。本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》( 责编/郭芮 )