找回密码
 立即注册
搜索
查看: 478|回复: 0

Instagram 大规模实时推荐系统:650亿特征提取与高效AI解决方案

[复制链接]

9420

主题

0

回帖

2万

积分

管理员

积分
28470
发表于 2024-12-2 07:48:11 | 显示全部楼层 |阅读模式
作者:吴伊万,编译者:

介绍

让我向您介绍一下智能推荐系统的一些概要。

超过一半的用户每月都会浏览,寻找与其兴趣相关的新照片、视频和故事。在数十亿个选项中实时推荐最相关的内容会带来各种机器学习 (ML) 挑战,需要新的工程解决方案。

我们通过创建一系列自定义查询语言、轻量级建模技术和支持高速实验的工具来应对这些挑战。这些系统支持大规模探索,同时提高开发人员的生产力。总的来说,这些解决方案代表了一个基于三部分排名漏斗的高效人工智能系统,该系统每秒提取 650 亿个特征并进行 9000 万次模型预测。

在这篇博文中,我们将详细概述  的关键要素以及我们如何向  上的用户提供个性化内容。

发展的基本组成部分

在我们开始构建一个推荐引擎来处理每天上传到  的大量照片和视频之前,我们开发了一些基本工具来满足三个重要需求。我们需要进行大规模快速实验的能力,我们需要在人们的兴趣上获得更强的信号,我们需要一种计算有效的方法来确保我们的建议是高质量和新鲜的。这些定制技术是实现我们目标的关键:

使用 IGQL 快速迭代:一种新的特定于领域的语言

构建最佳推荐算法和技术是 ML 社区的一个持续研究领域,根据任务的不同,选择正确系统的过程可能会有很大差异。例如,一种算法可能有效地识别长期兴趣,而另一种算法可能在识别基于最近内容的推荐方面表现更好。我们的工程团队迭代地使用不同的算法,我们需要一种方法既可以有效地尝试新想法,又可以轻松地将有前景的想法实现到大型系统中,而不必过多担心 CPU 和内存使用等对计算资源的影响。我们需要一种特定于领域的自定义元语言,它提供正确的抽象级别并将所有算法组装到一个地方。

为了解决这个问题,我们创建并提供了 IGQL,这是一种专门为在推荐系统中检索候选人而设计的特定领域语言。其执行在 C++ 中进行了优化,这有助于最大限度地减少延迟和计算资源。在测试新的研究想法时,它还具有可扩展性且易于使用。 IGQL 是一种静态验证的高级语言。工程师可以编写这样的推荐算法,并用 C++ 快速高效地执行它们。

代码语言:

复制

<p><pre class="prism-token token line-numbers language-javascript">    <code class="language-javascript" style="margin-left:0">user
.let(seed_id=user_id)
.liked(max_num_to_retrieve=30)
.account_nn(embedding_config=default)
.posted_media(max_media_per_account=10)
.filter(non_recommendable_model_threshold=0.2)
.rank(ranking_model=default)
.diversify_by(seed_id, method=round_robin)</code></pre></p>


在上面的代码示例中,您可以看到 IGQL 如何为不经常使用该语言的工程师提供高可读性。它有助于以有原则的方式组合多个推荐阶段和算法。例如,我们可以在查询中使用组合规则来输出多个子查询的输出的加权混合,从而优化候选生成器集。通过调整它们的权重,我们可以找到提供最佳用户体验的组合。

IGQL 简化了复杂推荐系统中常见任务的执行,例如构建组合规则的嵌套树。 IGQL 允许工程师专注于推荐背后的机器学习和业务逻辑,而不是后台工作,例如为每个查询获取适当数量的候选者。它还提供了高度的代码可重用性。例如,使用排序器就像向 IGQL 查询添加一行规则一样简单。将其添加到多个位置很简单,例如排名帐户和这些帐户发布的排名媒体。

个性化账户嵌入个性化排名内容

