推荐系统的架构
From https://blog.csdn.net/gxq1221/article/details/81113346 腾讯18年数据挖掘
一般都是三个模块:
- 召回:从上百万个物品中挑选出几千个候选集。
- 排序:可以包含粗排,进一步减少物品的数量。然后做精排,根据用户特征、物品特征等,通过排序模型计算,根据业务目标得出预测值。
- 后排:也叫重排,比如去重,去已读,固定类型物品插入等。主要由产品策略主导。
参考:
https://zhuanlan.zhihu.com/p/100019681 推荐系统技术演进趋势:从召回到排序再到重排。讲了很多前沿技术
怎么做召回
From https://blog.csdn.net/gxq1221/article/details/81113346 腾讯18年数据挖掘
协同过滤:基于userCF(基于行为相似的召回),基于itemCF
WordtoVec:基于内容相似的召回
参考:
《推荐系统算法实践》
怎么做排序
- LR
- FM,FFM
- GBDT LR
- DNN (Wide&Deep, DeepFM)
实时推荐设计
From https://blog.csdn.net/gxq1221/article/details/81113346 腾讯18年数据挖掘
- 样本处理:对于离线训练来说,上报后的数据先是被存储到一个分布式文件系统,然后等待离线计算任务来对样本进行处理;对于在线训练来说,对样本的去重、过滤和采样等计算都需要实时进行。像spark streaming, flink这些
- 实时特性:实时处理样本数据,拼接训练需要的特征,构造训练样本,输入流式训练模块用于更新模型。该模块的主要的功能是特征拼接和特征工程。
- 流式训练和离线训练:流式训练模块的主要作用是使用实时训练样本来更新模型。推荐算法中增量更新部分的计算,通过流式计算的方式来进行更新,比如FTRL算法是可以做像LR模型的在线学习的,而DNN模型去做在线学习会比较困难。在线训练的优势之一,是可以支持模型的稀疏存储。目前是没办法去做真正流式训练的,我们的embedding向量是每小时更新一次,就可以用最新的embedding去打分,模型拿mini-batch learning的话是可以半小时更新一次的
- 模型存储和加载:模型一般存储在参数服务器中。模型更新后,将模型文件推送到线上存储,并由线上服务模块动态加载。
我们的embedding向量是每小时更新一次。
比如说wide and Deep部分,wide部分可以用FTRL去做在线学习,deep部分是DNN是没办法去做在线学习的
参考:
From https://zhuanlan.zhihu.com/p/81752025
特征更新
From https://blog.csdn.net/gxq1221/article/details/81113346 腾讯18年数据挖掘
大部分特征都是离线特征
模型训练后上线新的实例
在线存储:因为线上的服务对于时延都有严格的要求。比如,某个用户打开手机 APP ,他肯定希望APP 能够快速响应,如果耗时过长,就会影响用户的体验。所以,针对线上的服务,需要有一个专门的在线存储模块,负责存储用于线上的模型和特征数据 。
From https://zhuanlan.zhihu.com/p/81752025
兴趣标签计算
From https://blog.csdn.net/gxq1221/article/details/81113346 腾讯18年数据挖掘
- 首先是内容建模,为了保证兴趣画像既有一定的准确度又有较好的泛化性,我们会构建层次化的兴趣标签体系,使用中同时用几个粒度的标签去匹配,既保证了标签的准确性,又保证了标签的泛化性。
我们希望有一个中间粒度的标签,既有一定的准确度,又有一定的泛化能力。于是我们尝试对关键词进行聚类,把一类关键词当成一个标签,或者把一个分类下的新闻进行拆分,生成像“足球”这种粒度介于关键词和分类之间的主题标签。我们可以使用文本主题聚类完成主题标签的构建。
至此我们就完成了对新闻内容从粗到细的“分类-主题-关键词”三层标签体系内容建模
- 在完成内容建模以后,我们就可以根据用户点击,计算用户对分类、主题、关键词的兴趣,得到用户兴趣标签的权重。最简单的计数方法是用户点击一篇新闻,就把用户对该篇新闻的所有标签在用户兴趣上加一
- 然后对兴趣得分进行次数衰减和时间衰减。这样做可以保证时间较早的兴趣会在一段时间以后变的非常弱,同时近期的兴趣会有更大的权重。
参考:
From https://zhuanlan.zhihu.com/p/52756026 用户画像构建的流程方法
冷启动问题
From https://blog.csdn.net/gxq1221/article/details/81113346 腾讯18年数据挖掘
是指哪一块冷启动?用户冷启动、物品冷启动还是系统冷启动
- 利用用户注册(拉取微信信息)时提供的年龄、性别数据做粗粒度的个性化
- 选择多样性而且具有区分度的物品来启动,了解用户的兴趣,从这些比较有区分度的物品去
对于物品冷启动
UserCF和ItemCF算法
系统冷启动
半人工,对内容进行标签标注
参考:
协同过滤的itemCF,userCF区别适用场景
来自腾讯推荐算法 https://www.nowcoder.com/discuss/88679
userCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品
itemCF给用户推荐那些和他之前喜欢的物品类似的物品
userCF在计算时将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度
itemCF将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度
userCF适用场合:时效性强,用户个性话化兴趣不太明显的领域,如新闻推荐;用户相似度矩阵不那么大
itemCF适用场合:用户个性化需求强烈的领域,长尾物品丰富,比如做图书推荐;物品数量小,物品的相似矩阵计算代价不那么大
参考:
https://www.nowcoder.com/questionTerminal/fe4243be220b4cf4b3207ec6c9b72d50
实时特征怎么用?怎么训练?
我们的embedding向量是每小时更新一次。
模型可稳定半小时更新(在线学习)
比如说wide and Deep部分,wide部分可以用FTRL去做在线学习,deep部分是DNN是没办法去做在线学习的