一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户

2023-11-10

一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户

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

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


提示:文章目录


推荐系统的链路

我们继续学习推荐系统的基本概念。

这节内容是推荐系统的链路。

推荐系统的链路分为召回、粗排、精排、重排
在这里插入图片描述

这节课只是简单介绍一下,后面的课程会详细讲解每个环节。

第一步是召回,从物品数据库中快速取回一些物品,
比如小红书有上亿篇笔记,当用户刷新小红书的时候,
系统会同时调用几十条召回通道,每条召回通道取回几十到几百篇笔记,一共取回几千篇笔记。

做完召回之后,接下来要从几千篇笔记中选出用户最感兴趣的。

下一步是粗排,用规模比较小的机器学习模型,给几千篇笔记逐一打分,
按照分数做排序和截断,保留分数最高的几百篇笔记,

再下一步是精排。这里要用大规模的深度神经网络给几百篇笔记逐一打分。
精排的分数反映出用户对笔记的兴趣,在精排之后可以做阶段,也可以不做其他的操作。

我们小红说的精排不做其他阶段,所有这几百篇笔记都带着精排,分数进入重排。

重排是最后一步。这里会根据精排分数和多样性分数做随机抽样,得到几十篇笔记,
然后把相似内容打散,并且插入广告和运营内容,展示给用户。

这就是推荐系统的大致情况,下面会具体讲解这几个环节。

推荐系统的目标是从物品的数据库中选出几十个物品展示给用户。
在我们小红书的场景下,物品就是笔记。

我们一共有几亿篇笔记推荐系统电路上的第一环是召回,就是从笔记数据库中快速取回一些笔记。
在实践中,推荐系统有很多条召回通道。
在这里插入图片描述

常见的包括系统过滤、双塔模型、关注的作者等等。
在这里插入图片描述

比如小红书的推荐系统有几十条召回通道,每条召回通道取回几十到几百篇笔记,这些召回通道一共会返回几千篇笔记,
然后推荐系统会融合这些笔记,并且做去重和过滤。
过滤的意思是排除掉用户不喜欢的,作者不喜欢的,笔记不喜欢的话题,找回几千篇笔记之后,下一步是做排序。

在这里插入图片描述
排序要用机器学习模型预估用户对笔记的兴趣,保留分数最高的笔记。
如果直接用一个大规模的神经网络逐一对千篇笔记打分,花费的代价会很大。

为了解决计算量的问题,通常把排序分为粗排和精排这两步。

粗排用比较简单的模型快速给几千篇笔记打分,保留分数最高的几百篇笔记。
精排用一个较大的神经网络给几百篇笔记打分,精排模型比粗牌模型大很多,用的特征也更多,

所以精排模型打的分数更可靠,但是精排的计算量很大。
这就是为什么我们先用粗排做筛选,然后才用精排,这样做可以比较好的平衡计算量和准确性。
在这里插入图片描述

做完粗排和精排得到几百篇笔记,每篇笔记有一个分数,表示用户对笔记的兴趣有多高,
可以直接把笔记按照模型打的分数做排序,然后展示给用户。
在这里插入图片描述

但此时的结果还存在一些不足,需要做一些调整。

在这里插入图片描述
这一步叫做重排,重排主要是考虑多样性
要根据多样性做随机抽样,从几百篇笔记中选出几十篇,
然后还要用规则把内容相似的笔记打散

稍后我会解释重排,重排的结果就是最终展示给用户的物品,
比如把前80的物品展示给用户,其中包括笔记和广告。
在这里插入图片描述

我说一下,这里的数字都是我随便说的,我不太方便讲小红书真实的数字,
下面我要简要介绍一下粗排和精排的模型,粗牌和精排非常相似,
唯一的区别就是精排模型更大,用的特征更多。

模型的输入包括用户特征、候选物品的特征,还有统计特征。

假如我们想要判断小王同学是否对某篇笔记感兴趣,我们就要把笔记的特征、小王的特征,还有很多统计特征输入神经网络。

