实施推荐系统过程中遇到的坑

news2024/11/19 21:26:36

引言

推荐系统本身很成熟,但是在落地过程当中,仍然会有很多困难。通过经历几个大型推荐系统项目,总结一些经验,帮助大家避坑。
在这里插入图片描述

01推荐系统的技术架构

推荐系统模块一般如上图所示,先通过召回模块,将候选集召回,然后经过粗排、精排、重排等排序方式,将排序靠前的候选集推送给用户。

02 数据源

1. 埋点

💬 个人观点:

埋点不难,用埋点的数据构造样本比较难,特别是实时社交比如直播。

理想的样本:

  • 用用户id把用户所有行为串起来;
  • 可以回溯用户过去看直播间的行为,比如评论、打赏等。

实际上面临的困难:

  • 埋点的数据不准确,是脏数据;
  • 埋点数据排查困难:前端代码工程复杂,很容易出问题。但是前端的同学的主要工作也不是数据上报,所以数据出了问题,也不会实时排查,非常容易导致数据脏;
  • 回溯模型也很复杂;
  • 非常耗资源。

综上,将用户对应的行为,拼成样本,需要花费很多精力。

2. 用户画像

包括用户的基础画像和兴趣画像。兴趣画像来源于两个部分:用户的离线画像、用户的实时画像。其中,离线画像又分为长期离线画像、中期离线画像、短期离线画像。

3. 内容结构化

根据内容信息的不同,内容结构化方式不同,比如电商领域,内容为商品,商品的结构化信息包括分类、品牌、价格、规格等。

💬 个人****观点:

多模态要是应用到推荐系统来,是个难点。

  • 耗费资源:图片转化为向量,信息量太大,计算起来太耗资源。
  • 现有的电商算法大多基于行为做描述,而多模态从内容上对商品做描述,怎么结合到一起,需要考虑。

所以目前多模态性价比不高,讨论较多,但是用的较少。

03 特征

特征工程,将结构化的信息转换成模型支持的数据格式。

特征选取的优劣,会最终影响到用户体验。所以特征工程及特征组合的自动化,一直是推动实用化推荐系统技术演进最主要的方向之一。

1. 特征内容

2. 特征生成

💬 个人观点:

(1)特征生成过程有什么难点?

  • 样本拼接:在特征生成过程中,样本拼接也比较难。
  • 一些脏数据的识别。如2.1埋点所说,埋点的数据很容易出问题,数据清洗和处理非常耗精力。

(2)有什么热门的特征提取方式?

用Embedding(可以理解为稠密向量)进行特征交叉。

(3)特征工程的趋势:

  • 序列特征:用户历史的行为、浏览行为、点击行为,过去看的直播间、视频,前提就是比较基础的特征做好了
  • 上下文特征
  • Embedding

(4)用在召回的特征提取,和用在排序的特征提取,有什么不同?

① 特征有差别:

  • 召回模型大多是双塔模型,用户、商品用双塔模型召回,没有交叉特征
  • 精排需要交叉特征,比如用户和物品的交叉、属性的交叉等

② 样本有差异:

  • 召回面向全量
  • 精排面对的是召回后的候选集

③ 做召回的时候,要考虑精准性和效率,精排要用到所有考虑到的特征。所以召回特征是精排特征的子集。

(5)特征抽取:

  • 特征需要结合业务场景去抽取特征,每个场景涉及的都不一样。要涉及到对推荐场景有一个很深的认知,才能抽到好的特征。因为每个场景输入的维度不同。
  • 推荐涉及人货场三个方面的特征。有了基础特征之后,就做特征交叉,人货场中任意两三者去做交叉。
  • 目前专家所在的大厂某业务,是一个大模型,所有的行业的输入都是同源的。专家认为这是不合理的,所以他认为趋势是,分行业去挖掘特征,每个行业做小的特征,而不是所有行业用一套特征。

04 召回

从全量信息集合中触发尽可能多的正确结果,并将结果返回给排序模块。

💬 个人观点:

数据决定模型的上限。召回决定了推荐的上限,因为精排的候选集是召回出来的。

1. 召回的要点

  • 处理数据量大
  • 速度要够快
  • 模型不能太复杂
  • 使用较少特征

