乐趣区

关于机器学习:推荐系统二召回算法超详细讲解召回模型演化过程召回模型主流常见算法召回路径简介多路召回融合

1. 前言:召回排序流程策略算法简介

举荐可分为以下四个流程,别离是召回、粗排、精排以及重排:

  1. 召回是源头,在某种意义上决定着整个举荐的天花板;
  2. 粗排是初筛,个别不会上简单模型;
  3. 精排是整个举荐环节的重中之重,在特色和模型上都会做的比较复杂;
  4. 重排,个别是做打散或满足业务经营的特定强插需要,同样不会应用简单模型;
  • 召回层:召回解决的是从海量候选 item 中召回千级别的 item 问题

    • 统计类,热度,LBS;
    • 协同过滤类,UserCF、ItemCF;
    • U2T2I,如基于 user tag 召回;
    • I2I 类,如 Embedding(Word2Vec、FastText),GraphEmbedding(Node2Vec、DeepWalk、EGES);
    • U2I 类,如 DSSM、YouTube DNN、Sentence Bert;
  • 模型类:模型类的模式是将用户和 item 别离映射到一个向量空间,而后用向量召回,这类有 itemcf,usercf,embedding(word2vec),Graph embedding(node2vec 等),DNN(如 DSSM 双塔召回,YouTubeDNN 等),RNN(预测下一个点击的 item 失去用户 emb 和 item emb);向量检索能够用 Annoy(基于 LSH),Faiss(基于矢量量化)。此外还见过用逻辑回归搞个预估模型,把权重大的穿插特色拿进去构建索引做召回
  • 排序策略,learning to rank 流程三大模式(pointwise、pairwise、listwise),次要是特色工程和 CTR 模型预估;

    • 粗排层:实质上跟精排相似,只是特色和模型复杂度上会精简,此外也有将精排模型通过蒸馏失去简化版模型来做粗排

      • 常见的特色开掘(user、item、context,以及互相穿插);
    • 精排层:精排解决的是从千级别 item 到几十这个级别的问题

      • CTR 预估:lr,gbdt,fm 及其变种(fm 是一个工程团队不太强又对算法精度有肯定要求时比拟好的抉择),widedeep,deepfm,NCF 各种穿插,DIN,BERT,RNN
      • 多指标:MOE,MMOE,MTL(多任务学习)
      • 打分公式交融: 随机搜寻,CEM(性价比比拟高的办法),在线贝叶斯优化(高斯过程),带模型 CEM,强化学习等
  • 重排层:重排层解决的是展现列表总体最优,模型有 MMR,DPP,RNN 系列(参考阿里的 globalrerank 系列)
  • 展现层

    • 举荐理由:统计规定、行为规定、抽取式(个别从评论和内容中抽取)、生成式;排序能够用汤普森采样(简略无效),交融到精排模型排等等
    • 首图优选:CNN 抽特色,汤普森采样
  • 摸索与利用:随机策略(简略无效),汤普森采样,bandit,强化学习(Q-Learning、DQN)等
  • 产品层:交互式举荐、分 tab、多种类型物料交融

2. 召回算法简介

召回辨别主路和旁路,主路的作用是个性化 + 向上治理,而旁路的作用是查缺补漏
举荐零碎的前几个操作可能就决定了整个零碎的走向,在初期肯定要三思而后行
做自媒体,打广告,漏斗的入口有多大很重要。

召回这里略微有些简单,因为召回是多路的。首先咱们要解释主路和旁路的差异,主路的意义和粗排相似,能够看作是一个入口更大,但模型更加简略的粗排。主路的意义是为粗排分担压力。然而旁路却不是这样的,旁路呈现的机会往往是当主路存在某种机制上的问题,而单靠当初的这个模型很难解决的时候。举个例子,主路召回学的不错,然而它可能因为某种原因,特地厌恶影视剧片段这一类内容,导致了这类视频无奈回升到粗排上。那这样的话整个零碎推不出影视剧片段就是一个问题。从多路召回的角度来讲,咱们可能须要单加一路专门召回影视剧的,并且规定:主路召回只能出 3000 个,这一路新加的固定出 500 个,两边合并起来进入到粗排中去。这个栗子,是呈现旁路的一个动机。

2.1 召回门路介绍