神经网络的结构各种各样,这里就不展开讲了,留到后面的课程再说。
神经网络会输出很多数值,比如点击率、点赞率、收藏率、转发率,这些数值都是神经网络对用户行为的预估。
在这里插入图片描述
这些数值越大,说明用户对笔记越感兴趣,
最后把多个预估值做融合,得到最终的分数。
比如求加权和这个分数决定了笔记会不会被展示给用户,以及笔记展示的位置是靠前还是靠后。

请注意,这只是对一篇笔记的打分粗排,要对几千篇笔记打分,精排要对几百篇笔记打分。
每篇笔记都有多个预估分数,融合成一个分数,作为你这篇笔记排序的依据。

推荐系统链路上的最后一环是重排,重排最重要的功能是多样性抽样。
需要从几百篇笔记中选出几十篇笔记,常见的方法有MMR和DPP抽样的时候有两个依据,
一个依据是精排分数的大小,另一个依据是多样性。
在这里插入图片描述

做完抽样之后,会用规则打散相似内容。
我们不能把内容过于相似的笔记排在相邻的位置上。
举个例子,根据金牌得到的分数,排前五的笔记全都是NBA的内容,这样就不太合适。
即使用户是个篮球迷,他也未必希望看到同质化的内容。

如果排第一的是NBA的笔记,那么接下来几个位置就不能放NBA的内容,相似的笔记会往后挪。

重排的另一个目的是插入广告和运营,推广的内容还要根据生态的要求调整排序,比如不能连接出很多美女图片。


okay总结一下这节内容,这节课简要介绍推荐系统的链路:

链路上的第一环是召回,我们有很多条召回通道,从上亿篇笔记中快速取回几千篇笔记作为候选集,
然后让排序决定该把哪些笔记曝光给用户,以及展示的顺序是什么,排序分为几步。

首先是粗排,用小规模的神经网络给几千篇笔记打分,选出分数最高的几百篇送入精排。
当然,这里也会用一些规则保证进入精排的笔记具有多样性。

接下来是精排,用大规模神经网络给粗排选出的几百篇笔记打分,打完分之后,不需要做排序和阶段。

这几百篇笔记会带着精排,分数全都进入重排、重排会做多样性抽样,从几百篇笔记中选出几十篇。
然后用规则打散,并且插入广告和运营内容。
重排的规则非常复杂,有好几千行代码,
在这里插入图片描述

整条链路上召回的粗排是最大的漏斗。他们让候选笔记的数量从几亿变成几千,然后变成几百。
当候选笔记只有几百篇的时候,才能用大规模的神经网络做精排,才能用DPP这样的方法做多样性抽样。
如果笔记的数量太大,就不可能用大规模神经网络和DPP。


总结

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