2. 召回的难点

  • 召回怎么样和后链路做一个耦合的学习。会有一种情况,排序很适合之前召回算法的商品,排序的非常好,换了召回算法,出一批新的商品,排序算法就不一定排的很好。
  • 评估离线指标和线上指标的一致性:这是基础工作,因为离线评估指标涨了,线上不一定也涨了。指标主要看Hit rate。

注:Hit rate,在top-K推荐中,HR是一种常用的衡量召回率的指标.分母是所有的测试集合,分子是每个用户top-K推荐列表中属于测试集合的个数的总和。

举例:三个用户在测试集中的商品个数分别是10,12,8,模型得到的top-10推荐列表中,分别有6个,5个,4个在测试集中,那么此时HR的值是 (6+5+4)/(10+12+8) = 0.5。

3. 哪一种召回方式用的多?

  • 召回的方式特别多,而且每种类型不一样,差异特别大,不同的召回方式数据集差异也比较大。
  • 双塔用的最多,双塔包含很多种双塔模型,是成熟期了。
  • 图神经网络不能用双塔模型。
  • 一般有几十种召回算法同时在用,多路一起召回,包括双塔、ebadding、专家策略、知识图谱召回(用的少,其他厂用的多)、图上的传统召回、知识召回、表示召回、匹配召回几种都用。
  • 专家策略效果也可以,只是可能没有那么多,而且每一步都有策略,不像双塔训练好就行。

4. 召回的趋势和新算法有哪些?

  • 图神经网络召回;很有前景的值得探索的方向,信息在图中的传播性,所以对于推荐的冷启动以及数据稀疏场景应该特别有用。
  • 知识图谱召回:知识图谱有一个独有的优势和价值,那就是对于推荐结果的可解释性。
  • 因果推断。

5. 因果推断算不算召回的新算法?召回是怎么用因果推断的。

  • 因果推断实现方式:在深度学习加一些embedding,对因果关系做一些建模。
  • 因果推断是一个理念,在召回中容易给热门内容打高分,形成马太效应,因果推断的理念指排除掉因为马太效应出现,而是因为相关性被召回。这是一个比较大的领域,最近研究的人比较多,是一个热点。
  • 在精排里试效果一般。

6. 在做召回时,主要考虑的因素和性能指标有哪些?

  • 每一路召回算法,在后面精排曝光的占比。
  • 快、相应速度快,能在全量物品库找用户喜欢的东西。
  • 每一路召回算法的点击率也是看的。毕竟所有的优化都是为了线上提效,所以一般看线上的指标。点击率是最明显指标的指标。
  • 有时候也看用户转化(是否电话联系)。
  • 算法是否上线,也要结合线上的指标看。

05 排序

根据提前设定的目标,对信息进行打分,使评分高的信息优先展示给用户。排序环节是推荐系统最关键,也是最具有技术含量的部分,目前大多数推荐技术其实都聚焦在这块。

1. 排序算法

💬 个人观点:

(1)粗排

  • 粗排输出的结果要给精排用,粗排的打分商品多,比如粗排打两万个,精排打top5k个,粗排打分空间更大。
  • 粗排的样本选取和精排不能用同样的样本。粗排是所有商品,精排是在粗排的结果中选择样本。
  • 粗排的要求是高效输出,一般也是双塔,因为要快,不能用太复杂的模型,都是基于一些简单的策略,截断topN,给到精排。

(2)精排

  • 精排更集中于top商品,用有曝光的样本去训练。优中选优。
  • 难点是在特征工程做的很好的情况下,设计模型结构,得到更好的结果。
  • 大部分公司用的阿里巴巴提供的din,一个开源的算法包。

2. 多目标优化

多目标优化最关键的有两个问题。第一个问题是多个优化目标的模型结构问题;第二个问题是不同优化目标的重要性如何界定的问题。

如何设定不同目标权重,能够尽量减少相互之间的负面影响,就非常重要。这块貌似目前并没有特别简单实用的方案,很多实际做法做起来还是根据经验拍一些权重参数上线AB测试,费时费力。

而如何用模型自动寻找最优权重参数组合就是一个非常有价值的方向,目前最常用的方式是采用帕累托最优的方案来进行权重组合寻优。

💬 个人观点:

(1)精排的多目标优化用的比较多,比如总的目标是成交gmv,就会分成点击率和转化率两个目标。

