作者:黄永刚
Practical machine learning tricks from the KDD 2011 best industry paper
研究机器学习的论文通常倾向于提出一种新理论或算法,对于问题背景、数据表示、特征工程等往往是只言片语,然而这些东西对于读者的理解和算法的重现是非常重要的。鉴于论文目的和格式的约束,只能用有限的文字去描述更核心通常比较抽象的思想。
因此,对于在工业系统中应用论文中的方法所必须的实现细节,论文中很少进行描述。机器学习的这些方面,被称为‘平民智慧’,大多数来自同事间的讨论、博客、论坛、开源库等一手的经验之谈。
不同于以上的描述,有些会议设有专题对工业界的方法进行追踪,提出了很多能够提高机器学习在实践应用中效率的见解。我们下来要介绍的这篇文章,它来自于goolge荣获KDD 2011 最佳工业论文,关于检测广告作弊。
Detecting Adversarial Advertisements in the Wild
D. Sculley, Matthew Otey, Michael Pohl, Bridget Spitznagel,
John Hainsworth, Yunkai Zhou
http://research.google.com/pubs/archive/37195.pdf
看到这个主题,第一个想法,这不就是机器学习界的“hello world”吗!随便找一本相关的书籍或者教程里面都有,对于正样本集和负样本集分别训练一个朴素贝叶斯,就OK了。很显然,这和Google的应用场景相差甚远,这篇文章阐述了现实当中的许多挑战,是google商业应用需要解决的关键问题。
这篇文章提出了很多不同的方法和技巧,我在这里只简单的描述文章中的重点,我极力鼓励对此感兴趣的读者直接去查看他们的论文1和演示文稿[^slide]。
2:https://www.eecs.tufts.edu/~dsculley/papers/adversarial-ads.pdf
http://www.eecs.tufts.edu/~dsculley/papers/Detecting_Adversarial_Advertisements.pdf
1. 分类(Classification)
机器学习的核心方法是分类:这个广告展示给用户是不是OK?这里有一些源代码关于机器学习的核心方法3
方法集成
获得Netflix奖的方法、微软的Kinect及IBM Watson,这些系统都使用了集成方法,将许多不同模型产生的结果集合起来做出最终的预测。这个方法在当前众多的方法中可以称得上是最省心的方法了,如果你的目标是预测精确度,至少也应该考虑使用集成的方法。
只执行高可靠的预测
衡量预测的不确定性并适当的对系统的执行条件进行调整是非常必要的。在这个应用中,需要做出合理的决策,因此,当预测结果可靠性不高时,系统应该不执行相应的动作。
找出大量的特征,使用L1正则进行特征选择
特征表示是机器学习设计中的关键问题,它涵盖了非常广的范围:对于广告有表述的用词、表述主题、链接到的网站、链接落地页、广告商等等,会产生大量的特征,使用L1正则强制稀疏化特征集,最终得到较少的与结果关联性强的特征。
特征降维
处理高维特征这是十分实用的方法,通过降维将特征映射到低维空间。
使用排序来处理不均衡问题
这种极不均衡数据问题是典型的监督式分类中的疑难杂症,广告中大多是正常数据,只有极少量是异常数据[此类问题十分常见]。这类问题有很多的处理方法,在这里他们通过将这个问题转化为排序问题,获得了性能上的改进。恶意广告应该比正常广告获得更高的排名。
使用分类器的级联
还是不均衡问题,对于负样本中也存在不同的种类,如恶意软件刷点击、假冒伪劣商品等。这里同时采用了两阶段的分类。第一阶段判断正常或者异常?第二阶段,如果这个广告属于异常,是不是属于异常A,是不是异常B,以此类推。
2. 可扩展性、工程实现、操作
不同于为了发论文所写的实验性软件,线上的机器学习系统是有工程和商业背景。系统的可扩展性、可用性、可靠性、可维护性也十分重要。
MapReduce:预处理(map), 算法训练(reduce)
稍微有些意外,他们发现性能瓶颈是来自于从磁盘加载数据和提取特征的阶段。因此,他们使用多个map作业并行执行,用一个reduce来做随机梯度下降分类训练(Stochastic Gradient Descent, SGD)
部署监控
为了使系统始终如一的工作,需要监控一些数据,以便于一些异常出现的时候能够做进一步的研究,如:
- 持有数据上的precision/recall
- 输入特征的分布
- 输出值的分布
- 输出类别的分布
- 人工定期评价系统质量
丰富模型对象
在机器学习的论文中,一个预测模型经常归结于数学思想即学习到的特征权重向量。然而,在软件工程实践中,作者认为将“模型对象”拓展更广泛的范围会十分有用,例如包含特征转换、概率校准、训练超参等。
3. 人工经验
基于商业考量,提出通用的解决方法需要人类专家的参与。
有效的利用专家经验
对于界限模糊的情况或比较难分辨的情况,人工专家手工进行标注,然后采用主动学习策略识别这些高价值数据。他们为人类专家提供了可以获取信息的用户接口,以便发现新出现的异常威胁。
允许人为的编制规则
相比于全自动化的机器学习方法,有的时候人类才是知道如何做才最好。因此,他们允许专家们在适当的时候,编制一些规则进去。
人为评估
专家的判断也不能理解为事情的本质,专家提供的标签也会因人为因素产生错误,不同的专家对于各个类别理解的也不一样。为了调整这种不确定性, 请多个专家对同一事物进行判别来调整标签的可信度。如果有兴趣可以参考这里4.
最后,他们阶段性进行非专业评估以确保系统对于大众来说工作正常。用户满意是最终目标,如果进行量化衡量就完美了。
- https://www.eecs.tufts.edu/~dsculley/papers/adversarial-ads.pdf
[^slide]:http://www.eecs.tufts.edu/~dsculley/papers/Detecting_Adversarial_Advertisements.pdf ↩ - https://www.eecs.tufts.edu/~dsculley/papers/adversarial-ads.pdf
[^slide]:http://www.eecs.tufts.edu/~dsculley/papers/Detecting_Adversarial_Advertisements.pdf ↩ - http://code.google.com/p/sofia-ml/ ↩
- http://web.stanford.edu/~jurafsky/amt.pdf ↩