为了账号安全,请及时绑定邮箱和手机立即绑定

构建类似 TikTok 的推荐系统:以H&M时尚商品推荐为例

动手实践H&M和实时个性化推荐系统课程 实时扩展千万级别的个性化推荐引擎

《动手实践H&M实时个性化推荐系统》开源课程的第一课

免费的课程,将教你如何使用四阶段推荐架构流程、以及双塔模型设计和Hopsworks AI湖仓来构建和部署一个为H&M时尚商品提供实时个性化推荐的系统。

由AI生成

瑞典语:
瑞典语翻译应为“课程”或“课”,以更好地反映“Lessons”的语境。
课程:
瑞典语修正后:
瑞典语修正为“课程”或“课”,以更好地反映“Lessons”的语境。
课程:

最终翻译应为:

课程:

构建一个像 TikTok 一样的推荐系统

第2课:像 TikTok 一样的推荐的特征流

第三课:类似TikTok的推荐算法的训练流程

第4课:部署类似 TikTok 的可扩展推荐器

第五课:利用大语言模型构建像TikTok那样的推荐系统

🔗了解更多详情, 关于课程和大纲的课程内容概要。

第一课:构建一个像 TikTok 一样的推荐系统

我们将在这节课中讨论 H&M实时个性化推荐系统的架构。我们还将应用类似于 TikTok 在短视频中的策略到 H&M 的零售商品中。

我们将介绍构建一个端到端的类似TikTok的H&M时尚商品个性化推荐系统的所有必需的架构模式,从特征工程、模型训练到实时服务。

我们将教你如何使用四阶段架构法来构建一个能够处理数百万项目推荐的系统。

我们还将为您介绍“双塔模型”,这是一种灵活的神经网络架构,能够为用户和物品生成嵌入。

最终,我们将向您展示如何通过采用MLOps最佳实践,利用Hopsworks AI湖house之上的特征/训练/推理(FTI)架构来部署整个系统。

到本节课结束时,你将知道如何基于H&M的数据搭建一个高度可扩展且模块化的实时个性化推荐系统。

在未来的课程中,我们将仔细研究每个H&M实时个性化推荐组件的细节和代码,每个组件的细节和代码。

💻 浏览我们免费提供的GitHub 仓库中的所有课程内容和代码。

目录
  • H&M零售数据集简介
  • 个性化推荐的主要原则
  • 介绍双塔嵌入模型的概念
  • 了解四阶段推荐架构
  • 将四阶段架构应用到H&M的场景
  • 介绍特征/训练/推理(FTI)框架
  • 将FTI框架应用于零售场景
  • 使用GitHub Actions部署离线机器学习流水线
  • 演示H&M的实时个性化推荐功能
喜欢这门课程吗?

H&M实时个性化推荐课程,是Decoding ML开源端到端AI课程系列中的一个课程。

对于更多类似的免费课程,有关生产AI、生成式AI、信息检索和MLOps系统的更多免费课程,可以查看我们提供的[相关课程]。了解更多,请访问我们的网站。

H&M零售数据集快速介绍

个性化推荐最常见的用武之地就是零售业,那里有顾客、商品和买卖记录。

H&M个性化时尚推荐数据集,我们将在整个课程中使用它,编号为[5],是我们这门课中会用到的完美例子。

它包含以下 CSV 文件:

  • 文章文件.csv
  • 客户信息.csv
  • 交易记录.csv

下一节课我们将设计每个表的细节时,将进一步探讨每个表。

当谈到收集用于个性化推荐的自定义数据时,最具挑战性的一点是获取或创建客户和商品之间有意义的互动,例如,当客户:

  • 点击了一个商品;
  • 将商品加入购物车;
  • 购买了一个商品。

因此,我们将利用H&M数据集中的交易记录来训练我们模型,并展示我们案例的应用。

但为了模拟真实场景,我们将从我们的PoC界面中收集新的互动,这些互动将影响后续的预测推荐。

基于个性化推荐的核心方法

谈到推荐时,你可以在这两个之间选择,这两个是核心模式。

  • 基于内容的筛选: 这种方法通过分析用户之前互动过的项目的特征或特性来推荐项目,例如,如果一位顾客经常购买印花连衣裙,系统会推荐其他类似的印花服装。
  • 协同过滤: 这种方法通过找到行为模式相似的用户或项目,并识别用户与项目互动的模式来做出推荐。例如,如果购买皮夹克的顾客也倾向于购买黑色靴子,系统会推荐新购买皮夹克的顾客也买黑色靴子。