(2)多目标训练的好处:

  • 点击率和转化率如果分开训练,打分就会有延时,消耗的计算资源也会更大。
  • 还有一个好处,多个目标可以相互借鉴,特别是数据量稀疏的情况下。

(3)至于多目标优化,也有一些自动化的方式调权重,但是一般是人工拍。拍很多组权重,不同组权重的模型,在同一份测试集上出效果。

(4)多目标优化一般用PLE(Progressive Layered Extraction),腾讯CGC出的模型,一直没有被超越。新出的目标关系之间的建模,db-mtl,esmm等,都不如PLE。

(5)经典的还有Mmoe。

3. 多模态融合

在对专家的访谈中,发现业界对多模态的定义有两种:

  • 推荐的内容同时有多种形式,比如文字、图片、视频等。
  • 推荐的内容同时有多种业务线,比如新房、二手房、租房等。

💬 个人观点:

多模态,比较让人头疼。

比如首页推荐,内容包括帖子、视频,排序的时候怎么排,很难用统一的模型,因为帖子、视频分属于不同的业务线,很多特征在这条业务线上有,其他业务线上没有。所以没有好的统一的召回模型和统一的精排模型,只能偏人工策略。

某大厂采用的方法是,先算首页有多少个坑位,基于流量价值和用户喜欢哪条业务线,人工给权重,分给每个业务线多少个坑位,再将业务线中的商品按照推荐算出来的排序填充坑位。

4. 重排序

根据用户最终的使用体验及运营需求,进行排序结果的重新排序。

💬 个人观点:

(1)难点

① 如何保证用户满意度最高的同时,也保证创造者能够得到流量。

  • 对创造者进行新手扶持,冷启动阶段会给高一些的权重。
  • 但是更加考虑用户的满意度。所以如果创造者内容质量低,也有可能不给流量。

② 用户产品和商业产品的平衡:

  • 有商业的产品,要保证收入。所以用户产品排完序之后,要把商业产品排到前面去。
  • 具体商业产品的排序,要多种权重,不断权衡,尝试商业产品排序掉一点,商业价值不掉。
  • 如果商业价值不变,但是整个模型数据提高,就可以上线。

06其他步骤和需要注意的

1. 推荐系统的冷启动

💬 个人观点:

冷启动的解决办法太多了。

① 类协同过滤的,找和新用户基础属性相似,又行为丰富的人,推荐这样的人喜欢的商品给新用户。

② 通过ml的方法,因为冷启动行为少,先利用之前的数据,训练好一个模型,直接赋给冷启动的用户,这样用少量数据,模型也可以快速收敛。

③ 通过业务的规则去做。什么场景下,给用户推荐什么内容。

④ 图神经网络。对物品冷启动有很好效果。

⑤ 用户的冷启动,可以收集跨域信息,比如去其他业务线包括二手房、商业地产收集用户信息。

⑥ 还可以通过提示是否喜欢一些标签,来获取用户数据。

⑦ 冷启动的基本原则是老物品给新用户,新物品给老用户。

  • 老物品给新用户,指基于流行度,选择热门商品,给新用户,做新用户兴趣的探索。
  • 老用户给新物品,老用户已经有行为,新物品与老用户行为过的已有物品有关系,就推给老用户,度过新物品的冷启动周期。

2. 推荐系统的评估指标

💬 个人观点:

离线评估指标:不同环节,不同指标。

  • 召回和粗排中,使用hitrate。
  • 精排中:是auc,NDCG。

业务场景中:

① 推荐系统评估使用工具:ab测试平台。

② 使用指标:CTR、CVR、人均使用时长、信息相关性等;

③ 也会关注留电率,但是这种线下数据太稀疏了,所以还是主要看CTR、CVR。

④ 平台在不同阶段关注的不同:

  • 平台在前期追求点击率;
  • 相对长的时间段,关注用户观看时长;
  • 更长期:关注用户的留存率。

07 推荐系统的应用

💬 个人观点:

推荐系统在不同的界面(比如首页、购买成功页、商品详情页)等,推荐系统的算法逻辑差异比较大。

  • 在商品列表页的推荐,主要是根据历史行为推荐;
  • 在商品详情页的推荐,主要是根据当前商品推荐。

08 个人对整体推荐系统的观点

