码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 推荐系统最经典的 排序模型 有哪些?你了解多少?


    互联网大厂面试官:推荐系统最经典的 排序模型 有哪些?你了解多少?

    提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
    我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的gap,
    看书学不到推荐系统的关键技术。
    看书学不到推荐系统的关键技术。
    看书学不到推荐系统的关键技术。

    王树森娓娓道来**《小红书的推荐系统》**
    GitHub资料连接:http://wangshusen.github.io/
    B站视频合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610

    基础知识:
    【1】一文看懂推荐系统:概要01:推荐系统的基本概念
    【2】一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户
    【3】一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
    【4】一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
    【5】一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
    【6】一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
    【7】一文看懂推荐系统:召回05:矩阵补充、最近邻查找,工业界基本不用了,但是有助于理解双塔模型
    【8】一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征
    【9】一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的
    【10】一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新
    【11】一文看懂推荐系统:召回09:地理位置召回、作者召回、缓存召回
    【12】一文看懂推荐系统:排序01:多目标模型
    【13】一文看懂推荐系统:排序02:Multi-gate Mixture-of-Experts (MMoE)
    【14】一文看懂推荐系统:排序03:预估分数融合
    【15】一文看懂推荐系统:排序04:视频播放建模
    【16】一文看懂推荐系统:排序05:排序模型的特征
    【17】一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间
    【18】一文看懂推荐系统:特征交叉01:Factorized Machine (FM) 因式分解机
    【19】一文看懂推荐系统:物品冷启01:优化目标 & 评价指标
    【20】一文看懂推荐系统:物品冷启02:简单的召回通道
    【21】一文看懂推荐系统:物品冷启03:聚类召回
    【22】一文看懂推荐系统:物品冷启04:Look-Alike 召回,Look-Alike人群扩散
    【23】一文看懂推荐系统:物品冷启05:流量调控
    【24】一文看懂推荐系统:物品冷启06:冷启的AB测试
    【25】推荐系统最经典的 排序模型 有哪些?你了解多少?
    【26】一文看懂推荐系统:排序07:GBDT+LR模型
    【27】一文看懂推荐系统:排序08:Factorization Machines(FM)因子分解机,一个特殊的案例就是MF,矩阵分解为uv的乘积
    【28】一文看懂推荐系统:排序09:Field-aware Factorization Machines(FFM),从FM改进来的,效果不咋地
    【29】一文看懂推荐系统:排序10:wide&deep模型,wide就是LR负责记忆,deep负责高阶特征交叉而泛化
    【30】一文看懂推荐系统:排序11:Deep & Cross Network(DCN)
    【31】一文看懂推荐系统:排序12:xDeepFM模型,并不是对DeepFM的改进,而是对DCN的改进哦
    【32】一文看懂推荐系统:排序13:FNN模型(FM+MLP=FNN),与PNN同属上海交大张楠的作品
    【33】一文看懂推荐系统:排序14:PNN模型(Product-based Neural Networks),和FNN一个作者,干掉FM,加上LR+Product
    【34】一文看懂推荐系统:排序15:DeepFM模型(Factorization-Machine),xDeepFM可不是对DeepFM的改编哦,而是对DCN的改编
    【36】一文看懂推荐系统:经典双塔模型:微软DSSM模型(Deep Structured Semantic Models),无特征交互,后来美团改进了
    【37】一文看懂推荐系统:Gate网络(一):新浪微博GateNet,GateNet就是想用attention的方法去搞,和SENet一样,都是张俊林的杰作
    【38】一文看懂推荐系统:Gate网络2:百度GemNN(Gating-Enhanced Multi-Task Neural Networks)


    提示:文章目录

    文章目录

    • 互联网大厂面试官:推荐系统最经典的 排序模型 有哪些?你了解多少?
    • 今天开始,咱们就针对互联网大厂的面试官在面试中提出的问题来写
    • 推荐系统整体概览
    • 一、用户画像
    • 二、召回
    • 二、粗排
    • 三、精排
    • 四、混排==重排【前面24篇文章的叫法】
    • 五、在离线一致性:ABtest
    • 总结


    今天开始,咱们就针对互联网大厂的面试官在面试中提出的问题来写

    比如,美团推荐系统面试官常问的问题:

    推荐系统最经典的 排序模型 有哪些?你了解多少?

    这就要求你熟悉绝大部分经典的排序模型了

    从传统经典方法到DL方法,到最新的进展,包括部署上线要考虑的问题


    推荐系统整体概览

    其实上面我就说过一次了
    【1】一文看懂推荐系统:概要01:推荐系统的基本概念

    自1992年,施乐的帕拉奥图研究中心(PARC,PARC有很多创造性的发明,
    比如打印机,鼠标,操作系统图形界面等)发明了基于协同过滤的推荐系统以后,

    后面比较出名的工业界应用就是亚马逊的UCF,Netflix的推荐系统等,
    进入到深度学习后,推荐系统基本在做电商、资讯、视频的公司里都开启了大规模的应用。

    在PC互联网时代,主线是 “人找信息”,所以搜索引擎的地位如日中天,
    进入到移动互联网时代后,大量的信息井喷,由此开启了 “信息找人”。

    所以推荐和搜索之间的关系,可以简单的理解:
    推荐是无query的搜索。

    这篇博客主要介绍一下推荐系统的整体架构以及一些个人认为挺优秀的资料书籍。

    推荐系统的整体架构可以简单的用下图来描述。

    简单的描述一下推荐过程:当用户端发送一条请求到推荐系统server端后,
    整个推荐检索过程也就开始了,
    首先各路召回会根据请求中携带的用户画像信息候选物料库中筛选出千级别的候选集;
    送到粗排服务中进行打分排序,通过截断后选取百级别的候选集,
    然后送到精排服务进行打分排序,精排排序后,
    最终根据混排【重排】服务的要求,选择topN的物料发送到混排服务,参与混排;
    混排服务则采用一些策略决定最终的展现列表。

    在这里插入图片描述

    一、用户画像

    用户画像是整个推荐系统最基础且最关键的模块,服务于整个推荐系统各个环节。

    因此,用户画像数据的质量直接决定了推荐系统效果的好坏。 【数据是核心】

    用户画像主要基于用户的行为日志信息挖掘出用户的长期兴趣、短期兴趣、用户行为统计信息、用户DMP信息、用户负反馈 等等信息。

    二、召回

    一个推荐系统中的召回模块,通常由几十个召回通道构成,
    每一个召回通道侧重点各不相同,常见的召回算法有:
    CF类召回(ICF、UCF)、
    规则类召回(最新、最热关键词等)、
    以及各种基于语义向量也就是embedding的召回,比如DSSM双塔召回,图召回(其实就是各种x2vec)。

    主要是为了降低后面排序环节的候选集大小,通常会把百万级的候选集缩小到千级别的候选集。
    这么做就是为了发掘用户可能潜在喜欢的物品,同时也是为了大大降低计算量

    二、粗排

    粗排的存在完全就是因为精排排序受限于时间复杂度,

    因为目前的精排模型往往是层数很深的DNN网络,由于线上时间的限制,
    所能预估排序的规模终究有限,所以才有了粗排这么一个环节。

    【粗排将几千个物品继续用漏斗筛选几百个出来,这样速度要快才行,否则精排算不了】

    常见的粗排模型有DSSM等。

    由于粗排是给精排服务的,因此这里还涉及到粗精排目标一致性的问题,
    常用的做法就是粗精排特征对齐。

    近年来,工业界在粗排环节也有很多尝试,比如引入知识蒸馏的思想,
    把精排-粗排构建一个teacher-student网络,即用精排模型指导粗排模型的训练。

    三、精排

    目前无论是学术界还是工业界,大部分的精力都集中于精排这个环节。

    所以面试官才要问你这个问题:推荐系统最经典的 排序模型 有哪些?你了解多少?

    因此你有必要好好透彻地了解一波,这些排序模型,这是作为工作之后要调参尝试的基础能力。

    主要有几个方面的因素:
    1.精排环节是模型层出的环节,学术界以论文为导向,自然把精力都放在了模型上面,不然着实没法水论文啊。

    2.这一波深度学习浪潮席卷了CV、NLP、推荐,
    虽然是由于数据、算力和算法三个因素共同助推了深度学习的浪潮,
    首先数据量自不用说,每年都在以指数的速度在增长,硬件算力优化历来都是小众,很多人没兴趣甚至也没能力去搞。
    加之工业界的成果如果想共享或者有影响力,最好的方式依然是发论文,而发论文嘛又回到了第一条里。
    本次推荐系统系列博客也主要集中在精排阶段的常用模型上。

    【之前我讲的24篇主要是小红书的推荐系统工业界实现】

    精排阶段的目标就是排出用户可能最喜欢的item列表,
    用的比较多的排序方式还是point-wise,因此本质上就是个ctr预估模型,
    因此精排模型的演进实际上就是CTR模型的演进历程。

    下面用一张图来简单的总结下工业界常用的CTR模型的演进历史,
    在这里插入图片描述
    能够看出基本都围绕着如何更好的从样本中学出有用的信息,
    因此特征工程的重要性无与伦比,
    从统计机器学习时代的LR,进化到embedding+MLP的范式,
    也都是在围绕着如何学到更加有用的高阶交叉特征信息。

    在统计机器学习时代,LR在工业界占据统治地位,
    LR有着诸多的优点:简单可解释性强,易于分布式并行训练。
    但LR只是个线性模型,没办法学到学到一些高阶交叉信息,
    因此如果想学到更加细粒度的信息,需要大量的特征工程,既人工做二阶交叉特征,
    但这样的话,时间复杂度又回飙升,比如N 方个特征,两辆交叉复杂度就到了 O(N^2)
    所以rendle大佬提出了FM模型用于学习二阶交叉特征,
    Facebook则利用gbdt进行特征组合然后输入到LR里,提出了GBDT+LR的模型。

    待到深度学习来临后,embedding+MLP的范式成为主流,
    详细的后面在单独介绍每个模型时再一一详述,这里不再赘述,
    大家看看上面的图就好(为了这张图特意去下了个xmind,哈哈)。

    四、混排==重排【前面24篇文章的叫法】

    混排,顾名思义,就是多种不同类型的内容混合排序,
    在信息流推荐中,比如手百的信息流内容类型可能会包括:资讯,视频,小视频,图文,动态等等内容。

    在用户请求时,为了多样性的考虑,这些内容以列表页的形式展现给用户,
    那么必然涉及到排序,所以有了混排,
    最终的目的还是为了提高用户的点击率。
    此外混排还会涉及到一些策略,比如冷启用户的曝光处理,以及一些强制曝光策略等。

    咱们的目标就是要随机打乱,保证多样性,同时还要插播广告啥的,赚钱呢!

    五、在离线一致性:ABtest

    推荐系统中,大多人只关注模型部分,
    但实际上整个推荐系统是一个庞大的工程
    (虽然相比较广告是小巫见大巫,等后面有机会写一写关于广告的那些事儿),
    离线的模型训练只是推荐系统的一个环节,

    对于有过工业界经验的人来说,最头疼的莫过于如何保证离线一致性了,
    因此通常负责离线模型的同学和负责在线工程的同学不是同一个,
    往往还是不同的语言,比如离线python,在线C++,就会导致很多不一致的问题。

    在离线不一致主要有两部分:
    1.特征的在离线不一致;
    2.模型的在离线不一致。

    先来说说产生在离线不一致的根源,
    以特征为例:在离线没有采用统一的框架,比如在线用一套C++抽取框架,
    离线用一套java抽取框架,还是不同的人实现的,那么必然产生在离线不一致的情况。
    因此,最好的解决办法,就是在离线采用相同的特征抽取框架。

    模型也是,离线在线采用相同的代码框架,在百度内部,模型部分在离线采用相同的C++代码编译出来的bin文件,
    只要参数不配置错误,就能从根源上避免在离线不一致的情况。

    此外在离线特征一致性的监控也非常重要,能够检测出不一致的特征,及时修复。
    【关于这部分问题,我在前面24篇文章已经透彻地讲过业界小红书是咋搞的】

    下一篇文章开始,我会仔细一个个把精排模型梳理清楚都有哪些?他们有啥特点?
    面试官很在乎你的基础功底的,所以你务必自己理解透了


    总结

    提示:如何系统地学习推荐系统,本系列文章可以帮到你

    (1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
    (2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
    (3)今日推荐系统学习经验:下一篇文章开始,我会仔细一个个把精排模型梳理清楚都有哪些?他们有啥特点?
    面试官很在乎你的基础功底的,所以你务必自己理解透了

  • 相关阅读:
    【仿牛客网笔记】 Redis,一站式高性能存储方案——Redis入门
    几行代码轻松实现flutter 调用百度地图
    香港《紫荆》|对话欧科云链:Web3新兴科技的基础建设离不开链上数据的加持
    VUE模板编译的实现原理
    DDD技术方案落地实践 | 京东云技术团队
    并发模型值Actor和CSP
    代码随想录Day51 完结篇 LeetCode T84 柱状图的最大矩形
    【数据库原理与应用】数据库应用实例— 教学管理系统
    C++二分算法的应用:乘法表中第k小的数
    一个为程序员定制的、WPF开发的小巧、美观桌面快捷工具
  • 原文地址:https://blog.csdn.net/weixin_46838716/article/details/126550218
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号