从零开始了解推荐系统(算法构建、召回、粗排、精排、重排、冷启动、衡量标准)

news2024/12/26 20:02:14

算法构建

推荐算法流程

实际上是一种信息处理逻辑,当获取了用户与内容的信息之后,按照一定的逻辑处理信息后,产生推荐结果。热度排行榜就是最简单的一种推荐方法,依赖的逻辑是当一个内容被大多数用户喜欢,那么大概率其他用户也喜欢。
推荐算法主要分为以下几步:

  • 召回:当用户以及内容量比较大的时候,先通过召回策略,将百万量级的内容先缩小到百量级
  • 过滤:对于内容不可重复消费的领域,例如实时性比较强的新闻等,在用户已经曝光和点击后不会再推送到用户面前
  • 精排:对召回并过滤后的内容进行排序,将百量级的内容排序并按照顺序推送
  • 混排:为避免内容越推越窄,将精排后的推荐结果进行一定修改,例如控制某一类型的频次
  • 强规则:根据业务规则进行修改,例如在活动时将某些文章置顶

召回策略

  • 召回的目的:当用户与内容的量级比较大,例如对百万量级的用户与内容计算概率,运算其实是笛卡尔积,会产生百万*百万量级的计算量。但是其实,真正的精品只是少数,对所有内容进行一次计算非常低效,会浪费大量的资源和时间。因此采用召回策略,例如热销召回,召回一段时间内最热门的100个内容,只需进行一次计算动作,就可以对所有用户应用。
  • 召回的重要性:召回模型是一个推荐系统的天花板,决定了后续可排序的空间
  • 召回方法:对算法的精度、范围、性能都有较高要求。当前业界常采用离线排序+打分或离线训练达到向量表达+向量检索的方式。(对比精排为了提高准确度,使用离线+实时打分,或在线学习的方式)
  • 召回层与业务场景的结合
    例如在飞猪业务场景中 https://www.infoq.cn/article/qfl1NxCxHuXV723iMb7v ,存在几类行业特点:订单类型较多(涉及到交通、酒店、景区、周边游),且业务之间具有一定的相关性和搭配性;用户存在周期性复购情况;用户订单的稀疏性较大。采用的解决方案:
  1. 相关性&搭配性问题:
  • 协同往往只能召回相似的商品,而考虑到推荐目标的替代性和互补性,更多挖掘反应搭配关系的行为集合
  • 数据稀疏且噪音较大,仅仅基于数据构建图,bad case较多,所以要用行业的知识图谱
  • 结合行为序列:行为序列挖掘 - > 构件图(通过知识图谱来增加约束)-> 序列采样(降低噪音 抑制热门问题)->训练
  1. 周期性复购问题:部分用户存在固定的购买模式,利用Possion-Gamma分布的统计建模,计算在某个时间点购买某个商品的概率 ,在正确的时间点给用户推出合适的复购商品

粗排策略

  • 目的:为后续链路提供集合
  • 特点:打分量高于精排,但有严格的延迟约束
  • 方法,主要是2种路线:
    1. 集合选择:以集合为建模目标,选出满足后链路需求集合。其可控性较弱,算力消耗较小(多通道、listwise、序列生成)
    2. 精准预估:以值为建模目标,直接对系统目标进行值预估。可控性较高,算力消耗较大
  • 发展历史:质量分->LR等传统机器学习->向量内内卷积(双塔模型)->COLD全链路(阿里)

精排策略

多目标融合原则:

  1. 用户的效用需要通过多个指标反馈:例如用户对视频的喜好,会通过停留时长、完播、点赞等多个动作反应
  2. 产品的目标需要通过多个指标衡量:例如短视频产品不仅要考虑用户效用,也要考虑作者效用、平台目标与生态影响
    实例:
    以短视频行业为例,推荐目标主要由几个方面组成
  • 对用户价值
  • 对作者价值,包括给作者的流量、互动、收入等
  • 对内容生态价值,包括品牌价值、内容安全、平台收入
  • 间接价值,非直接由视频产生,例如用户的评论提醒,会改善用户的留存率

重排层策略

EE问题

MBA问题:所有的选择都要同时考虑寻找最优解以及累计收益最大的问题
解决方案:Bandit算法,衡量臂的平均收益,收益越大越容易被选择,以及臂的方差,方差越大越容易被选择
常用算法:汤普森采样算法,UCB算法,Epsilon贪婪算法,LinUCB算法,与协同过滤结合的COFIBA

多样性问题

问题:

  1. 多样性过差:用户探索不够,兴趣过窄,系统泛化能力以及可持续性变差;流量过于集中在少数item上,系统缺乏活力。
  2. 多样性过强:用户兴趣聚焦程度弱;item流量分配平均,对优质item激励不足。
    解法:
  3. 根据内容相关性以及相似性打散
  4. 保持用户以及内容探索比例
  5. 人工规则控制