1. 推荐系统在业务上的难点

不同的公司目标不一样,选用什么样的数据模型来完成公司的战略意图。比如公司现在想要用户的真实互动和分享,推荐系统应该把分享多的内容推荐给用户,但是这样会导致诱导分享的内容更容易被推荐。

如何判断优质内容,从而更好地把优质内容推荐给用户,是推荐系统在业务上的难点。

2. 精准性和惊喜性的平衡

推荐系统的精准性现在很容易做,基于上述全链路的算法,再配合好的特征,那么能得到一些好的商品。但是会面临问题:推荐商品很单一。比如点了很多连衣裙相关的,会不断推连衣裙。推荐系统具有滞后性,只会推用户已经行为过这些东西。虽然用户可能也会点击,但是这样对于一个推荐系统,是不够优秀的

如果用户有多种兴趣:连衣裙、小吃等,会有打散策略,给她推多种兴趣的商品,这样问题还小一点。

如果用户兴趣单一,推荐系统就会只推她喜欢的那个兴趣,就是推荐系统不够好。

好的推荐系统,要为用户提供惊喜性、发现性,要推荐用户恰好想要的。精准性和发现性需要兼顾,做一个平衡。

3. 没有数据是最难的。不断会有新的场景出来,新场景的数据不足。

**4. 推荐系统给新的内容生产者的流量:**没有看到一些很好的保量的算法。现在用的多的是pid,比例微分积分。投放速度快,就限制一些,投放速度慢,就减慢一些。

**5. 推荐对业务的价值:**怎么让推荐对整个业务起到作用,让整体业务增长。

**6. 推荐所需的环境和条件:**数据、abtest、线上工程,都能具有非常好的鲁棒性。

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

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

相关文章

云擎未来 万象共生:2023移动云万象生态峰会来袭

云融万象,赋能千行百业,云是万物智能的源泉,生态是移动云与万千伙伴共同发展的沃土。 2023移动云万象生态峰会将于4月25日下午在苏州金鸡湖国际会议中心隆重举行,大会荟聚众多重量级嘉宾,共话生态新发展,同…

语音交友app开发中的用户积分系统

引言 在当今数字时代,语音交友app已成为一种流行的社交工具。它们给用户提供了一个平台,在这里他们可以结交新朋友,分享他们的生活和信仰,并建立深厚的人际关系。然而,市场上存在大量的语音交友app,这使得…

小米集团Jira实战:如何在高负载状态下保持Jira性能与运行稳定

2023年4月14日,Atlassian中国合作伙伴企业日上海站圆满落幕。作为Atlassian全球白金合作伙伴、云专业伙伴,龙智参与了此次活动,并邀请小米集团信息技术部SRE薛世英作为演讲嘉宾,分享了小米公司的Jira实战经验。 以“小米集团Jira实…

使用nginx做WSS转为WS

HTTPS 是一种加密文本的超链接,所以需要证书,证书可以 使用域名,在腾讯云等服务商申请 https 证书,证书有 收费的和免费的,免费的有使用期限。 利用域名申请证书后,一般会有4中证书文件, .csr…

QinQ技术与Portal技术

QinQ 802.1Q-in-802.1Q,是一种扩展VLAN标签技术。在城域网中,需要大量的VLAN来隔离区分不同的用户,但是原有的802.1Q只有12个比特,仅能标识4096个VLANQinQ即在802.1Q的基础上,再增加一层外层标签。使得可以标识4096*40…

Pytorch深度学习笔记(七)逻辑斯蒂回归

目录 1. logistic(逻辑斯蒂)函数 2.二分类任务(binary classification)损失函数 3.二分类任务(binary classification)最小批量损失函数 4.逻辑斯蒂回归代码实现 附:pytorch提供的数据集 推…

算法小课堂(六)回溯算法

目录 一、概述 1.1概念(树形结构) 1.2区别 1.3步骤 1.4回溯法模板 1.5应用 1.6回溯三部曲 二、组合问题 2.1组合 回溯算法 优化剪枝操作 2.2组合总和 2.3组合总和2 2.4组合总和3 2.5电话号码的字母组合 三、切割问题 3.1分割回文串 3.2…

简述Nginx中的负载均衡、正向代理、反向代理

