分享
从0-1搭建推荐系统
输入“/”快速插入内容
从0-1搭建推荐系统
飞书用户2749
4月3日修改
互联网的增长引擎——推荐系统
在推荐系统领域,特别是 YouTube 的所在视频推荐领域,主要面临三个挑战:
1.
Scale(规模大)
:海量的 user 与 item,很多现有的推荐算法能够在小的数据集上表现得很好,但在 YouTube 效果不佳。 YouTube 需要构建高度专业化的分布式学习算法和高效的服务系统来处理庞大的用户和视频数量。
2.
Freshness(更新快)
:这体现在两方面,一方面视频更新频繁,需要在新发布视频和已有存量视频间进行balance;另一方面用户行为更新频繁,模型需要很好的追踪用户的实时行为。
3.
Noise(噪声)
:相较于庞大的视频库,用户的行为是十分稀疏的,同时,很难获得用户满意度的显示信号,基本上能获得的都是用户的隐式反馈信号。噪音的另一个方面就是视频本身很多数据都是非结构化的(音频或视频数据)。这两点对算法的鲁棒性提出了很高的挑战。
1.
系统总览
推荐系统漏斗
💾
•
上图中中的
millions
、
hundreds
、
dozens
:表示数据量的级别,全部的 video corpus 大概是
millions
级别,经过
candidate generation
之后大概是
hundreds
级别,经过
ranking
之后大约是
dozens
级别。
•
Candidate Generation Model:输入包括 millions video corpus、user history and context,对召回系统的要求是“低延时”,旨在快速高效地筛选部分视频集合。
•
Ranking Model:输入包括 hundreds video corpus、user history and context、other candidate sources、video features,旨在得到“高精度”的 TOP N。
2.
召回-候选集生成
2.1
问题建模
将
召回
建模成一个“
超大规模多分类
”问题。即在时刻
𝑡
,用户
𝑈
(上下文信息
𝐶
)会观看
item 𝑖
的概率(每个具体的视频视为一个类别),用公式表达如下:
💾
•
上式为一个
softmax
多分类器。
𝑉
是视频库中所有视频的
集合
,数量在
百万级别
。
•
其中
𝑢
为用户表征
“embedding”
,而
𝑣𝑗
则是视频
𝑗
的
embedding
向量。
DNN
任务是根据用户的历史和
context
来学习
用户的
embedding
向量。
2.2
模型结构
DNN 架构如下图所示:
💾
整个模型架构是包含
三个隐层
的
DNN
结构。输入是用户
浏览历史
、
搜索历史
、
用户基础
信息和其余上下文信息
concat
成的输入向量;输出分
线上
和
离线
训练两个部分。
💾
离线训练
阶段
输出层
为
softmax
层。
线上
则直接利用
user
向量查询相关商品,最重要问题是在查询的性能。利用类似局部
敏感哈希
(Locality Sensitive Hashing)。
2.3
输入特征
使用
DNN
的一个关键优点是,
DNN
的输入可以方便的处理
离散
和
连续
变量。
2.3.1
主要特征
💾
•
历史搜索
query
:把历史搜索的
query
分词后的
token
的
embedding
向量进行平均,能够反映用户的整体
搜索历史
状态
•
用户基础信息
:性别、年龄、地域等
•
其他上下文信息
:设备、登录状态等
2.3.2
example age(视频上传时间)特征
•
为了拟合用户对
fresh content
的
bias
,模型引入了“
Example Age
”这个
特征
,sample log 距离当前的时间作为example age。
例如:
24小时前,用户观看该视频,会产生日志,这个
example age
就是
24
。而在线上服务阶段,该特征被赋予 0 值甚至是一个比较小的负数。这样的做法类似于在
广告排序
中
消除
position bias
。