上下文问题

pointwise排序中,仅考虑item与user之间的相关性,而较少考虑前序item对后续item的影响,主要的解决方案有两种。

  1. listwise排序
    Pointwise考虑单点目标/Pairwise考虑一个pair/Listwise考虑整个集合的指标。
    Listwise 对视频组合进行transformer建模,刻画视频间的相互影响,前序视频对后续视频观看有影响,前后组合决定总收益。
    2.强化学习
    考虑序列决策,从前向后依次贪心的选择动作概率最大的视频。
    Reward = f(相关性,多样性,约束)

冷启动

用户冷启动

加强特征与信息的补充,EE问题平衡,实时化加强
信息补充:

  1. side information补充:例如商品类目、领域知识图谱、第三方公司数据的补充
  2. Cross domain:利用共同的用户在不同的地方的数据进行冷启动
  3. 用户填写兴趣
  4. 元学习:利用多任务间具有泛化能力的模型,进行少样本学习 few-shot learning
    快速收敛:
  5. 主动学习、在线学习、强化学习:快速收集数据,且反馈到特征与模型中。
  6. 增强模型实时化以及收敛能力。

内容冷启动

以短视频推荐为例,平台常常采用大小池逻辑,对内容进行不同流量的探索,并根据实际的反馈数据来决定内容可以进入的推荐范围。其中表现优质的内容将不断的进入更大的流量池中,最终进入推荐池,形成精品召回池。

算法衡量标准

指标选择

  • 硬指标:对于大多数的平台而言,最重要的作用是提升一些硬指标。例如新闻推荐中的点击率。但是如果单纯以提升点击率为目标,最后容易成为一些低俗内容,标题党的天下
  • 软指标:需要很多软指标以及反向指标来衡量除了点击等之外的价值,好的推荐系统能够扩展用户的视野,发现那些他们感兴趣的内容,但是不会主动获取内容;同时,推荐系统还可以帮助平台挖掘被埋没的优质长尾内容,介绍给感兴趣的用户

推荐效果

分为离线实验、用户调查和在线实验三种方法

  • 离线效果:通过反复在数据样本进行实验来获得算法的效果。通常这种方法比较简单、明确。但是因为数据是离线的,基于过去的历史数据,不能够真实的反应线上效果。同时需要通过时间窗口的滚动来保证模型的客观性和普适性。
  • 白板测试:当在离线实验阶段得到了一个比较不错的预测结果之后,就需要将推荐的结果拿到更加真实的环境中进行测评,如果这个时候将算法直接上线,会面临较高的风险。因为推荐结果的好坏不能仅仅从离线的数字指标衡量,更要关注用户体验,所以可以通过小范围的反复白板测试,获得自己和周围的人对于推荐结果的直观反馈,进行优化
  • 在线测试:AB test ,实践是检验真理的唯一标准,在推荐系统的优化过程中,在线测试是最贴近现实、最重要的反馈方式。通过AB测试的方式,可以衡量算法与其他方法、算法与算法之间的效果差异。

从零开始了解推荐系统全貌

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第 1 章 初识 C 语言】1.8 使用 C 语言的 7 个步骤

目录 1.8 使用 C 语言的 7 个步骤 1.8.1 第 1 步:定义程序的目标 1.8.2 第 2 步:设计程序 1.8.3 第 3 步:编写代码 1.8.4 第 4 步:编译 1.8.5 第 5 步:运行程序 1.8.6 第 6 步:测试和调试程序 1.8.…

基于Matlab卡尔曼滤波的GPS/INS集成导航系统研究与实现

随着智能交通和无人驾驶技术的迅猛发展,精确可靠的导航系统已成为提升车辆定位精度与安全性的重要技术。全球定位系统(GPS)和惯性导航系统(INS)在导航应用中各具优势:GPS提供全球定位信息,而INS…

C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static

文章目录 1.赋值运算符重载1.1 运算符重载1.2 赋值运算符重载 2.取地址重载2.1 const成员函数2.2 取地址运算符重载 3.类与对象的补充3.1 再探构造函数---初始化列表3.2 类型转换3.3 static成员3.4 友元3.5 内部类3.6 匿名对象3.7 对象拷贝时的编译器优化 1.赋值运算符重载 赋…

深入解析级联操作与SQL完整性约束异常的解决方法

目录 前言1. 外键约束与级联操作概述1.1 什么是外键约束1.2 级联操作的实际应用场景 2. 错误分析:SQLIntegrityConstraintViolationException2.1 错误场景描述2.2 触发错误的根本原因 3. 解决方法及优化建议3.1 数据库级别的解决方案3.2 应用层的解决方案 4. 友好提…