举荐零碎中的 i2i、u2i、u2i2i、u2u2i、u2tag2i,都是指举荐零碎的召回门路。

  • 第一种召回,是非个性化的。比方对于新用户,咱们要确保用最高品质的视频把他们留住,那么咱们能够划一个“精品池”进去,依据他们的某种热度排序,作为一路召回。做法就是新用户的每次申请咱们都把这些精品池的内容当做后果送给粗排。这样的召回做起来最容易,用 sql 就能够搞定。
  • 第二种召回,是 i2i,i 指的是 item,严格意义上应该叫 u2i2i。指的是用用户的历史 item,来找类似的 item。比如说咱们把用户过来点过赞的视频拿进去,去找画面上,BGM 上,或者用户行为构造上类似的视频。等于说咱们就认为用户还会喜爱看同样类型的视频。这种召回,既能够从内容上建设类似关系(利用深度学习),也能够用当初比拟火的 graph 来构建关系。这种召回累赘也比拟小,图像上谁和谁类似齐全能够离线计算,甚至都不会随着工夫变动。
  • 第三种召回是 u2i,即纯正从 user 和 item 的关系登程。咱们所说的双塔就是一个典型的 u2i。在用户申请过去的时候,计算出 user 的 embedding,而后去一个实现存好的 item embedding 的空间,寻找最类似的一批拿进去。因为要实时计算 user 特色,它的累赘要大于后面两者,但这种召回个性化水平最高,实际中成果也是十分好的。

通过上图了解什么是召回门路:

  • u、i、tag 是指图中的节点
  • 2 是指图中的线(关系)

i2i:指从一个物品达到另外一个物品,item 到 item

  • 利用:头条,在下方列出类似的、相干的文章;
  • 算法:

    • 内容类似,eg:文章的类似,取题目的关键字,内容类似
    • 协同过滤
    • 关联规定开掘等
  • 两个物品被同时看的可能性很大,当一个物品被查看,就给他举荐另一个物品

u2i:指从一个用户达到一个物品,user 到 item

  • 个别指用户的间接行为,比方播放、点击、购买等;
  • 用户查看了一个物品,就会再次给它举荐这个物品
  • 联合 i2i 一起应用,就是用户查看以合物品,就会给他举荐另一个类似的物品,就是 u2i2i 门路;

u2i2i:从一个用户,通过一个物品,达到另一个物品

  • 用户查看了一个耳机(u2i),找出和这个耳机类似或者相干的产品(i2i)并举荐给用户
  • 对门路的应用,曾经从一条线变成两条线
  • 办法:就是把两种算法联合起来,先失去 u2i 的数据,再利用 i2i 的数据进行扩大,就能够从第一个节点,越过一个节点,达到第三个节点,实现举荐
  • 两头的桥梁是 item

u2u2i:从一个用户,达到另一个用户,达到一个物品

  • 先计算 u2u:两种办法

    • 一是:取用户的性别、年龄、职业等人工属性的信息,计算相似性,失去 u2u;
    • 一是:从行为数据中进行开掘,比方看的内容和视频大部分很类似,就能够看作一类人;
    • 也能够应用聚类的办法进行 u2u 计算
    • u2u 个别用在社交里,比方微博、Facebook,举荐感兴趣的人
  • userB 和 UserC 类似,如果 userB 查看了某个商品,就把这个商品举荐给 userC;
  • 两头的桥梁是 user

u2tag2i:两头节点是 Tag 标签,而不是 u 或者 i

  • 京东,豆瓣,物品的标签十分丰盛、十分具体;比方统计一个用户历史查看过的书籍,就能够计算标签偏好的向量:标签 + 喜爱的强度。
  • 用户就达到了 tag 的节点,而商品自身带有标签,这就能够互通,进行举荐
  • 先算出用户的 tag 偏好,而后匹配 item 列表
  • 这种办法的泛化性能比拟好(举荐的内容不那么狭隘,比方喜爱科幻,那么会举荐科幻的所有内容)
  • 今日头条就大量应用标签举荐

基于图的算法:u22i*

  • 起始于 U,完结于 I,两头逾越很多的 U、很多的 I,能够在图中不停的游走
  • 例如:PersonalRank,不限度一条还是两条线,在图中到处的游走,游走带着概率,能够达到很多的 item;然而相比后面一条、两条边的门路,性能不是很好

2.2 多路召回交融排序

2.2.1 多路召回

举荐服务个别有多个环节(召回、粗排序、精排序),个别会应用多个召回策略,相互补救有余,成果更好。比如说:

  • 实时召回 - U2I2I,

    • 几秒之内依据行为更新举荐列表。
    • 用 U2I 失去你实时的行为对象列表,再依据 I2I 失去可能喜爱的其余的物品
    • 这个是实时召回,剩下 3 个是提前算好的
  • 基于内容 – U2Tag2I

    • 先算好用户的偏好 tag,而后对 tag 计算类似度,获取可能感兴趣的 item
  • 矩阵合成 – U2I

    • 先算好 User 和 Item 的 tag 矩阵,而后叉乘,给每个 user 举荐 item
    • 提前存储好进行举荐
  • 聚类举荐 – U2U2I

    • 依据用户信息对用户进行聚类,而后找到最类似的 user,举荐最类似 user 喜爱的物品;或者找到聚类中大家喜爱的物品,进行举荐