如图1所示:核心模式

让我们看看怎样用这两个范式来分析两个塔模型。

来了解一下双塔嵌入式模型技术

了解基于神经网络的推荐系统工作原理的第一步,就是检查双塔嵌入架构。

从根本上说,双塔模型架构的目标是为客户提供富含特征的嵌入表示,并将其置于相同的嵌入空间内。因此,当我们为某位客户寻找推荐时,我们可以计算出客户的嵌入表示与各物品嵌入表示之间的距离,以找到最相关的物品候选 [8]。

图2:两个塔的模型

双塔模型架构的训练同时训练两个神经网络。

  • 客户查询编码器将 客户特征转换为密集的嵌入向量。
  • 商品的特征 被转换为与客户嵌入向量相同的向量空间中的密集嵌入向量。

这两种编码器都能处理不同类型的特征。

  • 客户编码器: 人口统计数据,历史行为记录,上下文信息
  • 项目编码器: 标签信息,描述,评分信息

这介绍了一种基于内容的范式。当使用足够多的特征时,相似的项目和客户会被分到同一个类别。

与传统架构的一个关键区别在于,双塔模型分别处理用户和物品的特征。这使得它在大规模检索中非常高效,因为物品嵌入可以预先计算并存储在近似最近邻(ANN)索引或向量数据库中。

使用点积作为损失函数的评分,当顾客与某个项目互动时得到1,没有互动时得到0,我们间接地利用了余弦相似度,这使得两个嵌入必须位于同一个向量空间中。

余弦距离是指归一化向量的点积

使用点积作为损失函数的分数引入了协同过滤的方法,因为它捕捉了用户和商品之间的互动模式。行为相似的用户和以类似方式访问商品的用户将会被归类到一起。

因此,根据您为物品和客户使用了多少特征,双塔模型可能是仅仅协同过滤算法(如果仅使用ID),或者如果特征中有足够的有用信息,它也可以是两者的结合。

我们在第3课会深入研究这两个编码器的结构及其训练过程,并讲解训练过程。

我们来直观地理解这两个模型在四阶段推荐架构中是如何被用的。

理解推荐系统的四个阶段架构

四阶段推荐系统架构是构建可扩展、实时的个性化推荐系统的标准,适用于各种数据类型和应用场景。

这种技术被像Nvidia [7] 和YouTube [2] 这样的大公司采用并提出过。

在推荐系统的四阶段架构中,数据以两种方式流动:

  1. 一个离线流程,用于计算候选嵌入向量并将其加载到向量索引或数据库。此流程通常以批处理模式执行。
  2. 一个在线流程,用于为客户计算实际推荐结果。此流程可以以批处理、异步、实时或流模式运行,这取决于你所构建的应用程序类型。

离线计算候选项目的嵌入使我们能够从海量的项目中进行推荐,同时我们也有信心推荐的少量项目对用户来说既个性化又吸引人。

图3:四阶段推荐器的数据流程。

这个离线管道利用候选物品编码器模型(使用双塔模型训练得到)为数据库中的所有项目计算嵌入。它将项目嵌入及其元数据(如ID)加载到一个近似最近邻(ANN)搜索索引中,该索引以低延迟检索为目标进行了优化。ANN索引有两种形式:

  • 向量索引(例如,ScaNN,Faiss);
  • 向量检索库(例如,Hopsworks,Qdrant,MongoDB)。

注:向量检索库是指用于存储和检索向量数据的数据库。

通过将item embedding创建与推荐分离,我们可以大幅加快每位客户的推荐过程,如下:

  • 我们想要推荐的一切都在客户访问我们的应用时提前算好。
  • 我们可以分别优化离线和在线流程,以便更好地减少延迟、降低成本、满足所需吞吐量等。

在线流程分为四个步骤,从用户请求开始,到推荐结束。

如图4所示:四阶段推荐架构

第一阶段:起步

这个阶段的目标是处理一个大型(>1亿个元素,最多可达数千万)的候选项目的语料库,并从中检索出一批相关的项目(~数百个)用于下游的排名和筛选工作。

候选生成步骤仅通过协同过滤提供大致的个性化。相似性以粗糙的特征如项目ID和客户ID来表达。

管道接收一个 _customer_id_ 以及其它输入特征,例如当前日期,利用经过双塔模型训练的 Customer Query Model 计算客户的嵌入,并查询向量数据库以获取相似的候选商品。

