前言
在搜广推业务做了3年工程,最近终于有空整理下,完整的梳理下自己的知识架构(预计分为理论篇/工程篇)
Wide & Deep论文链接:https://arxiv.org/abs/1606.07792
另外王喆老师《深度学习推荐系统》中,"3.6 Wide&Deep模型——记忆能力和泛化能力的综合”一节中对 Wide & Deep模型有比较详细解释(结合书中对模型的发展的迭代,可以对深度学习有更深层次的了解)
阅读本文后,希望读者可以:
1. 了解Wide & Deep 应用的场景及解决的问题
2. 了解Wide & Deep 具体实现
3. 了解Recommender Systems大致的流程
4. 省去找更多参考资料的时间(搜索资料的过程中,翻到高质量的几篇均附在了参考资料中)
一、论文问题场景
推荐系统(Recommender Systems)本质上给不同的用户提供不同推荐信息(如广告/商品/人物等,论文的场景是GooglePlay中的App推荐),即所谓的“千人千面”(面对不同的用户给出不同的展示信息)。
要做这点,推荐系统 需要有两个输入:用户信息 +App信息,然后将用户信息和App信息进行“一定规则的计算”,将最匹配的app展示给用户。
上述流程中,“一定规则的计算” 是 最复杂/核心的部分(从算法角度讲,要准确高效;从工程的角度讲,要低延时资源占用少,这里仅从算法角度讨论)
我们期待 这个算法能同时拥有以下两种能力:
- Memorization(记忆) can be loosely defined as learning the frequent co-occurrence of items or features and exploiting the correlation
available in the historical data.- Generalization,(泛化) on the other hand, is based on transitivity of correlation and explores new feature combinations that have never or
rarely occurred in the past.
简而言之,Memorization 可以提供与用户信息强关联的推荐(如推荐 曾浏览过的某一类别App),Generalization 可以提供给用户更多样性的推荐
二、论文解决方法
针对Google Play 推荐App的场景,提出了“Wide & Deep” 结构,同时拥有 “Memorization” 和 “Generalization” 两种能力
2.1 Wide部分
Wide部分 是上图中右侧的”Cross Product Transformation(特征交叉)“(文中仅提及了这个交叉特征,应该还有结合其他的特征)
上面是“Cross Product Transformation”的公式,论文以AND逻辑举了个特征交叉的例子: “AND(gender =female, language=en)”,其中gender和language分别是特征,<gender, language>作为逻辑的输入,仅当值是<female,en>时,输出才为1,其他特征取值均为0)。
个人理解特征交叉,是由于Categorical 特征本身过于稀疏,单一特征表达能力差,需要使用特征交叉的方式进一步提取特征信息(论文中仅举了一个AND例子,在实际的业务场景中,具体交叉行为可以根据特征的业务信息自行实现)
2.2 Deep部分
Deep部分使用DNN(上图中是左边简单的3层MLP),这里关注几点:
- wide侧用于Cross Product Transformation 的特征是人工选择的
- Categorical Features 先转成了 Embedding向量,再Concat到一起 输入到DNN
- wide & deep 部分的所有特征,都作为了DNN(Deep部分)的输入
2.3 训练
- Wide部分接了个LR模型,采用了L1 FTRL 算法
- Deep部分采用AdaGrad优化器
正向传播时,Wide & Deep部分 的输出结果 线性融合 -> sigmod -> probability of click -> Logistic Loss
计算loss函数时,样本的label信息
- label=1,用户点击了app
- label=0,用户没有点击app
三、论文结论
论文除了提出Wide & Deep结构,有意思的一点是还展示了工程实现信息,将整个”Recommender System“ 的Pipeline给了出来
上面的图包含了两个信息:
- 一次Query流程中,包含了 召回/排序 两个阶段;候选集大小的变化:All Items -> O(100)-> O(10)
- 模型训练流程:User Actions -> Log -> (样本信息) -> Model Training
当然实际的推荐系统链路要复杂的多(如Query流程 还有海选/粗排/精排等阶段,样本数据流链路也相当复杂),不过刚入门的同学看到这个图可以对推荐pipeline有个大概的映像,并以此可以类推到其他场景,如电商商品/广告/社交关系的推荐。
四、参考资料
4.1 部分名词
论文在给出的网络结构中,提到了”Continue Feature“和”Categorical Feature“,
Categorical Feature :离散变量,常用Hash编码(其他常用编码方式参考类别型(categorical feature)变量的处理),一般先转成Embedding后再进入网络
Continue Feature:连续变量, 一般直接作为DNN网络结构的输入
4.2 资料收集
由于Wide & Deep论文过于经典,不少人已经撰文写了相关的内容,学习的时候多有参考,这里一起列下:
- 经典精读-Wide & Deep for Google 2016
- 石塔西:看Google如何实现Wide & Deep模型(1)
- 见微知著,你真的搞懂Google的Wide&Deep模型了吗?