推荐系统之召回技术的发展总结

picture.image

点击上方“蓝字”,发现更多精彩。

背景

召回是推荐系统的第一阶段,主要根据用户和商品部分特征,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品,然后交给排序环节。这部分需要处理的数据量非常大,速度要求快,所有使用的策略、模型和特征都不能太复杂。本文主要针对召回技术的发展进行了总结,希望能够帮助到对推荐系统感兴趣的同学。

picture.image

1.召回技术的发展历程

1.1 第一代召回技术

第⼀代以启发式规则为代表,⼤体可分为基于⽤户的协同过滤、 基于物品的协同过滤, 基于模型的协同过滤(⽐如 MF 矩阵分解等),以基于 item 的协同过滤思想为例,根据两个 item 被同时点击的频率来计算这两个 item 之间的相似度,然后推荐⽤户历史⾏为中各个 item 的相似相关 item。这⼀类⽅法的优点是简单、性能较⾼,因此在实际的推荐场景中⽤途⼗分⼴泛,缺点是不能⾯向全量商品库来做检索,系统只能在⽤户历史⾏为过的商品⾥⾯找到侯选的 相似商品来做召回,并且难以结合候选 item 的 Side Information(⽐如 brand,品类⼀些 id 信息),使得整个推荐结果的多样性差、对⻓尾商品的效果差,容易导致推荐系统出现“越推 越窄”的问题,即系统总是给你推荐看过的或者买过的商品。

1.2 第二代召回技术

第⼆代基于内积模型的向量检索⽅案,⽐如 YouTube-DNN 召回模型。通过离线学习 item 的 embedding 向量,然后通过积量化的⽅式构建索引,在线上应⽤的时候,实时计算 user embedding,在索引中查找最近邻(⽐较 user emb 和 item emb 的乘积)的 K 个 item 作为推 荐候选。这类⽅法的核⼼思想是将⽤户和商品⽤向量表示,⽤向量内积⼤⼩度量兴趣,借助向量索引实现⼤规模全量检索。但是这个⽅法不太⽅便去学习⽤户和 item 之间的特征交叉关系,使整个模型能⼒的表达能⼒受限。

1.2.1 单 embedding 向量召回

每个 user 和 item 在⼀个时刻只⽤⼀个 embedding 向量去表示,其主要思想为:将 user 和 item 通过 DNN 映射到同⼀个低维度向量空间中。线上通过 userId 找到相应的 user embedding,然后使⽤ KNN ⽅法(⽐如 faiss)找到相似度最⾼的 top-N 条候选结果返回。⽐较经典的是双塔模型,模型两侧分别对 user 和 item 特征通过DNN 输出向量,并在最后⼀层 计算⼆个输出向量的内积。

这⼀类⽅法中,除了经典的双塔模型(思想可追溯到 2013 年微软发布的 DSSM 模型), 还有⼀些基于 Graph Embedding 的⽅案:

  1. 阿⾥的 Graph Embedding with Side information,针对那些出现次数很少或者从来没在序列中出现过的 item embedding ⽆法精确的表征的问题,通过添加side information(⽐如商品 的种类、品牌、店铺 id 等)等辅助类信息来缓解。
  2. GraphSAGE : Inductive representation learning on large graphs ,经典的图卷积神经⽹ 络 GCN 有⼀个缺点:需要把所有节点都参与训练才能得到 node 的 embedding ,⽆法快速得 到新 node 的 embedding 。这是因为添加⼀个新的 node ,意味着许多与之相关的节点的表示 都应该调整。所以新的 graph 图会发⽣很⼤的变化,要想得到新的 node 的表示,需要对新的 graph 重新训练,因此 GraphSAGE 的基本思想就是学习⼀个 node 节点的信息是怎么通过其 邻居节点的特征聚合⽽来的。

1.2.2 多 embedding 向量召回

只⽤⼀个 embedding 向量来表示⽤户的兴趣其表征能⼒是远远不够的。所以需要通过⼀ 种模型来建模出⽤户多个 embedding 的表示。阿⾥提出的 Multi-Interest Network with Dynamic Routing (MIND) 模型,通过引⼊ capsule network 的思想来解决输出多个向量 embedding 的问题,在线计算⽤户的多个兴趣向量后,每个兴趣向量 embedding 通过 KNN 检索得到最相似的 Top-N 候选商品集合。