使用客户的嵌入向量,向量数据库(或索引)扫描整个语料库,并将其缩减为大约 xN 潜在候选对象(~数百)。

第二步:

阶段2会从N个候选项目中移除已经看过或购买过的项目,等等,应用各种过滤条件。

核心思想是在进入第三阶段的高成本操作之前,先过滤掉不必要的候选者。这种筛选通常使用布隆过滤器来完成,布隆过滤器是一种高效的、节省空间的概率数据结构,用于判断一个元素是否集合中的成员(例如,如已见或已购的项目)。

经过这个阶段,只剩下 xM 个候选项目了。

第三步

第三阶段将xM项目的候选进行准备,以便进行排名。一个算法会根据每对项目候选和客户的相关性为每对提供一个分数。

在排名时,我们可以访问更多关于项目和用户互动模式的特征描述,因为只有几百个项目被评分,而候选生成阶段则要对数百万个项目进行评分。

当我们为商品和客户添加多个特征时,排名过程会变慢。我们通常使用特征库来查询所需的特征。

这样一来,通过查询特征库增加了额外的读写开销,这样一来,排名算法因为处理的数据增多而速度变慢了。

排名模型可以使用梯度提升树(比如XGBoost或者CatBoost),也可以使用神经网络,或者大语言模型。

在列表中列出几个“最佳”推荐需要细致的表现方式来区分各个候选项目的重要性。排名系统通过利用丰富的特征来描述项目和用户,给每个项目打分来完成这个任务。

第四阶段

在排名模型为每个“(商品或物品候选,客户)”组合评分后,我们必须根据排名得分以及其他可能的业务规则,对这些商品或物品进行重新排列。

这些项目会按得分高低展示给用户看。

如果候选项目的列表对我们来说太长,我们可以进一步将其缩小到xK个候选项目。

按照相关性排序这些项目至关重要。将最符合个人喜好的候选项目放在最前面可以大大提高客户点击这些项目的可能性。

例如,你希望你排名第一的电影或者你最喜欢的播放列表在打开 Netflix、YouTube 或 Spotify 时首先出现在屏幕上。你不想花太多时间去寻找它。

到第4阶段结束的时候,我们将会拥有x千个相关且个性化的物品,可以在应用程序中需要时展示。

让我们来把它用在我们的 H&M 案例中,以更好地了解它是如何运作的。

将4阶段架构应用到我们公司H&M的例子中(H&M,一家时装零售商)

如果我们理解了双塔模型架构和四阶段架构设计的工作原理,将其应用到我们的H&M案例中就会非常直接。

首先,我们来理解一下在我们的用例中,谁是 “顾客”“商品”

客户是指希望在H&M网站或应用上购物的用户。

这些商品是H&M销售的时尚单品,例如衣服、袜子、鞋子等。

因此,我们必须展示那些顾客最可能买的时尚单品。

例如,如果他搜索了这样的T恤,我们最有可能应该给他推荐这样的T恤。我们的推荐系统应该能捕捉到这个信号。

图:应用于H&M的四阶段推荐架构

其次:我们来看一下推荐H&M商品的具体步骤:

  1. 当客户浏览H&M应用程序时,我们将客户的ID和日期发送到推荐系统的推断管道。
  2. 客户查询模型根据从1中得到的两个特征计算客户的嵌入向量。
  3. 由于客户的嵌入向量与H&M时尚商品处于相同的向量空间中,我们利用Hopsworks向量索引来检索相关的商品粗略列表。
  4. 接下来,我们过滤掉客户已经点击或购买的所有商品。
  5. 我们从Hopsworks特征视图中获取更广泛的特征列表,以增强时尚商品和客户的相关特征。
  6. 我们使用CatBoost模型对剩余商品按照与客户的相关性进行排名。
  7. 根据相关性得分对商品进行排序,并将它们展示给客户。
但是,什么是[Hopsworks]?

但是,什么是[Hopsworks],

这是一个AI数据湖,它将帮助我们将推荐系统上线。

以下是一些它的功能:

  • 特征存储: 存储、管理版本和访问训练所需的功能(离线高吞吐、在线低延迟)。更多关于特征存储 [11]。
  • 模型注册表: 存储、管理版本和访问模型(包括候选编码器、查询编码器和排序模型)。
  • 服务层: 托管包含实现实时预测功能所需的4个步骤的推理流程。

因此,我们可以将特征存储在Hopsworks中,使其可用于训练和推断,并通过利用其模型注册表和模型服务层将模型部署到生产环境。

点击 这里 了解更多信息关于 Hopsworks — The AI Lakehouse.

