作者|Even Oldridge、Karl Byleen-Higley
翻译|胡燕君
构建举荐零碎最大的入门难点之一是了解举荐零碎如何在理论中利用。
目前,对于举荐零碎的网络材料大部分关注的是举荐模型自身,而且仅限于介绍一些简略的协同过滤(Collaborative Filtering)模型。对老手来说,只理解简略的举荐模型并不足以让他们构建出一个真正能在理论生产中应用的举荐零碎。
无论是简略的协同过滤模型,还是 DLRM 等深度学习模型,举荐模型的作用都是对用户可能感兴趣的内容进行排序(Ranking),更精确地说,是评分(Scoring)。但在事实场景中,光有评分并不足以实现良好的举荐成果。
本文将联合 Meta、Netflix 和 Pinterest 等公司的实例介绍一种构建举荐零碎的支流模式。NVIDIA Merlin 团队认为,这种模式是构建端到端举荐零碎的外围,并心愿通过介绍这种模式,帮忙你了解举荐零碎(而不仅仅是举荐模型)如何利用在理论生产中。
1
两阶段举荐零碎:检索和评分
待举荐条目(items)越多,往往就会带来问题。待举荐目录中的内容可达几百万项甚至数十亿项,这时,针对每位用户的爱好对每项内容进行评分并不事实。评分须要耗费微小的算力。在实际操作中,零碎通常只会从所有条目中疾速选一个与用户爱好相干的子集,给其中的 1000 或 10,000 项条目评分。
因而,举荐零碎可分为两个阶段。在咱们对条目进行评分之前,咱们须要抉择一个正当的相干合集,其中蕴含用户最终将接触到的条目,这个阶段叫候选检索阶段(也叫候选生成),即选出用户有可能感兴趣的条目集。候选检索模型有多种,包含矩阵合成模型(Matrix Factorization)、双塔模型(Two-Tower)、线性模型、近似最近邻模型(Approximate Nearest Neighbor)和图遍历模型(Graph Traversal)。它们的计算效率通常都比评分模型高得多。
2016 年,Google 发表了一篇对于 YouTube 举荐零碎的论文(https://static.googleusercont…),这是无关候选检索架构最早的公开文献之一,这个办法现在已被行业广泛应用。Eugene Yan 对此也写过一篇优良的文章(https://eugeneyan.com/writing…),他将举荐零碎分为两个阶段(即候选检索和评分),咱们在此基础上取得启发,并将其细化为四个阶段(下文将详述)。
值得一提的是,在同一举荐零碎中应用多种候选起源也是一种常见做法,这样能够确保对用户展示更多样的候选条目,在此先按下不提。
2
过滤阶段的必要性
尽管候选检索和评分这两个阶段看似足以应酬大规模举荐工作,但举荐零碎还需反对另外一些限度条件。因为大多数状况下,总有一些你不心愿展示给用户的内容,例如缺货的商品、不适宜用户年龄层的内容、用户已看过的内容和用户所在国家未许可上线的内容等。
与其让评分或检索模型来推理上述业务逻辑,以避开不能举荐的内容,不如间接为举荐零碎减少“过滤”(Filtering)阶段。
过滤阶段通常紧随检索阶段之后,也能够与检索阶段联合(过滤阶段最简单的问题是确保检索之后有足量的候选条目),有时甚至能够在评分阶段完结后再过滤。通过过滤能够实现模型自身难以执行的业务逻辑规定。有时,履行过滤只需简略的排除查问,有时则更简单,例如用 Bloom Filter 筛掉用户接触过的内容。
3
排序阶段:Ranking or Ordering?
目前咱们已介绍了三个阶段:候选检索、过滤和评分。通过这三个阶段,零碎已选出相干举荐内容并一一评分。每项条目标分数代表评分零碎预计的用户感兴趣水平。
举荐内容通常以列表模式向用户出现,这就带来一个乏味的难题:最现实的举荐列表不能局限于零碎的评分,还要保障肯定的多样性,为用户展现一些他们平时不会接触的内容,帮忙他们摸索未知领域,防止陷入信息茧房。
局部文献会把举荐零碎的评分阶段称为“排名(Ranking)”,但给用户的举荐列表中的最终排名(或地位)很少会间接对齐模型输入的后果(译注:比方举荐列表中排在开端的内容通常不是被模型评分最低的内容)。而通过提供一个显式的“排序(Ordering)”阶段,咱们能将举荐模型的评分和其余业务需要的限度条件进行对齐。
4
举荐零碎的四个阶段和实例
候选检索、过滤、评分和排序这四个阶段形成目前绝大部分举荐零碎的设计模式。下图展现了四个阶段的如何训练、部署并反对推理工夫查问,利用于理论生产的举荐零碎比根本的举荐模型简单得多。咱们认为下图较精确地出现了当今大多数理论举荐零碎的构建办法。
接下来让咱们看看举荐零碎的理论利用。首先,通过钻研常见举荐工作,咱们发现以下用例都具备类似的模式,合乎上述四个阶段。
而后,咱们能够剖析事实中的举荐零碎,看看其中的各个步骤别离属于哪一个阶段。
Meta 公司的 Instagram 团队曾公布一篇文章 Powered by AI: Instagram’s Explore recommender system (IGQL query language),介绍其开发的查询语言(Query Language),它能够让举荐零碎的开发更加简便。Instagram 提供了如下例子,从中可见,这种查询语言能够齐全映射咱们总结的四个阶段。
Pinterest 也有一系列对于举荐零碎的论文:Related Pins at Pinterest:The Evolution of a Real-World Recommender System、Pixie: A System for Recommending 3+ Billion Items to 200+ Million Users in Real-Time 和 Applying deep learning to Related Pins。下图摘自上述第一篇论文,展现了 Pinterest 零碎架构的演变。同样,Pinterest 的举荐零碎总体也合乎四个阶段,只是候选检索和过滤被整合为同一阶段。
最初,Instacart 在 2016 年颁布了如下举荐架构(http://slideshare.net/Sharath…),也合乎咱们所说的四个阶段。首先是检索候选商品,过滤用户已购买的商品,而后看待举荐商品评分,最初看待举荐商品进行从新排序,以减少展现条目标多样性。
总之,理论的举荐零碎比独自的举荐模型简单得多,而业内老手在网络上查到的举荐零碎材料大部分都只介绍协同过滤模型,因而,当他们真正着手构建举荐零碎时难免会一头雾水。
(本文经受权后编译公布。原文:
https://medium.com/nvidia-mer…;视频:
https://www.youtube.com/watch…)
题图源自 LoboStudioHamburg, Pixabay
欢送下载体验 OneFlow v0.8.0 最新版本 :https://github.com/Oneflow-In…