前言 今天吃饭的时候看某站,然后就刷到了一个视频,感觉图片蛮好看的,讲的也适合入门,这里就跟大家分享一下 视频链接: https://www.bilibili.com/video/BV1vm4y1z7EB/?spm_id_from333.1007.tianma.4-3-13.click&…

实现栅格形式的进度条+奇特的渐变边框效果

介绍 效果图展示:(颜色自定义哦~js控制) 实现逻辑介绍: (1)主要实现方案就是使用css渐变背景实现的。(linear-gradient) (2)因为需要js控制颜色&#xff…

DDD领域驱动设计:支付系统中的应用一

文章目录 前言一、DDD意义1 为什么需要DDD2 DDD的价值 二、DDD设计流程1 战略设计2 战术设计 三、DDD代码落地四、参考文献总结 前言 DDD作为一种优秀的设计思想,为复杂业务治理带来了曙光。然而又因为DDD本身难以掌握,很容易造成DDD从理论到工程落地之…

V4L2系列 之 V4L2驱动框架(1)

目录 前言一、V4L2驱动框架概览1、应用层 -》中间层-》驱动层2、主要代码文件(Linux 4.19版本内核) 二、怎么写V4L2驱动1、如何写一个设备的驱动?2、Video设备主要结构体3、怎么写V4L2驱动 三、V4L2的调试工具1、v4l2-ctl2、dev_debug3、v4l2-compliance 前言 本篇文…

00后卷王的自述,我真有同事口中说的那么卷?

前言 前段时间去面试了一个公司,成功拿到了offer,薪资也从14k涨到了20k,对于工作都还没几年的我来说,还是比较满意的,毕竟一些工作5、6年的可能还没我高。 我可能就是大家口中的卷王,感觉自己年轻&#xf…

一文读懂Redis哨兵

Redis哨兵(sentinel) 哨兵是什么? 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。 俗称,无人值守运维。 干什么? 主从监控&…

Win10系统下VS2019编译Qt的Ribbon控件 -- SARibbon

Win10系统下VS2019编译Qt的Ribbon控件 -- SARibbon 一、源码下载二、源码编译三、封装成库四、Qt配库五、运行测试 原文链接:https://blog.csdn.net/m0_51204289/article/details/126431338 一、源码下载 【1】https://gitee.com/czyt1988/SARibbon/tree/master/s…

Python开发工具PyCharm v2023.1正式发布——推出全新的用户界面

JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 PyCharm v2023.1正式版下载 更新日志如下: 推出新的…

【UE】三步创建自动追踪自爆可造成伤害的敌人

效果 可以看到造成伤害时在右上角打印玩家当前的生命值 步骤 1. 首先拖入导航网格体边界体积 2. 首先复制一份“ThirdPersonCharacter”,命名为“ExplodingAI” 打开“ExplodingAI”,删除事件图表中所有节点 添加一个panw感应组件 在事件图表中添加如…

机器学习实战:Python基于PCA主成分分析进行降维分类(七)

文章目录 1 前言1.1 主成分分析的介绍1.2 主成分分析的应用[](https://chat.openai.com/ "openai") 2 Mushroom分类数据演示2.1 导入函数2.2 导入数据2.3 PCA可视化2.4 PCA散点图2.5 PCA散点图 3 讨论 1 前言 1.1 主成分分析的介绍 主成分分析(Principa…

Consistency Models

Consistency Models- 理解 问题定义研究动机本文中心论点 相关工作和进展Consistency Models创新点review扩散模型 Consistency Model-Definition一致性模型的定义一致性模型参数化一致性模型采样 Training Consistency Models via DistillationTraining Consistency Models in…

ChatGPT on Notes/Domino

大家好,才是真的好。 随着春节过去,小盆友也开始陆续到幼儿园报到,我们又回来和大家一起继续Notes/Domino传奇之旅。 去年年底ChatGPT横空出世,让大家震惊了一把。 可能有些老Notes/Domino人,还不知道ChatGPT是什么…

MySQL_第11章_数据处理之增删改

第11章_数据处理之增删改 讲师:尚硅谷 - 宋红康(江湖人称:康师傅) 官网: http://www.atguigu.com 1. 插入数据 1.1 实际问题 解决方式:使用 INSERT 语句向表中插入数据。 1.2 方式1:VA…