人们在互联网上公开分享数十亿优质媒体内容,这才是合格的内容。对于  中的各个兴趣小组来说,维持清晰且不断发展的目录式分类法是一项挑战 - 主题多种多样,从阿拉伯书法到模型训练再到粘液。因此,基于内容的模型很难捕获如此多样化的基于兴趣的群体。

由于有大量帐户专注于基于特定主题的兴趣,例如德文雷克斯猫或古董拖拉机,因此我们创建了一个专注于帐户级信息而不是媒体级信息的搜索。通过构建帐户嵌入,我们能够更有效地识别哪些帐户在主题上彼此相似。我们使用(类似的嵌入框架)来获取帐户嵌入。通常,嵌入框架根据训练语料库中句子的上下文来学习单词的表示。将与用户交互的帐户 ID(例如,用户喜欢帐户中的媒体)视为句子中的单词序列。

使用相同的技术,我们可以预测特定帐户是否与给定对话场景中的某个人相关联。如果一个人与一个帐户处于相同的对话序列中,那么它比从各种帐户中抽取的随机序列更有可能在主题上连贯。这有助于我们识别本地相似的帐户。

我们定义两个帐户之间的距离度量(与嵌入训练中使用的度量相同),通常是余弦距离或点积。基于此,我们进行 KNN 查找,为嵌入中的任何帐户找到主题相似的帐户。我们的嵌入覆盖了数百万个帐户,并且我们使用最先进的最近邻搜索引擎 FAISS 作为支持搜索基础设施。

对于每个版本的嵌入,我们训练一个分类器来仅根据嵌入来预测一组帐户的主题。通过将预测主题与验证集中的人类标记主题进行比较,我们可以评估嵌入捕获主题相似性的程度。

检索与特定人之前表达的兴趣相似的帐户可以帮助我们以简单而有效的方式缩小每个人的较小的个性化排名列表。因此,我们能够利用最先进的计算密集型机器学习模型来为每个社区成员提供服务。

使用模型蒸馏来预选相关候选者

当我们使用它根据个人兴趣识别最相关的帐户后,我们需要一种方法对这些帐户进行排序,以便它们对每个人来说都是新鲜和有趣的。这需要在每个人每次滚动时预测最相关的媒体。

例如,通过深度神经网络评估每个滚动动作,即使只有 500 个媒体剪辑,也需要大量资源。然而,我们为每个用户评估的帖子越多,我们就越有可能从他们的库存中找到最好、最个性化的媒体。

为了能够最大化每个排名请求的媒体数量,我们引入了排名蒸馏模型,该模型可以帮助我们在使用更复杂的排名模型之前预先选择候选者。我们的方法是训练一个超轻量级模型,该模型从我们的主要排名模型中学习并尽可能接近它们。我们记录候选者的输入以及来自更复杂的排名模型的特征和输出。然后,这些记录的数据在一组有限的特征和更简单的神经网络模型结构上进行训练,以复制结果。其目标函数是优化主排名模型输出的 NDCG 排名(排名质量的衡量标准)损失。我们使用蒸馏模型中排名最高的帖子作为后续高性能排名模型的候选排名。

建立蒸馏模型的模拟行为可以最大限度地减少调整多个参数和在不同分箱阶段维护多个模型的需要。利用这种技术,我们可以有效地评估更大的媒体集,以在每个排名请求中找到最相关的媒体,同时控制计算资源。

如何建造

在创建了促进实验、有效识别人们的兴趣并产生有效且相关的预测所需的关键构建块之后,我们必须将这些系统整合到生产中。利用 IGQL 和我们的蒸馏技术,我们将推荐系统分为两个主要阶段:候选生成阶段(也称为采购阶段)和排名阶段。

系统架构

候选人一代