1.3 第三代召回技术

⼤规模召回匹配问题可以拆解成模型、索引、检索三个模块,在第⼆代技术中,主要是围 绕向量检索,模型主流是双塔模型,索引是向量索引结构,检索使⽤内积⽅式,这种⽅式存在 固有的缺陷,因此第三代技术主要是从这三个⻆度进⾏升级,允许任意模型⽽⾮限定的内积形式,且能够对全库进⾏更好的检索(⽐如索引结构升级为阿⾥的树结构或者字节的矩阵结构, 检索⽅式也随着索引结构⽽升级)。⽬前阿⾥提出的深度树匹配以及字节提出的 DR ⽅案,就是从这个视⻆出发做的技术探索。

1.4 第四代召回技术

再下⼀代召回技术优化⽅向将是全链路的联动优化,从算法链路视⻆看,⽤户得到最终的 结果经历了召回、Rank 和最后的策略,前三代召回技术都是独⽴在优化召回结果,从孤⽴的 优化,到协同 Rank ⼀起联动的优化,可能是第四代召回技术接下来的⼀个发展的⽅向,⽬前 百度提出的“莫⽐乌斯”召回系统和阿⾥基于 ECPM 的 TDM 召回已经逐步有这种思想的雏形了。

2. 召回的重点问题

2020 年 Facebook 最新论⽂《Embedding-based Retrieval in Facebook Search》 (EBR)针对

向量化召回,介绍得⾮常全⾯,涵盖了从样本筛选、特征⼯程、模型设计、离线 评估、在线 Serving 的全流程。总结起来召回的⼏个主要问题:

  1. 正样本怎么筛选:选择点击样本,还是选择曝光样本,或者曝光未点击样本作为权重低 ⼀点的正样本?
  2. 负样本怎么筛选:不能⽤曝光未点击样本做负样本,需要拿随机采样的样本做负样本, 如何采样避免热⻔ item?热⻔物料做负样本要过采样,热⻔物料做正样本要降采样, 采样率需要考虑。
  3. 负样本怎么增强:随机采样的负样本⾥有 easy negative 和 hard negative 之分,如果 单纯随机采样,easy negative 主导,模型难以做到细致的区分,需要引⼊ hard negative,如何引⼊ hard negative?Airbnb 在《Real-time Personalization using Embeddings for Search Ranking at Airbnb》⼀⽂中的做法,就是根据业务逻辑来选取 hard negative,百度 Mobius 的作法,⽤上⼀版本的召回模型筛选出"没那么相似"的 <user,doc> 对,作为额外负样本,训练下⼀版本召回模型。怎么定义“没那么相 似”?facebook ⽂章中是拿召回位置在 101~500 上的物料。排名太靠前那是正样本, 不能⽤,太靠后,与随机⽆异,也不能⽤,所以只能取中段。上⼀个版本的召回模型作 ⽤于哪⼀个候选集上?facebook 提供了 online 和 offline 两个版本。online 时就是⼀个 batch 中所有 user 与所有 d+ 的 cross join,这⼀点就与 Mobius ⼏乎⼀模⼀样了。easy:hard = 100:1
  4. 模型结构如何设计:双塔或者其它任意深度模型?双塔模型没法引⼊ user-item 的交叉 特征,在预估精度上有⼀定影响。
  5. 损失函数如何设计
  6. 离线评估怎么做:facebook 使⽤的⽅法是,拿 Top K 召回结果与⽤户实际点击做交 集,然后计算 precision/recall;Airbnb 所使⽤的⽅法是看“⽤户实际点击”在“召回结 果”中的平均位置。但⽆论是 precision/recall 还是平均位置,和实际线上结果之间还是 存在⼀定 gap。⼀个置信度⾼的离线评测⼿段仍然是召回⼯作中的痛点。
  7. 在线向量检索如何加速:阿⾥树搜索,字节 DR ⽅案 。

相关阅读推荐

picture.image

来了,你们要的比赛,这不来了么

一番星汇总的大厂面试经验分享第二弹

一番星的大厂面试经验分享汇总

END

添加助手微信加入微信交流群或者QQ交流群:

picture.image

picture.image

扫码关注我们

picture.image

携手2021年,为梦想启程!

0
0
0
0
评论
未登录
暂无评论