我们快速介绍一下FTI架构吧,以及我们是如何利用Hopsworks来部署推荐系统的应用程序的。我们发布我们的推荐系统应用。

介绍特征、训练和推理(FTI)架构(FTI即特征、训练和推理)

这表明,任何机器学习系统都可以简化为这三个流程:特征、训练和推断。

吉姆·道林,Hopsworks的CEO兼联合创始人,介绍了如何简化构建生产ML系统的模式。[3,4]

这些特征流水线以原始数据为输入,输出用于训练我们模型的特征和标签。

训练流程会从存储的特征中提取输入的特征和标签,并输出我们训练的模型。

推理管道流程从特征存储接收特征和标签,并从模型注册表中获取模型。通过这些组件,可以方便地进行批量或实时预测。

图6:特征、训练和推理(FTI)

最后,关于FTI管道最重要的是它们的接口。你需要注意这一点。

  • 特征管道接收数据并输出特征及标签,保存至特征存储。
  • 训练管道从特征存储中获取特征及标签,并输出模型到模型注册表。
  • 推理管道使用特征存储中的特征和模型注册表里的模型来进行预测。

没关系,无论你的机器学习系统变得多么复杂,这些接口始终如一。

FTI架构方面还有很多内容可以探讨。建议先读这篇文章[6]了解快速介绍,或从这里开始阅读一个更深入的系列文章[12],了解如何使用MLOps的最佳实践来扩展机器学习管道。

将这个FTI架构应用于我们的零售场景

理解H&M推荐系统架构的最后一步是展示我们如何将FTI模式应用于该系统。

这种模式将帮助我们从笔记本环境到生产环境,通过部署我们的离线机器学习管道,并实时运行推理管道(使用四阶段逻辑)。

机器学习管道(特征、训练、嵌入、推理)将用Python实现。同时,我们将使用_Hopsworks AI Lakehouse_来进行存储和部署。

让我们试试看如何单独放大每个管线来看看。

特征处理管道将原始H&M数据(通常存储在数据仓库中)转换为存储在Hopsworks特征组中的特征。

我们将详细讲解功能和功能组是什么在第二课,。目前,你需要知道功能组类似于数据库中的表,我们把相关的功能(例如,客户、文章、交易等)分组在一起。更多关于功能组[9]。

如图7所示:H&M实时个性化推荐引擎架构 — 基于Hopsworks技术支持

训练流程从各种Hopsworks特征视图中获取特征,训练双塔模型和排名模型,并保存至Hopsworks模型注册表

记得,两塔模型并行训练候选项目编码器和查询项编码器。因此,我们将它们分别保存在模型注册表中,以便在不同时间使用。

特征视图是一个仅供读取操作(如训练和推断)的虚拟表。它基于从多个特征组中选取的多个特征创建。这样,您可以根据需要创建包含所需特征的虚拟表,用于训练(离线模式)或进行推断(在线模式)。更多关于特征视图的资料请参见[10]。

离线嵌入推断管道 从模型注册表加载候选模型,并从检索特征视图加载时尚物品,计算嵌入,并将它们加载到候选嵌入的 Hopsworks 向量索引(这也是一个特征组)。

看看嵌入流程是如何遵循FTI架构所提议的推理流程的。

这是因为将推理过程分成了离线和在线流程,如前所述的4阶段推荐系统架构部分。

这不仅指三条管道,而是指FTI管道,这说明它们不仅是一个思维地图,用于构建你的系统模型,通常还包含更多的组件和其他部分。

最终,实时在线 推理流程从模型注册表加载检索和排名模型及其相关特征,以及这些模型在Hopsworks特征视图中的相关特征。

这个管道部署在Hopsworks AI Lakehouse中的,作为实时API,并通过前端的HTTP请求调用。

实时推理管道整合了四阶段的推荐系统逻辑,为客户提供最终的个性化推荐。

我们将提供更多关于服务架构的细节,在第4课中。

这些功能、训练和嵌入推理的管道都是离线执行的。因此,我们可以利用其他工具根据不同的触发点来更新特征、模型和项目候选。

一个选择是使用 GitHub Actions。

使用 GitHub Actions 部署离线 ML 流水线

按照FTI架构,ML管道流程完全解耦,在遵循特定顺序的情况下可以独立运行。

因此,与Hopsworks作为AI湖仓一起,我们可以快速推送ML管道到GitHub Actions上,该Actions环境可以在例如如下所示的环境中运行:

  • 手动触发器;
  • 定时触发;
  • 在将新功能分支合并到主分支(或 staging)之后触发。

