YoutuBe 推荐系统

这篇博客参考了2016年Google发表的paper《Deep Neural Networks for YouTube Recommendations》,主要讲述了Youtube如何根据用户历史行为观看记录而在线上使用的给用户推荐视频的系统结构,虽然论文有点老,但是里面很多东西还是很有启发意义的。

下面是整个系统的架构图:
在这里插入图片描述
整体来看整个系统像一个漏斗,和其他的推荐系统一样由两个主要部分组成:candidate generation 和 ranking,分别对应了粗排和精排的概念。那么在粗排阶段Youtube使用的模型如下所示:
在这里插入图片描述
首先要声明的是整个系统是离线的,其目的是针对每一个video和用户生成一个Embedding,然后在线上进行粗排召回的时候直接使用内积结果进行排序即可。可以看出整个离线模型和其他一般的推荐系统框架并没有什么不同,就是多层神经网络。但是需要注意的是,由于是在召回阶段,入模特征部分只包含了用户侧的特征,目的是生成一个用户的embedding形式,方便和视频库中的视频embedding计算相似度,然后找出TOP N作为粗排的结果。最后一层为了加快模型的训练速度并没有直接使用softmax进行训练而是使用了negative sample进行抽样。在特征工程方面加入了一个小trick:那就是加入age信息,即距离training 窗口最近的时间间隔,那么在预测的时候这个时间间隔就是0或者负值。

接下来就是ranking阶段用到的模型,总的来说和candidate generation架构是相似的,只不过多加入了一些额外的特征毕竟候选集已经被缩的足够小了。如下图所示:
在这里插入图片描述
除了candidate generation阶段用到的特征外,其中加入了一些更加精细的特征比方说用户上一次观看该视频的持续时间,同时还包括了当前预测的视频的一些特征,这样就能得到更加精细的结果。

从paper里,我们不难知道Youtube的最终预测目标是用户的观看时长,一般按照我们的直观感觉应该是一个回归问题,损失函数应该使用均方损失。但是我们看模型在serving和training阶段的损失函数和预测函数,不难发现在training 阶段,该模型使用的是被称之为“weighted logistic”即加权的逻辑回归,所加权的权重对于正样本来说就是用户点击观看的时长TiT_iTi,对于负样本来说即推荐没有观看的权重就是1;而在预测阶段模型的输出竟然是ewx+be^{wx+b}ewx+b,感觉非常的神奇。我一开始也以为是paper写错了,后来在网上查了一些资料,才发现这里面竟然是大有玄机:
由于模型的最后一层可以看成是和逻辑回归相似的函数形式:p=11+e−wxp=\frac{1}{1+e^{-wx}}p=1+ewx1,通过公式变换我们可以知道:ewx+b=p1−pe^{wx+b}=\frac{p}{1-p}ewx+b=1pp,也就是说模型的预测输出的其实就是p1−p\frac{p}{1-p}1pp。由于在训练的时候,对于正样本采用了加权的方式,正样本权重w的加入会让正样本发生的几率变成原来的w倍,即ewx+b=wp1−wpe^{wx+b}=\frac{wp}{1-wp}ewx+b=1wpwp,由于在视频推荐场景中,用户打开一个视频的概率p往往是一个很小的值,因此上式可以继续简化为ewx+b=wp1−wp≈wp=Tip=E(T)e^{wx+b}=\frac{wp}{1-wp} \approx wp=T_ip=E(T)ewx+b=1wpwpwp=Tip=E(T),即用户观看时长的期望。所以模型最终的输出值就是用户观看时长的期望,这和Youtube最终的优化目标是一致的。

其实整篇paper从模型结构上来讲感觉新颖性并不大,但是其中有一些工程上的处理细节还是很有借鉴意义的。

### YouTube 推荐系统的工作原理 YouTube推荐系统架构被划分为两个阶段:候选生成 (candidate generation) 和排名 (ranking),这在图 1 中有所展示[^1]。 #### 候选生成 在这个阶段,目标是从庞大的视频库中筛选出一组有限数量的相关候选项。为了实现这一目的,通常会采用多种机器学习模型和技术来处理用户的观看历史、搜索记录和其他交互数据。常见的方法包括但不限于: - **协同过滤**:通过分析相似用户的行为模式来进行预测。 - **内容基础法**:依据视频的内容特征(如标签、描述等)与用户偏好相匹配。 ```python import numpy as np from sklearn.metrics.pairwise import cosine_similarity def content_based_recommendation(user_profile, item_features): similarities = cosine_similarity([user_profile], item_features) top_indices = np.argsort(similarities)[0][-10:] # 获取最相似的前十个索引 return top_indices[::-1] ``` #### 排名优化 一旦获得了初步的候选人列表,在此阶段将进一步评估这些项并对其进行排序以呈现给最终用户。这个过程涉及到更复杂的算法设计,旨在最大化用户体验的同时提高平台的整体效益。考虑的因素可能有: - 用户参与度指标(点赞数、评论量) - 新鲜度加权因子 - 多样性和新颖性的平衡 ```python def rank_items(candidates, user_engagement_data): ranked_list = sorted( candidates, key=lambda x: ( user_engagement_data[x]['likes'] * 0.4 + user_engagement_data[x]['comments'] * 0.3 + freshness_factor(x) * 0.2 + diversity_score(x) * 0.1), reverse=True ) return ranked_list ``` 这两个阶段共同作用使得 YouTube 能够有效地向用户提供个性化的视频建议,从而增强其服务的价值和吸引力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值