「Wide & Deep Learning for Recommender Systems」- 论文摘要
Introduction#
现在推荐系统的一个难点就是同时实现 Memorization 以及 Generalization,这个难点与搜索排名问题相似。
Memorization:#
之前大规模稀疏输入的处理是:通过线性模型 + 特征交叉。通过特征交叉能够带来很好的效果并且可解释性强。但是 Generalization(泛化能力)需要更多的人工特征工程。
Generalization:#
相比之下,DNN 几乎不需要特征工程。通过对低纬度的 dense embedding 进行组合可以学习到更深层次的隐藏特征。但是,缺点是有点 over-generalize(过度泛化)。推荐系统中表现为:会给用户推荐不是那么相关的物品,尤其是 user-item 矩阵比较稀疏并且是 high-rank(高秩矩阵)
Wide&Deep#
本文中,介绍了一种新的方法,Wide&Deep,包括两部分,Wide Part 和 Deep Part。
Wide 部分:利用了广义线性模型,提高可解释性。#
在大规模的在线推荐系统中,logistic regression 应用非常广泛,因为其简单、易扩展、可解释性。LR 的输入多半是二值化后的 one-hot 稀疏特征。Memorization 可通过在稀疏特征上做特征交叉来实现,例如:user_installed_app=netflix,impression_app=pandora,当 user_installed_app 与 impression_app 的取值都为 1 时,其组合特征 AND (user_installed_app=netflix, impression_app=pandora) 的值则为 1,否则为 0。
缺点:无法学习高阶组合特征,并且需要进行人工特征工程。
Deep 部分:主要是发现训练集中未出现的高阶组合特征。#
Embedding-based 模型可以在很少的特征工程情况下,通过学习一个低维的 embedding vector 来学习训练集中从未见过的组合特征。例如,FM 与 DNN。不需要进行复杂的特征工程。
缺点:当 query-item 矩阵是稀疏并且是 high-rank 的时候(比如 user 有特殊的爱好,或 item 比较小众),很难非常效率的学习出低维度的表示。这种情况下,大部分的 query-item 都没有什么关系。但是 dense embedding 会导致几乎所有的 query-item 预测值都是非 0 的,这就导致了推荐过度泛化,会推荐一些不那么相关的物品。
总结#
Wide&Deep 结合以上两者的优点,平衡 Memorization 和 Generalization。相比于 wide-only 和 deep-only 的模型,Wide&Deep 提升显著。
推荐系统#
推荐系统可以看成是一个 search ranking 问题,根据 query 得到 items 候选列表,然后对 items 通过 ranking 算法排序,得到最终的推荐列表。Wide&Deep 模型是用来解决 ranking 问题的。
推荐系统示意图:
推荐系统会返回一个 apps 列表,这些列表中包含了 user actions,例如点击或者购买。
本文是在 Google APP store 上的推荐,主要流程为:
Query: 当我们打开 APP Store 的时候,就产生了一次 Query,它包含两部分的特征:user features, contextual features。user features 包括性别、年龄,国家,语言等人口统计特征,contextual features 包括设备、时间 (hour of the day, day of the week) 等上下文特征。
Items: APP store 接着展示给我们一系列的 app,这些 app 就是推荐系统针对我们的 Query 给出的推荐。这个也被叫做 impression。
User Actions: 针对推荐给你的任何一个 APP,我们都可以点击、下载、购买等操作。也就是说推荐给你的 APP,你产生了某种行为。
Logs: Logs = Query + Impression + UserAction 查询、展示列表、操作会被记录到 logs 中作为训练数据给 Learner 来学习。
Retrieval:针对这一次 Query,来给出推荐列表。暴力做法:给数据库中所有的 APP 都打一个分数,然后按照分数从高到低返回前 N 个(比如说前 100 个)。机器学习方法:利用机器学习模型和一些人为定义的规则,来返回最匹配当前 Query 的一个小的 items 集合,这个集合就是最终的推荐列表的候选集。
Ranking:前面 Learner 学习到了一个 Model,利用这个 Model 对 Retrieval 给出的候选集 APP 打分!并按照打分从高到低来排序,并返回前 10 个 APP 作为最终的推荐结果展示给用户。
Recommender system = Retrieval system + Ranking system
Retrieval system:对当前 Query 构造候选 item 集。
Ranking system:对候选 item 集中的 item 进行打分,减小候选 item 集数量。得分 score 表示成 P (y|x), 表示的是一个条件概率。y 是 label,表示 user 可以采取的 action,比如点击或者购买。x 表示输入,特征包括:
User features(eg.country, language, demographics)
Contextual features(eg.device, hour of the day, day of the week)
Impression features(eg.app age, historical statistics of an app)
Wide&Deep Model 主要是进行 Ranking 部分。
Wide&Deep 模型
结构图:
The Wide Component
广义线性模型
结构图:
输入特征:
raw input 原始特征
cross-product transformation 组合特征
组合特征公式:
其中 i 表示输入 x 的第 i 维特征,cki 表示这个第 i 维度特征是否要参与第 k 个组合特征的构造。
主要是 category 特征进行 one-hot 编码后进行交叉组合,例如,AND (gender=female, language=en)。
The Deep Component
这里采用了 DNN 模型,结构图如下:
对于分类特征,原始输入是特征字符串(例如 “language = en”)。 首先将这些稀疏高维分类特征中的每一个转换成低维且密集的实值向量,通常称为 embedding vector。embedding vector 传给隐藏层进行前向训练。隐藏层的激活函数通常使用 ReLU。
系统实现
本文中采用的方法:
- 训练方法是用 mini-batch stochastic optimization
- Wide 组件是用 FTRL(Follow-the-regularized-leader) + L1 正则化学习。
- Deep 组件是用 AdaGrad 来学习。
apps recommender 结构图:
数据处理
- Categorical Features(种类特征)map 成 id
过滤掉出现次数少于设定阈值的离散特征取值,然后把这些全部 map 成一个 ID。离散特征取值少,就直接编号。多的话可能要 Hash - Continuous Features(连续特征)通过分位数规范化到 [0,1]
先把所有的值分成 n 份,那么属于第 i 部分的值规范化之后的值为 (i - 1)/(n - 1)。
训练
- Wide Part:
Cross Product Transformation (组合特征) - Deep Part:
Continuous Features + embedding(Categorical Features)
Embedding 维度大小的建议:
Wide&Deep 的作者指出,从经验上来讲 Embedding 层的维度大小可以用如下公式:
其中 n 是原始维度上特征不同取值的个数;K 是一个常数,通常小于 10.
结论
推荐系统中 Memorization 和 Generalization 都十分重要,Wide&Deep 模型实现了对 Memorization 和 Generalization 的统一建模。
本作品采用《CC 协议》,转载必须注明作者和本文链接