dns实验3:主从同步-完全区域传输

服务器192.168.234.111(主服务器),打开配置文件: 打开配置文件: 关闭防火墙,改宽松模式: 重启服务: 服务器192.168.234.112(从服务器),打开配置文…

LeetCode刷题 -- 分治快排

目录 颜色分类题目解析算法原理代码 排序数组题目解析算法原理代码 数组中第K个最大元素题目解析算法原理代码 LCR 159. 库存管理 III题目解析算法原理代码 颜色分类 题目链接 题目解析 数组分为三块 算法原理 1.如果nums[i] 0,left, i下标对应元素交换&#xff0c…

【论文笔记】Leveraging the Power of MLLMs for Gloss-Free Sign Language Translation

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Leveraging the Power of …

TsingtaoAI具身智能高校实训方案通过华为昇腾技术认证

日前,TsingtaoAI推出的“具身智能高校实训解决方案-从AI大模型机器人到通用具身智能”基于华为技术有限公司AI框架昇思MindSpore,完成并通过昇腾相互兼容性技术认证。 TsingtaoAI&华为昇腾联合解决方案 本项目“具身智能高校实训解决方案”以实现高…

如何抓取亚马逊页面动态加载的内容:Python爬虫实践指南

引言 在现代电商领域,数据的重要性不言而喻。亚马逊作为全球领先的电商平台,其页面上动态加载的内容包含了丰富的商品信息。然而,传统的爬虫技术往往难以应对JavaScript动态加载的内容。本文将详细介绍如何使用Python结合Selenium工具来抓取…

tcpdump抓包wireshark分析

背景 分析特定协议的数据包,如 HTTP、DNS、TCP、UDP 等,诊断网络问题,例如连接故障、延迟和数据包丢失。 大概过程 1.安装tcpdump yum update yum install tcpdump2.抓包,从当前时间起,一小时后停止&#xff0c…

如何进行Appium实现移动端UI自动化测试呢?

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门,那么我们就直奔主题。文章结构如下: 为什么要使用…

骨架行为识别-论文复现

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Unity 设计模式-观察者模式(Observer Pattern)详解

观察者模式 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系。当一个对象的状态发生变化时,它的所有依赖者(观察者)都会收到通知并自动更新。这种模式用于事件处理系…

【webApp之h5端实战】首页评分组件的原生实现

关于评分组件,我们经常在现代前端框架中用到,UI美观效果丰富,使用体验是非常不错的。现在自己动手使用原生js封装下评分组件,可以用在自己的项目中。 组件实现原理 点击的❤左侧包括自己都是高亮的样式,右侧都是灰色的样式,这样就能把组件的状态区分开了。右边再加上辅…

unity与android拓展

一.AndroidStudio打包 1.通过Unity导出Android Studio能够打开的工程 步骤 1.设置导出基本信息:公司名、游戏名、图标、包名等关键信息 2.在File——>Build Settings中,勾选 Export Project 选项 3.点击Export 导出按钮 2.在Android Studio中打开Un…

几种常见的javascript设计模式

摘要 最近开发HarmonyOSApp,使用的Arkts语言,此语言类似后端C#语言风格,同时兼顾写后端接口的我突然想总结一下近8年前端开发中无意中使用的设计模式,我们用到了却不知属于哪些,下面和大家分享一下。 什么是前端设计…

2.4特征预处理(机器学习)

2.4特征预处理 2.4.1 什么是特征预处理 通过 一些转换函数将特征数据转换成更加适合算法模型的特征数据过程。 1 包含内容 数值型数据的无量纲化: 归一化 标准化 2 特征预处理API sklearn.preprocessing 为什么要进行归一化/标准化? 特征的单…

学习笔记052——Spring Boot 自定义 Starter

文章目录 Spring Boot 自定义 Starter1、自定义一个要装载的项目2、创建属性读取类 ServiceProperties3、创建 Service4、创建自动配置类 AutoConfigration5、创建 spring 工程文件6、将项目打成 jar 包7、jar 打包到本地仓库8、配置application.yml Spring Boot 自定义 Starte…

重学设计模式-建造者模式

本文介绍一下建造者模式,相对于工厂模式来说,建造者模式更为简单,且用的更少 定义 建造者模式是一种创建型设计模式,它使用多个简单的对象一步一步构建成一个复杂的对象。这种模式的主要目的是将一个复杂对象的构建过程与其表示…

复现SMPLify-X: Ubuntu22.04, Cuda-11.3, GPU=3090Ti

Env: 3090Ti CUDA 最低支持版本需要>cuda-11.1 Ubuntu 22.04 Installation: Installing CUDA11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run sudo sh cuda_11.3.0_465.19.01_linux.run …