推荐系统中为什么要有召回、粗排、精排
推荐系统中的召回和排序
在推荐系统中一般会分为召回和排序两个阶段:
召回
召回的目标是从千万级甚至亿级的候选中召回几千个item,召回一般由多路组成,每一路会有不同的侧重点(优化目标),如在广告中成熟期广告和冷启动广告分为两路召回(如果广告比较多,还可能分冷热广告分别召回)。在推荐系统,不同路可能代表了不同的优化目标,如喜欢、关注、观看时长、评论这些都可以分不同的路召回。
目前召回常用的方法有:协同过滤、FM、FFM、图模型、双塔模型、还有YouTube在2017年论文中提出的DNN模型、字节的Deep Retrieval算法等
在工业届,常常会用FM、双塔模型等先学习user embedding、和 item embedding,然后用ball tree、fast ball tree 等近似最近邻算法进行检索,加快效率
排序
排序阶段就是把召回的结果进行排序,把top k(k 一般都是个位数)结果作为推荐系统最终的输出。
排序阶段常用的算法:LR -> FM -> deepFM等
为什么要把排序分为精排和粗排?
把排序阶段分为粗排和精排,其实就是生成环境中成本和结果的一个平衡。进入排序阶段的候选集一般确实只有几千个,但是对于抖音、YouTube这种量级的应用来说,他们request是非常多的,依然不能上太复杂的模型和特征。
因此把排序分为粗排和精排:
粗排漏斗一般是: 几千 -> 几百
精排漏斗一般是:几百 -> 几个
这样精排可以把模型和特征做到极致,可以达到非常高的精度
召回和粗排的差别在哪里?
1. 建模目标不同
召回是漏斗的最上游,可以说是决定了推荐系统的上限
召回的目标是召回用户可能感兴趣的 item,会考虑多方面的因素
粗排是对召回的结果进行排序,top k 送入精排,常用的有两种建模方式:
1. 独立建模,如在在广告推荐中,粗排也是优化ecpm,在推荐中也是优化Finish、Staytime等
2. 对齐精排,用 leaning to rank 等方法去学习精排的序
原文地址:https://www.cnblogs.com/xumaomao/p/15237810.html
- 朴素贝叶斯法 2016年11月11日
- 11g中关于控制文件自动备份的改进(r6笔记第22天)
- Java基础(02)-15总结对象数组,集合Collection,集合List
- alert日志中的两种ORA错误分析(r6笔记第21天)
- 通过定制orabbix监控分析潜在的Oracle问题 (r6笔记第32天)
- 【C语言练手】C语言画太极图
- 关于奇怪的并行进程分析(一) (r6笔记第41天)
- 关于ora-02391问题的总结(r6笔记第40天)
- 一次数据库响应慢的问题诊断(r6笔记第39天)
- 贝叶斯分类器及Python实现
- R语言中文分词工具
- orabbix结合python发送图形报表(二) (r6笔记第38天)
- 14(01)正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
- oracle的TAF浅析 (r6笔记第37天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TikTok 用什么算法传输并加密内容?
- 如何编写自己的Arduino库?
- 玩转 PhpStorm 系列(十一):编码风格篇
- 用Arduino剖析PWM脉宽调制
- 猿实战01——vue后台前端框架搭建
- qt编译程序无法在其他电脑上运行
- 一起学习PHP中断言函数的使用
- Jenkins实现自动化邮件发送踩坑记录
- sed 实用实例参考
- 微信小程序WXML页面常用语法(讲解+示例)
- Golang领域模型开篇,当Go遇上DDD
- Spring事务专题(五)聊聊Spring事务到底是如何实现的
- 深色模式适配指南
- 【Flutter 专题】97 仿网易新闻标签选择器
- 宋宝华:论Linux的页迁移(Page Migration)完整版