(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:推荐系统的目标是从物品的数据库中选出几十个物品展示给用户,推荐系统的链路分为召回、粗排、精排、重排,为了解决计算量的问题,通常把排序分为粗排和精排这两步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户 的相关文章

  • 简单理解Hadoop(Hadoop是什么、如何工作)

    一 Hadoop主要的任务部署分为3个部分 分别是 Client机器 主节点和从节点 主节点主要负责Hadoop两个关键功能模块HDFS Map Reduce的监督 当Job Tracker使用Map Reduce进行监控和调度数据的并行处
  • linux下部署thinkphp5项目

    准备工作 购买一个linux服务器地址 安装好linux常用的ssh工具 我这边喜欢用xshell敲命令 用filezilla传输文件 这些工具只要到官网下载就好 速度很快的 1 安装phpstudy for linux 安装下载phpst
  • java:JSONArray转byte[]字节数组

    package com xxx huali hualitest json import com alibaba fastjson JSONArray import com alibaba fastjson util Base64 publi
  • C语言运行流程

    在上一篇文章visual studio如何运行并调试C语言代码中写了如何运行并调试代码 我们就明确一个事实 即不论是嵌入式系统 亦或是普通PC电脑 对于程序的运行硬件处理器只能识别0 1的二进制码 从类人语言的C代码 需要经过一系列的转换过
  • 各种算法使用场景

    深度优先搜索BFS VS 广度优先搜索 DFS 算法就是回溯算法 BFS 相对 DFS 的最主要的区别是 BFS 找到的路径一定是最短的 但代价就是空间复杂度可能比 DFS 大很多 递归灵魂三问 labuladong 告诉你 遇到任何递归型
  • SQL Server基础Sql语句复习

    基础至极 1 创建表 create table Course Cno char 4 primary key not null 创建主键 非空 Cname char 40 not null Cpno char 4 Ccredit smalli
  • 软件测试报告bug统计,软件测试中如何有效地写Bug报告

    引言 为公众写过软件的人 大概都收到过很拙劣的bug 计算机程序代码中的错误或程序运行时的瑕疵 译者注 报告 例如 在报告中说 不好用 所报告内容毫无意义 在报告中用户没有提供足够的信息 在报告中提供了错误信息 所报告的问题是由于用户的过失
  • 【算法学习笔记】17:DFS与BFS

    1 DFS 深度优先搜索常用于解决需要给出所有方案的问题 因为它的搜索顺序就是能够得到一个完整的搜索路径 方案 后回退再去搜索其它的方案 1 1 例题 排列数字 由于要求所有排列的方案 可以每次从 1 n 1 n 1 n里拿一个数字 然后记
  • 为什么P值不再是0.05(孟德尔随机化)

    为什么P值不再是0 05 孟德尔随机化 为什么P值不再是0 05 孟德尔随机化
  • 长连接和短链接的区别

    长连接意味着进行一次数据传输后 不关闭连接 长期保持连通状态 如果两个应用程序之间有新的数据需要传输 则直接复用这个连接 无需再建立一个新的连接 就像下图这样 它的优势是在多次通信中可以省去连接建立和关闭连接的开销 并且从总体上来看 进行多

随机推荐

  • < 数据结构 > 堆的应用 --- 堆排序和Topk问题

    目录 1 堆排序 法一 自己写堆进行排序 时间复杂度分析 法二 直接对数组建堆 向上调整建堆 向下调整建堆 向上建堆和向下建堆熟优 升序能否建小堆 排序 建大堆 2 TopK问题 何为Topk 实现过程 1 堆排序 假如我们有一串乱序数组
  • 深度学习论文:Deep Residual Learning for Image Recognition

    论文 He Kaiming et al Deep residual learning for image recognition Proceedings of the IEEE conference on computer vision a
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 【更好的中文语音识别SpeechBrain Win10/11本地部署,基于Aishell】

    环境 Win11x64 Vscode Python3 7 2x64 Pytorch1 9 CPU or GPU 本文默认Win11 Win10 100 素可以得 默认向下兼容 首先 你得把Vscode弄好 python 插件安装 py环境搭
  • Qt多线程的几种实现方式

    Qt多线程的几种实现方式 在Qt中经常会遇到耗时操作 需要并发执行 这个时候就要用到多线程 Qt的多线程有多种实现形式 这里介绍3种方式 类实现形式 用类实现多线程是最传统的实现形式 思想是写一个继承QThread的类 然后通过run 来开
  • 【drug】获取化合物的3D结构

    如何从化合物的SMILES字符串获取化合物的3D结构 以下几种方法供参考 1 借助pubchem的py查询接口进行查询 首先需要安装pubchempy conda install pubchempy sdf pubchempy get sd
  • 震惊小伙伴的单行代码(Python篇)

    几年前 函数式编程的复兴正值巅峰 一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红 很快地 一系列使用其他语言实现这些单行代码的文章也随之出现 比如 Haskell Ruby Groovy Clojure Python C
  • 【数据库实验】多表查询

    例3 48 查询平均成绩大于等于90分的学生学号和平均成绩 注意 聚合不应出现在 WHERE 子句中 除非该聚合位于 HAVING 子句或选择列表所包含的子查询中 并且要对其进行聚合的列是外部引用 正确写法 select Sno AVG G
  • 一分钟快速把一篇论文后面的参考文献全部下载下来

    之前写了一篇博客 将一篇论文的全部参考文献一键导入到mendely 但是我发现 导入进去之后尽管文献的所有信息以及摘要在mendely里都有了 可是并不能查看文献内容 即没有PDF文档 因此我又找了其他办法 第一步 你需要下载一个EndNo
  • JavaScript简单算法-----二分查找

    二分查找又称折半查找 只适用于有序数组 二分查找就是将需要查找的元素不断地与数组中间的元素进行比较 数组不断地拆分为两段 查找元素小于中间值在前半段查找 大于中间值在后半段进行查找 代码展示 javaScript 的二分查找算法 var A
  • 搭建第一个Docker

    Docker 是一个开源的容器引擎 用于创建 管理和编排容器 可以轻松为任何应用创建一个轻量级 可移植 自给自足的容器 本步骤将在linux上部署一个Docker服务 并配置DockerHub的镜像加速器 安装软件包 在linux命令行输入
  • 【新员工座位安排系统】

    新员工座位 工位由序列F1 F2 Fn组成 Fi值为0 1或2 其中0代表空置 1代表有人 2代表障碍物 1 某一空位的友好度为左右连续老员工数之和 2 为方便新员工学习求助 优先安排友好度高的空位 给出工位序列 求所有空位中友好度的最大值
  • 十大管理——项目成本管理

    目录 1 成本管理概念 2 成本管理的四个过程域 2 1四个过程的整体理解 2 2四个过程的ITO口诀版记忆 2 3过程1 制定项目管理计划 2 4过程2 项目成本估算 2 5过程3 项目成本预算 2 5过程4 项目成本控制 3计算题 1
  • Nginx配置系统服务&设置环境变量

    1 Nginx操作问题 由于我们使用源码编译安装Nginx 因此 我们启动 关闭nginx或重新加载配置文件等也就比较麻烦 需要先进入nginx的可执行文件目录 才可以执行nginx相关命令 为了方便对nginx进行相关操作 我们可以将ng
  • 【图像处理】CvArr、Mat、CvMat、IplImage、BYTE转换

    一 Mat 类型 矩阵类型 Matrix 在openCV中 Mat是一个多维的密集数据数组 可以用来处理向量和矩阵 图像 直方图等等常见的多维数据 Mat有3个重要的方法 1 Mat mat imread const String file
  • selenium.chrome怎么写扩展拦截或转发请求?

    Selenium WebDriver 是一组开源 API 用于自动测试 Web 应用程序 利用它可以通过代码来控制chrome浏览器 有时候我们需要mock接口的返回 或者拦截和转发请求 今天就来实现这个功能 代码已开源 https git
  • 坑很多的一道题(含测试样例)——L1-009 N个数求和 (20分)

    L1 009 N个数求和 20分 本题的要求很简单 就是求N个数字的和 麻烦的是 这些数字是以有理数分子 分母的形式给出的 你输出的和也必须是有理数的形式 输入格式 输入第一行给出一个正整数N 100 随后一行按格式a1 b1 a2 b2
  • 微信小程序开发流程步骤 简单 详细

    微信小程序是一种不需要下载安装即可使用的应用 它搭载在目前最流行 用户量最大的社交软件 微信 中 用户通过扫一扫或搜索小程序名字即可找到使用想要的小程序并进行使用 非常的方便快捷 对于开发者而言呢 它也有非常全面 稳定 高效的接口API供开
  • 分布式消息传输系统Kafka的工作原理及其在大数据领域的应用

    引言 在大数据处理过程中 消息队列是一种非常重要的技术工具 它能够有效地解耦数据生产者和消费者之间的关系 实现高效的异步通信 而分布式消息传输系统Kafka 作为一种高性能 高可伸缩性的消息队列 已经成为了大数据领域中最受欢迎的工具之一 一
  • 一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户

    一文看懂推荐系统 概要02 推荐系统的链路 从召回粗排 到精排 到重排 最终推荐展示给用户 提示 最近系统性地学习推荐系统的课程 我们以小红书的场景为例 讲工业界的推荐系统 我只讲工业界实际有用的技术 说实话 工业界的技术远远领先学术界 在