很多人都把AutoRec看作是深度学习在推荐系统领域的开山之作,它将AutoEncoder这样一个自监督的简单模型引入到了推荐之中,并获得了不错的效果,让人们见识到了深度学习在推荐系统中能发挥的强大作用.而2016年时微软提出的DeepCrossing模型才是真正将深度学习带入推荐系统的完整应用,它完整的解决了特征从特征工程、稀疏向量的稠密化、多层神经网络进行优化目标拟合等一系列深度学习在推荐系统中的应用问题,为后续深度学习在推荐系统的应用研究打下了良好的基础,对以后各种深度推荐系统的设计有很好的借鉴意义.
AutoRec
当然,这里使用的AutoEncoder的结构十分的简单,说是深度学习,网络的层数也不过3层而已(输出层->隐藏层->输出层),结构也全是全连接的形式. 现在看来,可以说是毫无新意可言.这里我主要从我对深度学习的理解的角度,来分析一下AutoRec为什么有效.
AutoRec的学习过程十分简单,实际本质上就是简单的将协同过滤使用神经网络自动学习而已.它也分为基于Item和基于User的两种方式:
- 基于User就是把user对item的所有评分作为user向量,n个user就有了n个样本,然后用这些样本来训练一个AutoEncoder模型,这样只要输入User的初始向量,就可以得到重建之后的User对所有Item的评分向量,排个序就可以直接推荐了;
- 基于Item就是把item的所有用户打分作为Item向量,m个Item就有了m个样本,同样用这些样本训练一个AutoEncoder模型,这样把所有的原始Item向量输入到模型,经过计算就可以得到重建之后的所有Item向量,也便间接得到了所有User对所有Item的评分,接下来也是排序推荐.
显而易见的,使用User-AuroRec的好处是一次输入直接出打分结果,而Item-AutoRec却要把全部Item都计算一遍才能出结果;当然,劣势也很明显,User向量往往非常稀疏,很可能会影响模型最终效果.
那么,我们来思考一下,为什么可以通过这种重建函数来达到获得新的得分从而作为推荐排序的依据呢.
这里我说一下我个人的理解.显然,在训练的过程中,优化器想要减小相应的损失,就会最大限度的去拟合尽可能多的特征相一致的结果,于是在不断拟合的过程中,特征相似的Item向量或User向量的重建向量将逐渐趋向于一致.而对于原始的向量,每个User所接触过的Item毕竟是少量的,但是其他有不同空缺Item的User之间相互弥补了相应的打分空缺,因此,在一定程度上相当于找到了最可能的打分.
Deep Crossing
明眼人都能看出来,AutoRec这无脑的简单结构表达能力肯定十分有限,真正的应用端必然难堪大用.于是,我们来看一下,Deep Crossing这个完整的全套的深度学习用于推荐系统的方案,了解了Deep Crossing,想必也就对那些后来的深度学习推荐系统可可见一斑了.
DeepCrossing的应用场景是微软Bing中的搜索广告推荐:用户在使用Bing搜索,输入搜索词后,搜索引擎除了会返回相关的搜索结果,同时会返回搜索词相关的广告,这是大多数搜索引擎的主要盈利模式,因此尽可能的提高广告的点击率,也就是要准确的预测广告点击率,并一次作为广告排序的依据是重中之重,因此DeepCrossing优化的目标就是不断提高广告点击率预估的准确率.
针对这个使用场景,微软使用了这样一些特征:
特征 | 特征含义 |
---|---|
搜索词 | 用户在搜索框中输入搜索词 |
广告关键词 | 广告主为广告添加的描述产品的关键词 |
广告标题 | 字面意思.. |
落地页 | 点击广告后的落地页面 |
匹配类型 | 广告主选择的广告-搜索词匹配类型(包括精准匹配/短语匹配/语义匹配) |
点击率 | 广告的历史点击率 |
预估点击率 | 另一个CTR模型的CTR 预估值 |
广告计划 | 广告主创建的广告投放计划,包括预算/定向条件等 |
曝光样例 | 一个广告曝光的例子,该例子记录了广告在实际曝光场景中的相关信息 |
点击样例 | 一个广告点击的例子,该例子记录了广告在实际点击场景中的相关信息 |
这些特征可以分为三类:
- 类型特征: 可以被处理成one-hot或者multi-hot向量;
- 数值型特征: 直接拼接进特征向量;
- 待处理特征: 进一步处理特征,抽出类型特征或者数值特征(比如广告计划中有一堆特征,预算可以作为数值特征,而定向条件又可以作为类别特征)
经过处理形成特征向量的表达后,就可以通过DeepCrossing模型进行CTR预估了.先来看一下DeepCrossing的网络结构:
主要就是看一下网络这三个隐藏层和输出层到底干了些什么.
- Embedding层
one-hot形式的特征编码过于稀疏,于是增加一个Embedding层来使特征稠密化...
这个用法在NLP领域里用的实在太多了, 很普遍的一个做法.
2.Stacking层
主要用于解决特征交叉的问题;也是很常规的一个做法,将前面的独立特征拼接到一起,得到一个组合的全新特征.
3.Multi Residual Units层
起始就是加神网络,相当于加了几层没激活的残差网络,让模型可以更加充分的捕捉到各个特征之间的关联,也就是让特征之间得到充分的组合,大概这就是所谓的Crossing吧.
- Scoring层
就是输出相应的得分,可以用来和训练数据的目标计算损失来优化网络参数.对于CTR这样的二分类问题一般就是用一个sigmoid激活函数,而对于多分类问题的话就用softmax比较好.
吐槽
就这样,看完这个网络结构,真的会有: 就这???这种感觉吧...现在看来,这种模型太平平无奇了....甚至,实际上我在2017年做相关的搜索推荐的时候,并没有看过微软这篇论文,也早就用上深度模型/预先训练/embedding之类的东西了.感觉这些都是是个人都能想到的东西..知识别人没把它总结成论文罢了...
感慨一句,说以前的人机会更多并不是没有道理的,特别是对于普通人来说,以前有些成就是普通人凭借一己之力可以达到的,而后来所需要达成的成就,也许就远远超过一个人的能力,而需要依赖集体或是资本的积累了.马云所谓的年轻人机会更多就是瞎扯淡的....
参考资料
- 王喆的《深度学习推荐系统》