首先,我们利用人们之前互动过的帐户(例如,在帐户上点赞或保存媒体)来识别人们可能感兴趣的其他帐户。我们将其称为种子帐户。种子账户通常只是具有相似或相同兴趣的账户的一小部分。然后我们使用账户嵌入技术来识别与种子账户类似的账户。最后,根据这些账号,我们可以找到这些账号发布或参与的媒体。

该图显示了典型的推荐召回流程。

人们可以通过多种不同的方式与帐户和媒体互动(例如关注、点赞、评论、保存和分享)。还有不同的媒体类型(例如照片、视频、故事和直播),这意味着我们可以使用类似的方案构建多个来源。使用 IGQL,这个过程变得非常简单 - 不同的候选源简单地表示为不同的 IGQL 子查询。

通过不同类型的信息源,我们能够为普通人找到数千名合格的候选人。我们希望确保我们推荐的内容既安全又适合我们全球探险家社区的各个年龄段。在为每个人建立正确的目录之前,我们使用各种信号过滤掉我们认为不适合推荐的内容。除了阻止可能违反政策的内容和错误信息之外,我们还利用机器学习系统来帮助检测和过滤垃圾邮件等内容。

然后,对于每个排名请求,我们为普通人识别数千个合格媒体,从合格目录中抽取 500 个候选者,并将候选者发送到下游排名阶段。

候选排序

有 500 名候选者可供排名,我们使用三阶段排名基础设施来帮助平衡排名相关性和计算效率之间的权衡。我们的三个排名阶段如下:

第 1 遍:蒸馏模型以最少的特征模拟其他两个阶段的组合,从 500 个候选者中选择 150 个最佳且最相关的候选者。第 2 步:具有完整密集特征集的轻量级神经网络模型挑选 50 个最佳且最相关的候选者。最后一步:具有完整稠密和稀疏特征的深度神经网络模型。选择 25 个最高质量和最相关的候选者(用于网格的第一页)。

如果第一步的蒸馏模型按照排序顺序模仿其他两个阶段,我们如何决定接下来两个阶段中最相关的是什么?我们预测人们在每种媒体中的行为方式,无论是“喜欢”和“保存”等积极行为,还是“少看这样的帖子”等消极行为。我们使用多任务多标签(MTML)神经网络来预测这些事件。共享多层感知器(MLP)使我们能够捕获来自不同操作的共同信号。

我们使用算术公式(称为价值模型)来组合对不同事件的预测,以捕获不同信号的显着性,从而确定内容是否相关。我们使用预测的加权和,例如 [ * P(Like) + * P(Save) - * P( )]。例如,如果我们认为一个人在  上保存帖子比他喜欢的帖子更重要,那么保存操作的权重就应该更高。

我们还希望成为一个人们可以发现新的和现有的兴趣之间丰富平衡的地方。我们在价值模型中添加了一个简单的启发式规则,以增加内容多样性。我们通过添加惩罚因子来降低来自同一作者或同一种子帐户的帖子的排名,这样您就不会在 中看到来自同一作者或同一种子帐户的多个帖子。当您遇到同一作者的更多文章时,这种惩罚就会增加。

我们根据每个排名候选者的最终价值模型得分,以后代方式对最相关的内容进行排名。离线重放工具以及贝叶斯优化工具帮助我们微调有效的价值模型,通常用作我们的系统进化工具。

持续的机器学习挑战

构建过程中最令人兴奋的部分之一就是不断寻找新的、有趣的方法来帮助我们的社区发现网络上最有趣和相关的内容。我们一直在改进我们的探索方式,包括添加故事等媒体格式以及购物帖子和 IGTV 视频等新内容的入口点。

社区和库存的规模需要建立一种高速实验和开发人员效率的文化,以可靠地推荐最适合每个人个人兴趣的产品。我们的定制工具和系统为我们提供了持续学习和迭代的坚实基础,这对于构建和扩展至关重要。

-结尾-

英文原文:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【科创星域】 ( 京ICP备20013102号-15 )

GMT+8, 2025-5-6 20:29 , Processed in 0.064198 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表