国外推荐系统实践
-
Facebook的深度学习推荐系统
-
Airbnb基于Embedding的实时搜索推荐系统
-
YouTube深度学习视频推荐系统
倒序回归:校准
DLRM(Deep Learning Recommender Model)
特征工程
类别、id类特征用one-hot编码生成稀疏特征
数值连续特征
Embedding层
one-hot向量经Embdding层将其转换成维度为n的Embedding向量
年龄、收入等连续特征concat成特征向量,经MLP转化成维度n的向量
神经网络层
每类Embedding向量还可进一步通过神经网络层做转换
根据调参和性能评估的情况来决定是否引入神经网络进行进一步的特征处理
特征交互层
Embedding两两内积,让特征之间做充分的交叉,与之前连续特征对应的Embedding连接,输入后续的MLP
https://arxiv.org/abs/1906.00091
image-20220106151654611.pngFacebook推荐系统实践
DLRM并行训练方法
目标拟合层
最上层的蓝色三角形代表另一个全连接MLP,在最后一层使用sigmoid函数给出最终的点击率预估
并行训练
-
并行自研AI平台,采用cpu+gpu组合,没有ps(参数服务器)分布式架构
-
融合模型并行和数据并行
-
Embedding部分采用模型并行,减轻Embedding参数带来的内存瓶颈问题
-
一个设备或者计算节点上仅保存一部分参数
-
每个设备并行小批量梯度更新
-
-
MLP部分采用数据并行,并行进行前向和反向传播
- 每个设备利用部分数据计算梯度,再汇总所有梯度进行参数更新
-
https://github.com/facebookresearch/dlrm
数据流架构
数据等待窗口的设定
-
曝光发生后,要等待多久才能判定一个曝光行为是否产生了对应的点击
-
过大,实时性受到影响
-
过小,样本拼接异常
-
-
对转化延迟预估
-
全量更新减少误差累计
分布式架构与全局统一的action id
- 请求过程存在多展示位,简历统一id便于拼接
数据流保护机制
- 数据异常检测机制,一旦发现实时流数据分布发生变化,立即切断在线学习过程
Airbnb推荐系统实践
基于Embedding的实时搜索推荐系统
为了捕捉用户短期和长期兴趣,对用户和房源分别进行Embedding,进而利用Embedding的结果构建出诸多特征,作为排序模型的输入。
两种Embedding生成方法:
image-20220106152444658.png基于短期兴趣的房源Embedding方法
利用用户Session内的点击行为序列进行房源的Embedding
数据预处理:
-
房源详情页停留超过30秒才算序列的一个有效点击
-
超过30分钟无操作行为视为Session中断
Word2Vec:skip-gram model训练Embedding
- 负样本随机从所有房源中选取一个房源
预定会话:最后一个房源是被预定房源
将预定信息引入Embedding,使推荐列表更倾向于之前预定成功Session中的房源
不管预定房源在不在Word2Vec的滑动窗口中,都假设这个被预定房源与滑动窗口的中心房源相关,相当于引入一个全局上下文到目标函数中(item2vec)
负采样时,还对中心房源采样同一市场的房源集合随机采样,获得新的负样本,发现同一市场内部房源的差异性。
新房源的Embedding使用附近3个同样类型、相似价格的房源向量进行平均得到。
探索性会话:没有产生预定行为的会话
基于长期兴趣的用户Embedding和房源Embedding
为捕捉用户的长期偏好,Airbnb使用了预定会话序列。
使用预定会话序列训练Word2Vec
-
预定会话数据稀疏,难以训练出稳定Embedding
-
预定行为的总体数据量远小于点击会话
-
单一用户的预定行为很少
-
大部分房源被预定的次数很少
-
-
基于属性规则做相似用户和相似房源的聚合
-
属性名称和分桶id组成一个属性标识,例如US_it1_pn3标识房源的属性
-
用户属性标识同理
-
-
对用户和房源属性标识序列一起训练Word2vec(相同空间)
如何对用户和房源属性标识序列一起训练Word2vec?
针对某一用户按时间排序的
booking session:(l_1,l_2,...,l_m)
image-20220106155142063.png实时排序模型与特征工程
-
不直接将Embedding相似度排名作为排序结果,而是作为特征
-
UserTypeListingTypeSim:
- 用户和房源属性长期兴趣Embedding相似度
-
EmbClickSim:
- 候选房源与用户最近点击房源的相似度
-
实时性体现:
- 最近点击房源、最后点击房源等
YouTube深度学习视频推荐系统
模型训练与线上服务分离
image-20220106155408605.png image-20220106155425733.pngYoutube排序模型
特征:
-
候选视频Embedding
-
用户最近看过视频Embedding
-
语言Embedding
-
距上次观看同类视频时间间隔
-
视频对用户曝光频次(归一化的平方、开方)
-
样本年龄
输出层:
训练:加权逻辑斯特回归
服务:
image-20220106155715883.png优化目标:使模型更偏向于用户点击视频且观看时长更长(排序)
怎么建模呢? 样本不均衡问题?(医疗诊断)
加权逻辑斯特回归
-
正样本上采样
-
正样本损失函数加权
权重的确定?
-
固定权重
-
自适应权重
-
权重特征
评估指标
-
损失值
-
分类正确率
-
AUC
-
PCOC
线上排序服务
训练与测试样本的处理:
对每个用户提取等数量的训练样本,减少活跃用户模型损失的过度影响
测试集使用用户最近一次观看行为,避免数据穿越。
用户对新视频的偏好:
-
用户对新内容的偏好很明显
-
引入样本年龄特征
-
训练样本产生时刻距离当前时刻的时间
-
线上服务时为0
-
-
对比样本新鲜程度
- 分布较集中,更能描述近期的变化趋势
网友评论