写程序时,每个策略之间息息相关,所以:

1、个别能够编写并发多线程同时执行
2、每一种策略输入后果,都有一个程序,但最初要的后果只有一个列表,这就须要交融排序

2.2.2 交融排序

多种召回策略的内容,取 TOPN 合并成一个新的列表。这个新的列表,能够间接返回给前端,进行展现;也能够发给精排,进行排序。

精排模型十分耗时,所以召回的内容,会通过粗排之后,把大量的数据给精排进行排序

几种多路召回后果交融的办法

举个例子:几种召回策略返回的列表(Item-id,权重)别离为:

召回策略 返回列表
召回策略 X A:0.9 B:0.8 C:0.7
召回策略 Y B:0.6 C:0.5 D:0.4
召回策略 Z C:0.3 D:0.2 E:0.1

交融策略:
1、按程序展现

  • 比如说实时 > 购买数据召回 > 播放数据召回,则间接展现 A、B、C、D、E

2、平均法

  • 分母为召回策略个数,分子为权重加和
  • C 为(0.7+0.5+0.3)/3,B 为(0.8+0.6)/3

3、加权均匀

  • 比方三种策略本人指定权重为 0.4、0.3、0.3,则 B 的权重为(0.40.8 + 0.60.3 + 0*0.2)/(0.4+0.3+0.2),这个办法有个问题就是,每个策略的权重是本人设置的,并不精确,所以,有动静加权法

4、动静加权法

  • 计算 XYZ 三种召回策略的 CTR,作为每天更新的动静加权
  • 只思考了点击率,并不全面
  • 每种召回源 CTR 计算方法:

    • 展示日志 - 带召回源:X,Y,Z,X,Y,Z
    • 点击日志 - 带召回源:点击 X
    • 则每种召回的 CTR = 点击数 / 展示数

5、机器学习权重法

  • 逻辑回归 LR 分类模型事后离线算好各种召回的权重,而后做加权召回
  • 思考更多的特色以及环境因素,会更精确

以上交融排序的办法,老本逐步增大,成果顺次变好,依照老本进行抉择

3. 举荐场景中召回模型的演化过程

3.1 传统办法:基于协同过滤

更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129119611

3.2 单 Embedding 向量召回

3.2.1 Youtube DNN 召回

3.2.2 双塔模型召回

3.2 多 Embedding 向量召回 - 用户多趣味表白

3.2.1 Multi-Interest Network with Dynamic Routing 模型

3.3 Graph Embedding

3.3.1 阿里 Graph Embedding with Side information

传统的 graph embedding 过程如下图:

3.3.2 GraphSAGE:Inductive representation learning on large graphs

3.4 联合用户长期和短期趣味建模

### 3.4.2 Next Item Recommendation with Self-Attention

更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129119611

3.5 TDM 深度树匹配召回

TDM 是为大规模举荐零碎设计的、可能承载任意先进模型 (也就是能够通过任何深度学习举荐模型来训练树) 来高效检索用户趣味的举荐算法解决方案。TDM 基于树结构,提出了一套对用户趣味度量进行层次化建模与检索的方法论,使得零碎能间接利高级深度学习模型在全库范畴内检索用户趣味。其基本原理是应用树结构对全库 item 进行索引,而后训练深度模型以反对树上的逐层检索,从而将大规模举荐中全库检索的复杂度由 O(n) (n 为所有 item 的量级) 降落至 O(log n)。

3.5.1 树结构

### 3.5.2 怎么基于树来实现高效的检索?

3.5.3 趣味建模

4. 以后业界的支流召回算法综述

4.1 Youtube DNN

以后的 支流办法的通用思路就是对于 use 和 item 的 embedding 的学习, 这也被称为示意学习; YoutbeDNN 是经典的将深度学习模型引入举荐零碎中,能够看到网络模型并不简单,然而文中有很多工程上的技巧,比如说 word2vec 对 video 和 search token 做 embedding 后做为 video 初始 embedding,对模型训练中训练工夫和采集日志工夫之间“position bias”的解决,以及对大规模多分类问题的负采样 softmax。

4.2 DeepMF

4.3 DSSM

更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129119611

4.4.Item2vec

4.5.Airbnb Embedding

4.6.DeepWalk

4.7 Node2Vec

4.8.EGES

4.9.LINE

更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129119611

4.10.SDNE

4.11.GraphSAGE

4.12 MIND

4.13.SDM

4.14.DeepFM

4.15.NCF

4.16.TDM

更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129119611

参考举荐:

对于图相干学习举荐参考

更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129119611

[图学习我的项目合集 & 数据集分享 & 技术演绎业务落地技巧[系列十]](https://blog.csdn.net/sinat_3…)

更多内容参考:https://blog.csdn.net/sinat_39620217/article/details/129119611

退出移动版