导读:论文《Recommender Systems with Generative Retrieval》发表于2023年NeurIPS (神经信息处理 系统会议)。该研究提出了一种新颖的生成检索方法,与传统的基于查询和物品嵌入的检索模型不同,采用 基于Transformer的序列到序列模型,通过语义 ID预测用户将与之互动的下一个物品。这种方法不仅提高了 物品的检索效果,特别是对那些没有历史互动的物品,也显著优于当前的最先进模型。
摘要
现代推荐系统通常采用大规模检索模型,分为两个阶段:首先训练一个双编码器模型,将查询和候选项映射 到同一个空间,然后通过近似最近邻(ANN)搜索,从查询的嵌入中选出最相关的候选项。
本文提出了一种新的单阶段范式:生成式检索模型,它通过自回归方式在一个阶段内解码目标候选项的标识 符。具体来说,我们不再为每个项目分配随机生成的原子ID,而是生成语义ID:每个项目的语义标识符是一 个具有语义意义的代码词元组。为了生成这些代码词,我们使用了一种名为RQ-VAE的层次化方法。一旦 获得所有项目的语义ID后,我们训练一个基于Transformer的序列到序列模型,来预测下一个项目的语义ID。由于该模型以自回归的方式直接预测标识下一个项目的代码词元组,它可以视为一种生成式检索模型。
实验表明,在这一新范式下训练的推荐系统,相较于当前的最先进模型,在亚马逊数据集上的表现得到了显 著提升。此外,我们还展示了结合层次化语义ID的序列到序列模型能更好地泛化,因此能提升冷启动项的检 索效果。
1. 引言
推荐系统帮助用户发现感兴趣的内容,广泛应用于视频、应用、商品和音乐等多个领域。现代推荐系统采用 检索与排序相结合的策略,在检索阶段选择一组候选项,然后通过排序模型进行排序。由于排序模型仅对所 接收到的候选项进行工作,因此在检索阶段需要选出高度相关的候选项。
构建检索模型有一些标准且成熟的方法。矩阵分解将查询和候选项的嵌入映射到相同的空间。为了更好地捕 捉数据中的非线性关系,近年来,采用双编码器架构(即为查询和候选项分别设计编码器)并通过内积方法 将查询和候选项的嵌入映射到同一空间的方式变得流行。为了在推理过程中使用这些模型,会利用候选项编 码器构建一个存储所有物品嵌入的索引。给定一个查询,通过查询编码器计算查询的嵌入后,使用近似最近 邻(ANN)算法选择最相似的候选项。另一方面,顺序推荐系统也受到越来越多的关注,它们显式地考虑 用户与物品交互的顺序,在训练过程中,通常使用Softmax作为输出层,并在推理时使用ANN。
我们提出了一种新的构建生成式检索模型的范式,专为顺序推荐系统设计。与传统的查询-候选匹配方法不 同,我们的方法采用端到端的生成模型,直接预测候选项的ID,从而完全省去了任何离散的、不可微分的内 积检索系统或索引的需求。通过自回归解码和束搜索,我们能够检索多个有效的候选项。在这种情况下,我 们可以将Transformer的记忆(参数)视为一个端到端的推荐索引,类似于Tay等人的方法。因此,我们将我们提出的方法命名为TIGER,代表Transformer Index for Generative Recommenders。TIGER的高层次 概览如图1所示。
TIGER的独特之处在于采用了一种全新的物品语义表示方法——“语义ID”,即基于每个物品内容信息生成的 一系列符号序列。具体来说,给定一个物品的文本特征,我们使用预训练的文本编码器(例如SentenceT5)生成密集的内容嵌入,并通过量化方案将嵌入转化为有序的符号或编码词序列,这些序列即为物品的语义ID。最终,这些语义ID被用于训练Transformer模型以完成顺序推荐任务。
使用语义符号序列表示物品具有多方面的优势。首先,在具有语义意义的数据上训练Transformer记忆模 块,可以实现相似物品之间的知识共享,替代以往推荐模型中用作物品特征的随机原子ID。其次,基于语义 符号的表示方式能降低推荐系统中的反馈循环问题,提升模型对新增物品的泛化能力。此外,使用符号序列 表示物品也有助于应对物品集合规模带来的挑战:符号序列所能表示的物品数量是每个符号序列中符号基数 的乘积。在物品集合规模达到数十亿时,为每个物品学习一个独特的嵌入可能会占用大量内存。尽管可以采 用基于随机哈希的技术减少表示空间,但本研究表明,基于语义符号的表示是一种更具吸引力的替代方案。
2. 相关工作
顺序推荐系统:近年来,深度顺序模型在推荐系统中的应用已发展成一门丰富的研究领域。GRU4REC首次 使用基于GRU的循环神经网络(RNN)进行顺序推荐。随后,Li等人提出了NARM(Neural Attentive Session-based Recommendation),通过在GRU层中引入注意力机制来捕捉用户的长期意图。而Zhang等人提出的AttRec则利用自注意力机制对当前会话中的用户意图进行建模,并通过度量学习确保用户与物 品之间的个性化匹配。同一时期,Kang等人也提出了SASRec,采用类似解码器结构的Transformer模型 进行自注意力建模。
受语言任务中掩码语言模型(Masked Language Modeling)成功的启发,BERT4Rec和Transformers4Rec将掩码策略引入Transformer模型,用于顺序推荐任务。而S3-Rec更进一步,通过四 个自监督任务的预训练提升数据表示能力。上述模型通过为每个物品学习高维嵌入,并在最大内积搜索 (MIPS)空间中利用近似最近邻(ANN)预测下一物品。相比之下,我们提出的TIGER技术,使用生成 式检索直接预测下一物品的语义ID。
P5则通过微调预训练的大型语言模型,用于多任务推荐系统。P5基于LLM的分词器(如SentencePiece分词器)将随机分配的物品ID转化为标记。而我们的方法则使用基于物品内容信息学习的语义ID表示。 在实验中(表2),我们证明了基于语义ID表示的推荐系统比随机编码方法效果更佳。
语义ID表示:Hou等人提出了VQ-Rec,通过物品的内容信息生成类似语义ID的“编码”用于物品表示。不 过,其重点在于构建可迁移的推荐系统,而非使用编码进行生成式检索。虽然VQ-Rec使用产品量化
(Product Quantization)来生成编码,我们则使用RQ-VAE来生成语义ID,这种方法可以提供层次化 的物品表示。与我们同期的研究中,Singh等人 证明,层次化语义ID可用于替代大规模推荐系统中的物品ID,从而提升排序模型的泛化能力。
生成式检索:尽管过去已有搜索索引学习的相关技术提出,但生成式检索作为一种新兴的文档检索方法,目 标是从数据库中返回一组相关文档。代表性工作包括GENRE、DSI、NCI和CGR。
3. 提出的框架
我们提出的框架包含2个阶段:
1. 利用内容特征生成语义ID:首先对物品的内容特征进行编码,将其转化为嵌入向量,并通过量化操作将 嵌入向量映射为语义码字的元组。生成的语义码字元组即为该物品的语义ID。
2. 基于语义ID训练生成式推荐系统:使用语义ID序列,基于Transformer模型进行顺序推荐任务的训 练。
3.1语义ID生成
在本节中,我们将详细介绍推荐语料库中物品的语义ID生成过程。假设每个物品都包含与其相关的内容特 征,这些特征能够捕捉有用的语义信息(例如标题、描述或图像)。此外,我们假定可以访问一个预训练的 内容编码器,将内容特征编码为语义嵌入向量x∈R。例如,可以使用通用的预训练文本编码器,如Sentence-T5或BERT,将物品的文本特征转化为语义嵌入。随后,通过量化操作,为每个物品生成对应的 语义ID。图2a对这一过程提供了概述。
我们将语义ID定义为长度为m的语义码字元组,每个码字来自不同的码书(Codebook)。语义ID能唯一 表示的物品数量等于各码书大小的乘积。尽管生成语义ID的技术会导致其语义属性有所差异,但我们希望 它们至少具备以下特性:相似的物品(即内容特征相近或语义嵌入接近的物品)应具有重叠的语义ID。例如,语义ID为(10, 21, 35)的物品应与语义ID为(10, 21, 40)的物品更为相似,而不是与语义ID为(10, 23, 32)的物品更相似。接下来,我们将讨论用于生成语义ID的量化方案。
RQ-VAE用于生成语义ID:残差量化变分自编码器(RQ-VAE)是一种多级向量量化方法,通过对残差进行量 化,生成一组语义码字(即语义ID)。该方法通过联合优化量化码书和深度神经网络的编码器-解码器参数 实现训练。图3展示了通过残差量化生成语义ID的过程。
生成流程:RQ-VAE首先通过编码器E对输入x进行编码,获得潜在表示z:=E(x)。在第0级(d=0),初始残差定义 为r0:=z。每一级别d都有一个码书Cd: = e[1] + e[2]…+e[K],其中K表示码书大小。随后,r0会被量化为离 当前码书中某嵌入向量最近的值。第0级别最接近的嵌入向量e[c,0]的索引c0 = argmin∥r0−ek∥就是 第一个语义码字。
在第1级(d=1),残差被更新为r1:=r0−ec0。接着,类似于第0级,计算该级别中最接近r1的码书嵌入 向量,从而生成新的码字。如此递归进行m次,最终生成一个包含m个码字的语义ID元组。这种递归方法 通过从粗到细的粒度逐步逼近输入数据。此外,为每一级使用大小为K的独立码书,而非使用一个大小为mK的单一码书,是因为随着级别增加,残差的范数逐渐减小,这允许不同级别具有不同的量化粒度。当语 义ID (c0,…,cm−1)被生成后,会通过公式z^ = e[c,0] + e[c,1] + …e[c,m-1]计算z的量化表示。然后将 z^输入解码器以重建输入x。
损失函数
这一损失函数同时优化编码器、解码器以及码书的参数。为了避免RQ-VAE中码书崩塌(即大部分输入映 射到少数码书向量)的现象,我们通过k-means聚类对码书进行初始化。在模型训练的首批数据上运行k- means算法,并使用聚类中心初始化码书。
其他量化方法对比:一种简单的替代方法是使用局部敏感哈希(LSH)生成语义ID。在消融实验中,我们发现RQ-VAE的表现优 于LSH。另外,也可以使用分层的k-means聚类方法,但它会丢失不同聚类之间的语义关联。我们还尝试 了VQ-VAE,虽然其在检索候选物品时的性能与RQ-VAE相近,但其语义ID缺乏层次性,而这种层次性赋 予了许多新功能。
处理语义冲突:由于语义嵌入的分布、码书大小和码字长度的选择,可能会发生语义冲突(即多个物品映射到相同的语义ID)。为解决冲突,我们在语义ID后追加额外的标识符使其唯一化。例如,如果两个物品的语义ID均为(12, 24, 52),可以分别表示为(12, 24, 52, 0)和(12, 24, 52, 1)。
为了检测冲突,我们维护一个将语义ID映射到对应物品的查找表。这种检测和修正仅需在RQ-VAE训练完 成后执行一次。此外,由于语义ID是整数元组,相比于高维嵌入,查找表在存储方面更加高效。
3.2 使用语义ID的生成式检索
我们为每位用户构建交互物品的序列,通过按照时间顺序对其交互过的物品进行排序。给定一个形式为 (item1, …, itemn)的序列,推荐系统的任务是预测下一个项目itemn+1。我们提出了一种生成式方法,直 接预测下一个项目的语义ID。
形式上,设(ci,0, …, ci,m-1)为项目itemi的m长度语义ID。然后,我们将项目序列转换为序列(c1,0, …, c1,m-1, c2,0, …, c2,m-1, …, cn,0, …, cn,m-1)。序列到序列模型随后被训练来预测itemn+1的语义ID,即 (cn+1,0, …, cn+1,m-1)。鉴于我们框架的生成性质,解码器生成的语义ID可能不匹配推荐语料库中的任 何项目。然而,如图6所示,这种事件发生的概率很低。
总结
本文提出了一种名为TIGER的新范式,旨在利用生成模型在推荐系统中检索候选项目。该方法的核心在于一 种新颖的项目语义ID表示,它通过对内容嵌入应用层次量化器(RQ-VAE)来生成构成语义ID的标记。我们 的框架提供了一个模型,该模型无需创建索引即可进行训练和部署——其中,Transformer内存充当项目的 语义索引。我们注意到,与那些需要在训练期间创建大型嵌入表或为每个项目生成索引的系统相比,我们的 嵌入表的基数不会随项目空间的基数线性增长,这对我们来说是有利的。通过在三个数据集上进行实验,我 们证明了我们的模型可以实现最先进的检索性能,同时能够泛化到新的、未见过的项目上。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。