0 文章转自:

https://blog.csdn.net/dengxing1234/article/details/79756265

一. 背景

负责信息流推荐系统后台算法的工作也有一段时间,从零开始构建推荐系统的过程中,在总结了业界一些成功的经验的同时,也摸索了一些有效的实践方法。愿在此沉淀,通过交流扩展眼界。推荐系统重在算法,这也是各大公司算法团队不断追新与实践的过程。无奈个人能力有限,团队人力有限,只能一步一步从基础做起。本文将主要介绍信息流视频推荐算法的应用和探索。

二. 算法架构

  • 召回算法:包含了多个渠道的召回模型,比如协同过滤,主题模型,内容召回和热点召回等渠道,能够从视频库中选出多样性的偏好内容。
  • 排序算法:对多个召回渠道的内容进行统一打分排序,选出最优的少量结果。

三. 技术细节

1. 召回算法(match)

基于用户行为的match

以下召回算法,包括尝试算法,和最终线上用的算法。这里为了扩展思路,都列举了出来

  • 离线cf(ALS)召回

(1) 根据用户行为日志,利用基于ItemBased的协同过滤生成离线的item2item相似度矩阵和用户的离线推荐结果,其中优化过程包括基于艾宾浩斯遗忘曲线按照时间进行降权、弱化热点影片的权重以及矩阵分解;
(2) 线上服务端基于用户的playlog接口实时获取用户的短时间内的观看历史,通过item相似度矩阵进行CF扩散,提取出与用户短时间内观看历史相似的topN个item用于召回;
(2) 用户的CF离线推荐结果直接作为线上服务的召回渠道之一。

  • w2v召回

  • (1) 根据用户行为,将全部影片作为语料库,每个用户的观看历史按时序排序视为文档,利用w2v算法原理计算所有item的词向量;
    (2) 根据词向量距离计算item2item的相似度矩阵,用于线上playlog召回数据;

  • lda召回

  • (1) 基于概率主题模型:文档 – 潜在主题 – 词 的三级关系,映射到用户行为数据上,即用户 – 潜在兴趣 – 资源;
    (2) 通过用户历史行为记录,提取LDA的中间产物,及用户的潜在兴趣向量,以及资源的潜在主提分布向量;
    (3) 基于item的主题向量,进行item2item的相似度计算,用于线上playlog召回数据;

  • SimRank召回

  • 将user与deal的关系视作一个二部图,基于graph-based算法相似关系可以在图上传播的思想,使用simrank计算Item相似队列

    基于内容的match

    • 基于title简介召回

    (1) 基于影片的文本简介部分使用doc2vector,计算出每个资源的表示向量;
    (2) 基于资源的向量,进行item2item的相似度计算。

  • 基于style(风格)召回

  • 基于tag(标签)召回

  • EE问题 & 冷启问题

    • 冷启用户召回

    (1) 根据imbd算法,计算资源得分,根据不同时间周期进行得分融合并线上进行ab对比,选取最优的时间周期组合;
    (2) 按照imdb得分进行倒排,生成热点召回数据

  • 冷启资源召回

  • 基于资源库,统计各个资源的点击和播放率,按一定比例召回点击/播放率低的item

  • EE问题(Exploration and Exploitation tradeoff)

  • 目前暂没有引入线上强化学习,只采用调整不同召回渠道的配比方式来保证一定的多样性。

    2. 排序算法(rank)

    基础模型

    线上baseline模型是lr逻辑回归。该模型的优势在于简单,解释性强,并行化程度高,线上做实时预测,基本的性能问题可以得到保证;但是,从模型效果上来讲,需要做大量的人工的特征组合,特征两两作Interaction 的情况下,模型预测复杂度高,三个以上的特征进行Interaction 几乎是不可行的。

    特征工程

    特征分类

    按特征的基本来源分类

    • Item特征:资源风格、地域、类型、标签、以及相应的统计特征等
    • User特征:性别、年龄、婚姻状况、收入预测等
    • Context特征:网络状态、时间段、城市等
    • 交叉特征:基于User基本特征和Item\Context的交叉特征

    按特征的更新频率以及获取方式分类

    • 离线特征:一段时间变化幅度小的特征,如user/item的基本特征和统计特征
    • 近在线特征:分钟级/小时级需要更新的特征,如item近4个小时的ctr等
    • 在线特征:需要在每次请求到达时,实时获取的特征,如网络状态、当前请求时间等

    特征处理

    • 特征扩充

    (1) 用户兴趣向量:lda的中间产物之一用户潜在兴趣向量,以及基于w2v的词向量和用户行为历史统计出的用户兴趣向量,可丰富用户维度上的兴趣特征。
    (2) 资源embedding向量:基于用户行为数据进行的embedding的w2v/lda的词向量,以及基于资源本身title的doc2vector都可丰富最近模型使用的特征维度。且word2vecor和lda由于原理上的区别,可拓展出不同意义上的特征向量。
    (3) 资源封面AutoEncode向量:基于资源封面图像,离线采用AutoEncode训练,提取隐层向量,作为资源本身特征。

  • 统计特征细化

  • (1) 特征工程时间窗口细化: 将资源的统计特征,按不同的时间窗口,如1,3,5,7,15天进行特征细化,可在丰富资源特征的同时,融入时间衰减的因素。
    (2) 在线特征交叉:对于一些资源统计特征,在与用户特征以及上下文特征进行交叉之后效果会更加明显,根本原因在于增加了样本特征的区分度;具体交叉方法的落地,建议由服务端是执行,这里比如一个男性用户发来请求,服务端可实时获取用户的性别特征(男)以及召回队列中每个资源的在不同性别上统计特征(如历史CTR),基于特征编码表,新增加交叉特征(sex_cross_ctr),并将每个资源在男性上的ctr上作为新增交叉特征的特征值,记录成log,后面回流给模型样本。其实所有的在线特征都和交叉特征一样,最后都由服务端的日志回流给模型训练过程。

  • 连续特征离散化 & 统一独热编码

  • (1) 这里先引出美团连续特征归一化的方法
    当然,它归一化和这里离散化的方法的考虑点几乎一致。即由于不同维度特征的取值分布、相同维度下特征值的差异都很大。如很多特征的数据服从长尾分布。直接基于该特征进行常规的归一化方法(例如 min-max, z-score)都只是对数据的分布进行平移和拉伸,最后特征的分布仍然是长尾分布,这就导致大部分样本的特征值都集中在非常小的取值范围内,使得样本特征的区分度减小;与此同时,少量的大值特征可能造成训练时的波动,减缓收敛速度。此外也可以对特征值做对数转化,但由于不同维度间特征的分布不同,这种特征值处理的方式并不一定适用于其他维度的特征。
    (2) 考虑到LR模型的特性,这里的方法是先对连续特征先进行等频离散化,即基于特征值的频率等频分成N个桶,并做0/1标识,最后和离散型特征,统一进行One-hot编码,喂给LR模型。这样做的具体优势知乎有一定交流,实践过程中也确实如此。

    采样策略

    • 负样本采样策略调整

    基于曝光时间showtime和曝光顺序order,过滤负样本。

  • 不平衡样本策略调整

  • 离线进行A/B测试不同正负样本比例,进行择优调整(如1:5)

    四. 模型探索

    1. 召回算法探索

    • 可以利用RNN来“捕捉”用户在点击序列中的模式,即利用用户点击行为发生先后顺序进行推荐的展示排序。
    • Graph embedding算法,具体实践经验可见阿里

    2. 排序算法探索

    • 非线性模型

    (1) GBDT+LR:

    GBDT是基于Boosting 思想的ensemble模型,由多颗决策树组成,具有以下优点:

    <ul><li>对输入特征的分布没有要求;</li>
    <li>根据熵增益自动进行特征转换、特征组合、特征选择和离散化,得到高维的组合特征,省去了人工转换的过程,并且支持了多个特征的Interaction;</li>
    <li>预测复杂度与特征个数无关。</li></ul>
    

    GBDT与LR的进行stacking可以一定程度防止GBDT过拟合。且升级为GBDT+LR可因为省去了对新特征进行人工转换的步骤,增加特征的迭代测试也相对容易。但是需要注意对于所有LR模型所有特征都进行离散化,出来的特征值全部非0即1。但是GBDT本来就是树模型,能很好的处理非线性特征,使用离散化后的特征效果可能不佳。而且对于这种只有0、1值的情况,GBDT可能出现了不收敛的现象。所以喂给GBDT的特征不建议进行没有必要的离散化。

    (2) GBDT+FM:

    • GBDT+LR排序模型中输入特征维度为几百维,都是稠密的通用特征;
    • 这种特征的泛化能力良好,但是记忆能力比较差,所以需要增加高维的(百万维以上)内容特征来增强推荐的记忆能力,包括视频ID,标签,主题等特征。
    • GBDT是不支持高维稀疏特征的,如果将高维特征加到LR中,一方面需要人工组合高维特征,另一方面模型维度和计算复杂度会是O(N^2)级别的增长。可采用Factorization Machines模型替换LR。FM能够自动对特征进行交叉组合、增加隐向量使得模型训练和预测的计算复杂度降为O(N)、支持稀疏特征这几个优点,FM使用GBDT(稠密特征)的叶子结点和稀疏特征(内容特征)作为输入。
    • 如果优化算法可以选择的话,建议FTRL,它较SGD有以下优势:带有L1正则使得学习的特征更加稀疏、使用累计的梯度加速收敛、根据特征在样本的出现频率确定该特征学习率,保证每个特征有充分的学习。FM模型中的特征出现的频次相差很大,FTRL能够保证每个特征都能得到充分的学习,更适合稀疏特征。

    (3) DNN+GBDT+FM:
    GBDT+FM模型,对embedding等具有结构信息的深度特征利用不充分,而深度学习(Deep Neural Network)能够对嵌入式(embedding)特征和普通稠密特征进行学习,抽取出深层信息,提高模型的准确性。

    • DNN+GBDT+FM的ensemble模型FM层作为模型的最后一层,即融合层,其输入由三部分组成:DNN的最后一层隐藏层、GBDT的输出叶子节点、高维稀疏特征。
    • DNN模型:(a)使用全连接网络,设置N个隐藏层。(b)预训练好的用户和视频的Embedding向量,包含基于用户行为以及基于语义内容等的多种Embedding,防止隐层不够,训练不足。(c)DNN能从具有良好数学分布的特征中抽取深层信息,比如embedding特征,归一化后统计特征等等。
    • GBDT模型: (a)单独进行训练,输入包含归一化和未归一化的稠密特征(b)能处理未归一化的连续和离散特征。(c)能根据熵增益自动对输入特征进行离散和组合。
    • FM融合层:(a)FM模型与DNN模型作为同一个网络同时训练。(b)将DNN特征,GBDT输出和稀疏特征进行融合并交叉
  • 组合不同的目标函数

  • 考虑融合点击和播放时长不同性质的目标函数,进行模型训练:(a)可独立成不同的模型进行训练。(b) 亦可不同的模型共享一定的深度隐层,最后在全连接层进行独立分割。最后在线上预测时对不同性质的模型,进行线性加权。

    3. EE&冷启问题探索

    • 常用Bandit算法(累积遗憾->评估效果)
    • Thompson sampling算法
    • UCB算法
    • Epsilon-Greedy算法
    • 朴素Bandit算法
    • LinUCB(UCB算法加入特征信息)
    • COFIBA算法(Bandit和协同过滤结合)

    五. 总结展望

    按照目前主流的算法架构 match + rank,不难发现match召回算法最终决定了推荐效果的上界,而rank层的排序是更加保证了推荐结果的精准。所以从模型优化的角度来讲,只有保证match 和 rank 双管齐下,才能发挥推荐系统的终极效果。match趋近个性化、召回度和新颖度的完美结合,rank层趋近排序结果的精准化,无疑对于算法工程师来说,都是极大的挑战。最后引出阿里在match层最新的探索,以及美团在rank层的最近进展。