图8所示:使用GitHub Actions来部署离线的ML(机器学习)流程

由于我们的模型很小,我们能够利用GitHub Actions进行免费计算。因此,在CPU上训练它们是完全可以实现的。

此外,而且GitHub Actions与你的代码很好地集成,通过只需几行代码,我们就可以快速准备Python运行环境,执行代码,并将ML管道以DAG形式连接起来。

我们将在第4课具体介绍实现。

H&M实时个性化推荐快速演示

下面是我们为H&M准备投入生产的实时个性化推荐引擎的端到端PoC(概念验证)演示,我们使用了以下技术栈:

这会花我的钱吗?我们将使用所有这些工具和平台的免费版本,从而可以免费测试整个推荐系统(recsys)系列的端到端功能。

图9所示:一个使用实时个性化推荐系统来驱动的Streamlit应用程序。

若要快速上手测试,请参阅GitHub上的文档(链接),了解如何设置Hopsworks、GitHub Actions和Streamlit环境,并运行整个应用。

最后说一下

这节课我们学习了双塔模型(Two-Tower模型)、四阶段推荐系统架构(4阶段)以及FTI模式。

然后,我们看到了如何把这些模式应用到我们这样的H&M案例中。

在Lesson 2的课程中,我们将开始深入探讨特征管道和Hopsworks,详细讲解我们用于双塔和排名模型的特征以及相关代码。

💻 可以在这里探索我们免费提供的 GitHub 项目 中的所有代码和课程

如果你有疑问或需要澄清,随时问我哦。下次见!

你喜歡這門課程嗎?

H&M实时个性化推荐课程课程是Decoding ML开源 端到端AI课程系列中的一个部分。

还有更多类似的免费课程,关于生产AI、GenAI、信息检索以及MLOps系统的,可以查看我们提供的相关课程

我们还提供一份关于人工智能实战的免费每周通讯 ↓

解密ML | Paul Iusztin | Substack关注以获得有关设计、编码和部署高质量AI和生成式AI及信息检索的实战内容…了解更多decodingml.substack.com
参考文献
文学作品

[1] Decodingml. (n.d.). GitHub 项目 — decodingml/personalized-recommender-course. GitHub 项目页面. 链接: https://github.com/decodingml/personalized-recommender-course

[2] Covington, P., Adams, J., & Sargin, E. 未知年份. YouTube推荐算法中的深度神经网络. 谷歌研究. https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45530.pdf

[3] Dowling, J. (2024年, 8月5日发布). 关于模块化和可组合性的讨论:AI系统的AI管道和共享存储的探讨。《Hopsworks》。https://www.hopsworks.ai/post/modularity-and-composability-for-ai-systems-with-ai-pipelines-and-shared-storage

[4] Dowling, J. (2024年, 11月1日). 从MLOps到ML系统的特征/训练/推理流水线。Hopsworkshttps://www.hopsworks.ai/post/mlops-to-ml-systems-with-fti-pipelines

[5] H&M个性化时尚推荐竞赛 (无日期). Kaggle 竞赛. https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations

[6] Iusztin, P. (2024年8月10日). 使用FTI架构构建ML系统。ML解码通讯。 https://decodingml.substack.com/p/building-ml-systems-the-right-way

[7] NVIDIA Merlin 推荐系统. (日期不详). NVIDIA 开发者. 访问网址:https://developer.nvidia.com/merlin

[8] Wortz, J., & Totten, J. (2023年4月19日). Tensorflow深度检索使用Two Towers架构。文章发表在Google Cloud 博客。https://cloud.google.com/blog/products/ai-machine-learning/scaling-deep-retrieval-tensorflow-two-towers-architecture

[9] Hopsworks. (n.d.). 概述 — HopsWorks 文档. https://docs.hopsworks.ai/latest/concepts/fs/feature_group/fg_overview/

[10] Hopsworks. 概述 — HopsWorks 文档. https://docs.hopsworks.ai/latest/concepts/fs/feature_view/fv_overview/ 参见 Hopsworks 的 概述.

[11] Hopsworks. (日期不详-a)什么是特征仓库:Hopsworks的全面指南. https://www.hopsworks.ai/dictionary/feature-store

[12] Hopsworks. (未指定日期-b). 机器学习流程是什么?——Hopsworks. https://www.hopsworks.ai/dictionary/ml-pipeline

图片

除非另有说明,所有图片均为作者原创。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消