心法利器[14] | 任务方案思考:人工特征机器学习
【前沿重器】
全新栏目,本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。
往期回顾
0 小系列初衷
自己接触的项目大都是初创,没开始多久的项目,从0到1的不少,2020年快结束,感觉这个具有一定个人特色的技术经验可以在和大家分享一下。
计划篇章:
(已完成)文本分类篇。针对NLP文本分类任务。 (已完成)序列标注(NER)篇。针对命名实体识别、序列标注任务。 (已完成)文本匹配篇。针对语义相似度计算、向量匹配等问题。 人工特征学习篇。针对多特征的机器、深度学习方案。
开始我把这个自从学了统计学习方法以来,参加了很多的项目,也用到这个方法,但是问题大都比较零散比较小,但是也有一些工业级用到的技巧,这次给大家简单总结一下吧。
1 机器学习的场景
很多常规的问题,都是从规则来的,当规则足够多了,大家就会开始尝试把这些规则通过特征的形式汇总起来,找到更加模糊泛化的边界,于是机器学习方法就可以开始被应用,来举个比较常见的例子:
推荐系统的排序。
我们都知道推荐系统里最重要的信息可以说是点击了,然而推荐系统项目前期往往没有足够的点击数据供我们训练,因此会用规则来过渡,随着数据的增加,我们肯定要用更加泛化的方法,而由于原来的规则对排序优化起到很重要的作用,因此这些变成特征也是理所当然了,机器学习的特征也就有了。
2 方案选型
2.1 特征层面
机器学习的效果好坏很大程度和特征有关,甚至有“特征选不好,调参调到老”的说法,比赛里面,构造一个好的特征对充分也非常有好处,因此选择好的特征也就有很重要的作用。此处在特征层面的技巧,我列举一下:
交叉特征。很多机器学习其实却不到“且”这种特征,因此做一些交叉其实很好处。 绝对值变相对值。最常用的就是归一化,但是更多的有的时候我们可以算一些相对值来辅助计算,例如增长率之类的。
当然,要升级整个体系,我这里再介绍一个:离散化onehot,这种方式甚至能让机器学习的效果再升一个台阶。
连续的特征离散化,例如经纬度(用geohash)、时间(直接离散)、距离(等距分桶)。 onehot。离散特征统统onehot。这种方式从经验来看,能大幅提升对非线性问题的解决能力,因此模型能够分多个情况来处理哥哥区间上特有的问题,参考CART树。
2.2 模型
模型一直是机器学习里,在学习阶段,最为关键的一环,统计学习方法也好,西瓜书也好,大家都抱着啃了很久,包括我在内,但是实际运用中我们只选择我们认为最合适、最高效的几个,换句话,选最稳定的方案,我这里推荐两个。
LR,逻辑斯蒂回归。 XGBOOST,一度被认为是比赛神器。
用来做分类的baseline绰绰有余,效果不好的时候多看看特征。
然后,在这些基线建立起来后,再根据场景进一步去挖掘适合自己的新方案。
3 优化手段
其实上面离散化+onehot是一个有效的提升手段,但是个人认为这个方法可以在基线开发时就考虑进去,因此写在上面,剩下的我列在下面。
一些统计特征,用户点击、曝光之类的,可以加入特征,另外一些用户偏好就是通过统计特征计算得到的。 深度学习等到用户量再上一个台阶,且发现一些需要魔性特征才能解决的问题时再来整,如点击序列信息。 高低频分开,这里指的包括用户、物料以及特征。 新用户、新物料往往信息少,还拿来训练反而影响整体效果,不如分开处理,高频用户物料机器学习,低频的走规则、试探甚至都会还不错。 特征也是如此,距离地点特征,冷门地点的计算其实并不完全,效果不好,不如直接归到“冷门地点”的特征里,效果可能会不错。
任何方法都有其适用场景,因地制宜是方案选择的核心标准,而方法积累多了,选择的空间也会变大,我和大家一起积累学习。
4 小结
人工特征的机器学习任务,相比NLP的任务,具有更加多的应用场景,有好的特征其实更容易出好的效果,而且数据依赖性比深度学习低太多,之前甚至看过NLP领域用统计特征+机器学习的方式超过深度学习(不是TF-IDF),所以花点时间探索不失为一条路子。
5 系列小结
一连4周时间总结了自己4个方向的基线方案,这些方案都不算高级,但是实用,也都是我在日常工作中用到过得东西,已经内化成了“自己的东西”,而不是舶来品,拿来主义,在2020年结束之际总结下来,也算是对自己思路的一个梳理,但这不是终点,未来我还会探索跟过更有用的方法,适时升级自己的知识库,或者说升级方法库,手里的武器多了,能应对的敌人就多了起来,而手里的武器厉害了,也就能够应对更强的敌人。