【实践】信息流推荐算法实践 深入相关推荐

  1. 搜狗信息流推荐算法实践

    本文根据搜狗王东老师在6月9日,DataFunTalk算法技术沙龙中分享的"搜狗信息流推荐算法交流"编辑整理而成,在未改变原意的基础上稍做修改. 本次分享将从上面四个方面介绍,挑选 ...

  2. 【算法实践】搜狗信息流推荐算法交流.pdf(附下载链接)

    今天给大家带来搜狗科技王东先生所做的分享<搜狗信息流推荐算法交流.pdf>,本分享共包含如下四大部分: 1.推荐系统架构: 2.文章NLP: 3.召回算法: 4.个性化排序. 本PPT共2 ...

  3. 腾讯信息流推荐业务实践:内容分发场景的多目标架构实践

    猜你喜欢 0.2022年1月份热门报告盘点&下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进 ...

  4. 推荐系统(十一) 2021-2022年工业界推荐算法实践经验汇总

    对2021-2022年,工业界推荐算法实践经验进行了梳理,主要以下几个维度进行归纳: 推荐系统(十一) 2021-2022年工业界推荐算法实践经验汇总对2021-2022年,工业界推荐算法实践经验进行 ...

  5. 微博多尺度序列推荐算法实践

    今天给大家分享新浪微博机器学习算法专家谌贻荣博士在2021年全球机器学习ji s户大会上所做的分享<微博多尺度序列推荐算法实践.pdf>,关注推荐算法及其实践的伙伴们别错过啦!(到省时查报 ...

  6. 【实践】微博多尺度序列推荐算法实践.pdf(附下载链接)

    今天给大家分享新浪微博机器学习算法专家谌贻荣博士在2021年全球机器学习ji s户大会上所做的分享<微博多尺度序列推荐算法实践.pdf>,关注推荐算法及其实践的伙伴们别错过啦!(到#小程序 ...

  7. 【推荐实践】微博多尺度序列推荐算法实践.pdf(附下载链接)

    今天给大家分享新浪微博机器学习算法专家谌贻荣博士在2021年全球机器学习ji s户大会上所做的分享<微博多尺度序列推荐算法实践.pdf>,关注推荐算法及其实践的伙伴们别错过啦!(到#小程序 ...

  8. 【实践】微博推荐算法实践与机器学习平台演进.pdf(附PPT下载链接)

    大家好,今天给大家分享新浪微博申恩兆老师所做的分享<微博推荐算法实践与机器学习平台演进>,本次分享的PPT共38页,包含如下四大部分: 1.微博数据规模简介: 2.相关推荐场景描述: 3. ...

  9. 微博推荐算法实践与机器学习平台演进

    分享嘉宾:申恩兆.李志然 新浪微博 编辑整理:赵文娇.Hoh 出品平台:DataFunTalk 导读:微博作为全球领先的中文广场社交平台,拥有海量用户与数据.在从海量数据中挖掘有价值的信息,为业务赋能 ...

最新文章

  1. jhipster 配置 mysql_JHipster技术栈定制 - JHipster Registry配置信息加密
  2. 关于编译原理的一点看法
  3. pandas 或者字段值_Pandas 用法总结
  4. 如何在不增加人员的情况下自动化API安全程序
  5. python unpack_python中struct.pack()函数和struct.unpack()函数
  6. java读mysql增量_如何复制行并在MySQL中使用自动增量字段插入同一个表?
  7. Python基础——NaN(Not a Number)
  8. (4)建立一个标准尺寸的平面,并对其进行着色贴图、拉伸一定的厚度
  9. Linux搭建邮件服务器postfix
  10. 卫星星历TLE格式说明
  11. 医学图像3D目标检测
  12. Squid运行控制脚本_wuli大世界_新浪博客
  13. ▲什么是类?类有什么作用?
  14. 国美易卡的Java软件的特点
  15. 科普:股票价格为什么会高开?
  16. c++ Bellman-Ford 算法
  17. Hyperopt 超参数调优
  18. 数据库应用——Atlas代理MySQL集群实现读写分离
  19. [ ERROR ] Suite ‘Test1‘ contains no tests matching tag ‘run‘ and matching name ‘Test1.test2‘ in suit
  20. 契约测试之Spring Cloud Contract

热门文章

  1. 美国计算机科学专业学校排名,美国计算机科学专业排名
  2. Android Transtion
  3. 西门子医疗肿瘤诊疗、远程医疗、公卫建设等领域尖端科技将亮相 | 进博会倒计时...
  4. iOS 屏蔽系统更新描述文件更新!快把烦人的系统更新提示关掉!
  5. php java python c语言_两分钟速览Java、PHP、C语言、Python四大编程
  6. dpdk-22.07.0-testpmd测试进程响应icmp请求
  7. 龙格现象 图像对比及Python代码实现
  8. CodeScene - 软件质量可视化工具
  9. 初学XML,xmlns的含义
  10. ERP系统的八大主要功能模块