文章目录

  • 1. 背景
  • 2. 方法
    • 2.1 长语义id
      • 2.1.1 获取 item embedding
      • 2.1.2 item embedding 离散化
    • 2.2 并行生成语义 id
      • 2.2.1 训练(item串行,token并行)
      • 2.2.2 高效 logit 打分
        • 暴力枚举式打分:
        • 高效实现:
        • 复杂度分析:
    • 2.3 图约束推理 Top-k
  • 3. 实验
    • 3.1 主试验
    • 3.2 推理效率分析
    • 3.3 消融实验
    • 3.4 语义id长度
    • 3.5 冷启动
    • 3.6 推理参数 b/k/q
  • 4. 总结

来学一下 KDD2025 的一篇 Meta 的关于 生成式推荐的文章:RPG( Recommendation with Parallel semantic ID Generation)。

论文链接:https://arxiv.org/pdf/2506.05781

代码链接:https://github.com/facebookresearch/RPG_KDD2025

1. 背景

生成式推荐大部分都是将每个 item 通过 codebook 拆分成多个 语义id(sid),这点就不说了。文中提到一个效率瓶颈,就是说这种自回归的方式延迟高,比如一个 item 用 3 个 sid 表示,就需要经过 3 次 decoder,还需要 beam-search 等策略生成多个候选,每一步都要维护多个”备选拼法“,比如我们想要通过 beam-search 得到 top 512,就需要在通过 bos 生成 sid0 的时候保留 top 512,然后再第二步的时候,需要将这 512 个同时输入 decoder,并将生成的 sid1 也保留 top 512,在这 262144 的概率组合中,选择 top512,再继续将这 512 个 sid0-sid1组合 输入到 decoder 第三步得到 sid2 的 top 512,然后再从 262144 个概率组合中,选择 top 512 的 sid0-sid1-sid2,得到 top 512的结果。这样需要跑大量的推理,耗时算力都比较大。

上面的方法还是说 用 3 个语义id 去表示一个 item 的情况,但是 token 太少,表达力不够,现实中一个 item 可能属性、内容很丰富,只用 3 个 token来描述肯定难以把 item 丰富的语义细致地编码出来,也就是说:token 越少,模型能表达的内容越有限;token越多,推理资源越扛不住。当然上面这种 3 个语义id 的方法 肯定需要 RQ 的,不然其实 3 个 token 表达的信息真的太少了,用了 RQ 其实应该还好。RQ 的话每层 codebook 就是有递进关系的了。

本文对比这篇 VQ-Rec 这篇文章是采用 Product Quantization(PQ)的方式,这种方式就是将一个 item embedding 比如 1024 维度,如果要分成 8 个 token,就是切成 8 份,每份 128 维,每份就是一个独立的子空间,每份子空间都配一个独立的 codebook,每个 codebook 大小就取决于需求了,假设是 8192 个吧,训练 codebook 采用 K-means 聚类,对每个子空间,用 K-means 聚类算法,聚出 8192 个中心点 表示 8192 个语义id。对于一个 item,我们可以将其切分,然后用其 每个 128 维 embedding 去各个 codebook 中找对应的 sid,拼成 8 个 sid,这 8 个 sid 就可以看做是这个 item 的语义id。实际推荐或下游任务,如果需要变回向量,直接把 8 个 sid 对应的 8 个中心向量查出来,拼接成最终的 item embedding。

对于并行生成 RPG 来说有两个挑战:

  1. 解码空间稀疏:所有 token 并行生成后,每个 token 之间没有顺序以来,互不影响,”合法“的 sid 组合在巨大的组合空间中其实极其稀少,比如 8 个 sid 每个 codebook 有 8192 个 token 就 81928 大约 1030 个组合,现实实际中,item 最多 也是 亿级 10 9 ,所以就会有大量 sid 组合 在实际商品池力根本不存在。
  2. 高效无序解码:推荐系统要为每个用户生成 top-k ,如果把所有可能得 token 组合都枚举出来就失去了 并行生成的效率优势。传统 beam-search 方法, token是有顺序的,可以依次生成,但是 RPG 方法里,token 是无序并行生成的,不需要按照固定顺序生成,所以不能用传统的有序解码策略。怎样才能在不遍历所有 token 组合的情况下,快速精准的找到真实存在的得分最高的 item id?

2. 方法

在这里插入图片描述

2.1 长语义id

2.1.1 获取 item embedding

本文采用两种将 text --> embedding 的 embedding模型 sentence-t5-base 以及 更强大的 openAI 的 text-emb-3-large,实验如下:

在这里插入图片描述

作者结论:对于 基于 OPQ 的 RPG 来说,换用更好的 embedding 模型,效果提升;但是对于 基于 RQ 的 TIGER 来说,效果差异不大。

2.1.2 item embedding 离散化

主流离散化方式有两种:RQ、PQ。

本文选择 PQ/OPQ,因为 PQ 并行预测友好,生成的 token 可以同时独立预测,不像 RQ 那样每一步都依赖前面的 token;表达均衡且可扩展:RQ 生成的 token 序列会出现 ”某些 token 很重要,某些 token 没啥用“的现象(信息分布不均),还容易随着 token 变多而失控(可扩展性差)。而 PQ/OPQ 各个 token 携带的信息比较均衡、规模也好扩展。

2.2 并行生成语义 id

2.2.1 训练(item串行,token并行)

训练目标是让模型能一次性并行预测所有 token,而不是像传统自回归那样一步步生成。

假设用户历史行为序列编码成向量 s s s,预测目标 item 的 sid ( c t , 1 , … , c t , m ) (c_{t,1}, \dots, c_{t,m}) (ct,1,,ct,m)

训练,最大化整个语义ID各个位的概率乘积(即并行多位分类):
L = − ∑ j = 1 m log ⁡ P ( j ) ( c t , j ∣ s ) \mathcal{L} = -\sum_{j=1}^{m} \log \mathbb{P}^{(j)}(c_{t,j} | s) L=j=1mlogP(j)(ct,js)

其中,第 j j j 位token的概率 P ( j ) ( c t , j ∣ s ) \mathbb{P}^{(j)}(c_{t,j} | s) P(j)(ct,js) 通过下式计算:

P ( j ) ( c t , j ∣ s ) = exp ⁡ ( e c t , j ⊤ ⋅ g j ( s ) / τ ) ∑ c ∈ C ( j ) exp ⁡ ( e c ⊤ ⋅ g j ( s ) / τ ) \mathbb{P}^{(j)}(c_{t,j}|s) = \frac{\exp(\mathbf{e}_{c_{t,j}}^\top \cdot \mathbf{g}_j(s)/\tau)}{\sum_{c \in C^{(j)}} \exp(\mathbf{e}_c^\top \cdot \mathbf{g}_j(s)/\tau)} P(j)(ct,js)=cC(j)exp(ecgj(s)/τ)exp(ect,jgj(s)/τ)

  • g j ( s ) \mathbf{g}_j(s) gj(s)是将序列表示 s s s 投影到第 j j j 个 codebook 空间的映射, τ \tau τ 是温度超参数。

2.2.2 高效 logit 打分

在模型训练好后,推理阶段的目标是:给定用户历史行为(编码为 s s s),计算每个候选商品的 sid组合 的匹配分数,挑出 Top-K 推荐

暴力枚举式打分:
  • 理论上:每个 item i 有自己的 sid ( c i , 1 , … , c i , m ) (c_{i,1},…,c_{i,m}) (ci,1,,ci,m)
  • 按照训练时的loss公式,可以为每个 item i 打分: score i = ∑ j = 1 m log ⁡ p c i , j ( j ) \text{score}i = \sum{j=1}^{m} \log p_{c_{i,j}}^{(j)} scorei=j=1mlogpci,j(j)
  • 这里的 p c i , j ( j ) p_{c_{i,j}}^{(j)} pci,j(j) ,就是用户序列 s s s 在第 j j j 位 token 上,预测它是 c i , j c_{i,j} ci,j 的概率。
高效实现:

对于每一层 codebook(总共 m m m 层),先将用户行为序列 s s s 经过投影( g j ( s ) \mathbf{g}_j(s) gj(s))和温度缩放( τ \tau τ),与所有 codebook 的 embedding 计算点积(可以理解为分类 logit),再 softmax,得到该层所有 token 的概率分布 p ( j ) p^{(j)} p(j)
p ( j ) = softmax ( E j ⋅ g j ( s ) τ ) ∈ R M p^{(j)} = \text{softmax}\left( \frac{E_j \cdot \mathbf{g}_j(s)}{\tau} \right) \in \mathbb{R}^{M} p(j)=softmax(τEjgj(s))RM

  • E j E_j Ej 是第 j j j 层 codebook 的 embedding 表, M M M 是每层 codebook 的 token 数量(比如256)。
  • 这一步只算 m m m 层,每层 M M M 个logit,和商品数量无关

对于任意一个商品 i i i,它的 sid组合 是 ( c i , 1 , … , c i , m ) (c_{i,1}, …, c_{i,m}) (ci,1,,ci,m),直接取出每层对应 token 的概率 p c i , j ( j ) p_{c_{i,j}}^{(j)} pci,j(j),取对数相加:
score i = ∑ j = 1 m log ⁡ p c i , j ( j ) \text{score}_i = \sum_{j=1}^{m} \log p_{c_{i,j}}^{(j)} scorei=j=1mlogpci,j(j)
只需查表+加法,就能算出每个商品的得分,最后选 Top-k 即可。

复杂度分析:
  • 传统方式复杂度: O ( N m d ) O(Nmd) O(Nmd) (遍历所有商品,每个商品 m 位 codebook,每位与用户表示做一次点积)
  • 优化后复杂度: O ( M n d + N m ) O(Mnd + Nm) O(Mnd+Nm) (M 远小于 N)前面是 每位 codebook 和用户序列 算一次点积,后面是查表累加。

2.3 图约束推理 Top-k

理论上,上面推理就可以了,遍历所有 item,把每个 item id 的所有 token logit 分数相加,得到总分,选分数最高的 Top-k。

但是

  1. 实际 item 数量巨大,这样遍历太慢。
  2. 直接全遍历可能选出的 Top-k 商品 token 组合,有些组合其实在真实语义空间里不合法。因为每一位都是独立最大化,可能拼成不存在的 item id。

故提出 图约束推理:

在这里插入图片描述

核心思想:只允许在真实出现过的 item 之间做 Top-k 搜索,避免出现非法组合。

每个节点就是一个 item (sid 组合),边用 ”语义相似性“ (两个 item 如何 sid 组合接近 他们就相似)连起来:

  • 两个节点 A = ( c 1 , 1 , … , c 1 , m ) A=(c_{1,1},…,c_{1,m}) A=(c1,1,,c1,m) B = ( c 2 , 1 , … , c 2 , m ) B=(c_{2,1},…,c_{2,m}) B=(c2,1,,c2,m)
  • 相似度 S ( A , B ) = ∑ j = 1 m e j , c 1 , j T e j , c 2 , j S(A, B) = \sum_{j=1}^m \mathbf{e}_{j,c_{1,j}}^T \mathbf{e}_{j,c_{2,j}} S(A,B)=j=1mej,c1,jTej,c2,j

对每个节点,只保留相似度最高的 k 个邻居,构成稀疏图。

图推理流程

  1. 随机采样一批节点作为候选集,比如上图中,随机采样 b 个节点,图中 2 个(实验中 10 个)
  2. 扩展候选集:对当前每个节点,找它在图中的 k 个邻居,图中 2 个(实验中 50-100-500 个)
  3. 打分:对候选集中每个节点,计算其 sid 分数(每一位 token 的 logit 相加)
  4. 保留得分最高的 b 个,作为新一轮候选
  5. 迭代 q 次(实验中 2-3-5 次)
  6. 最终保留 b 个节点

3. 实验

3.1 主试验

在这里插入图片描述

3.2 推理效率分析

在这里插入图片描述

原因

  • 高效的 token 级并行机制
  • 图约束的稀疏检索机制

对比 TIGER

  • 推理速度慢:每一步都要 forward 一次模型,token 越多,推理越慢,复杂度随商品的 token 数量 和 beam-search 步数线性增加。
  • infer 内存消耗大:beam-search 过程中要维护多个候选路径。

3.3 消融实验

在这里插入图片描述

3.4 语义id长度

在这里插入图片描述

小数据集支撑不了太多层 codebook,大数据集适合更多层 codebook

3.5 冷启动

在这里插入图片描述

3.6 推理参数 b/k/q

在这里插入图片描述

4. 总结

很有意思的工作!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910089.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910089.shtml
英文地址,请注明出处:http://en.pswp.cn/news/910089.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速搭建MySQL8.0本地数据库,连接idea

1.打开终端,按顺序输入命令,在root用户下,创建用户和数据库 1.进入数据库 mysql -u root -p 2.创建专用数据库 create database 数据库名 character set utf8mb4 3.使用数据库 use 数据库名 4.设置此数据库用户 create user "用户名&q…

Docker 常用运维命令

Docker 提供了一系列命令来帮助开发者和运维人员管理容器、镜像以及其他 Docker 对象。以下是一些常用的 Docker 运维命令&#xff0c;这些命令可以帮助你更高效地进行日常操作&#xff1a; 容器相关命令 启动容器&#xff1a; docker start <container_id_or_name>停止…

linux下MQTT订阅发布验证-mosquitto安装测试流程

本文详细介绍了&#xff0c;如何在linux环境搭建一个MQTT server, 并同时安装 了客户端 &#xff0c;进行了mqtt消息发布、订阅验证。 mosquitto 服务端安装(ubuntu) #添加源 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppasudo apt update # install mosquitto su…

Source Insight 的简单介绍

对 Source Insight 进行一次全面深入的介绍。这款软件在特定开发者群体中&#xff08;尤其是嵌入式、驱动、系统级编程领域&#xff09;享有极高的声誉&#xff0c;被誉为“源码阅读和分析的神器”。 一、 起源与历史 诞生背景 (1990年代中后期)&#xff1a; 在1990年代中后期…

Linux 系统中,查询 JDK 的安装目录

在 Linux 系统中&#xff0c;查询 JDK 的安装目录可以通过以下几种常用方法&#xff1a; 方法 1&#xff1a;通过 update-alternatives 查询&#xff08;推荐&#xff09; 适用于通过包管理器&#xff08;如 apt/yum&#xff09;安装的 JDK&#xff1a; sudo update-alternat…

简单工厂、工厂、抽象工厂模式

简单工厂、工厂、抽象工厂模式 1. **简单工厂模式&#xff08;Simple Factory&#xff09;**2. **工厂方法模式&#xff08;Factory Method&#xff09;**3. **抽象工厂模式&#xff08;Abstract Factory&#xff09;**对比总结 以下是三种工厂模式在C#中的实现与对比分析&…

如何在Redis中实现缓存功能

Redis 是一种高性能的键值存储系统&#xff0c;广泛用于实现缓存功能。它通过将数据存储在内存中&#xff0c;能够快速读写数据&#xff0c;从而显著提高应用程序的性能。在Redis中实现缓存功能需要结合数据读写策略、失效机制及性能优化方案。 一、Redis作为缓存的核心优势 …

Kafka消费者客户端源码深度解析:从架构到核心流程

在Kafka生态系统中&#xff0c;消费者客户端作为数据消费的入口&#xff0c;其设计与实现直接影响数据处理的效率和可靠性。本文将深入Kafka消费者客户端源码&#xff0c;通过核心组件解析、流程拆解与源码分析&#xff0c;揭示其高性能消费背后的技术奥秘&#xff0c;并辅以架…

从0开始学习R语言--Day26--因果推断

很多时候我们在探讨数据的相关性问题时&#xff0c;很容易会忽略到底是数据本身的特点还是真的是因为特征的区分导致的不同&#xff0c;从而误以为是特征起的效果比较大。 这就好比测试一款新药是否真的能治病&#xff0c;假如吃药的患者康复的更快&#xff0c;那到底是因为药…

Python 中布尔值的使用:掌握逻辑判断的核心

在 Python 中&#xff0c;布尔值&#xff08;bool&#xff09;是进行逻辑判断的基础。布尔值只有两个可能的值&#xff1a;True 和 False。通过布尔值&#xff0c;你可以实现条件判断、循环控制以及其他逻辑操作。今天&#xff0c;就让我们一起深入探讨如何在 Python 中使用布尔…

IDEA 中 Tomcat 部署 Java Web 项目(Maven 多模块 非 Maven 通用版)(linux+windows)

引言 Java Web 开发中&#xff0c;Tomcat 是最常用的 Servlet 容器&#xff0c;而项目类型通常分为 Maven 管理&#xff08;依赖自动处理、多模块聚合&#xff09; 和 非 Maven 纯手工管理&#xff08;手动引入 jar 包、配置项目结构&#xff09;。本文覆盖 两种项目类型 的 T…

使用 React Native Web 实现三端统一开发

使用 React Native Web 实现三端统一开发 关键点 React Native Web 简介&#xff1a;React Native Web 是一个允许开发者使用 React Native 组件和 API 构建 Web 应用的库&#xff0c;支持在 iOS、Android 和 Web 上使用同一套代码。架构&#xff1a;通过 React DOM 渲染 Rea…

分享一个git上基于std::array实现的循环队列(Cycle Queue)模板类库

为充分利用向量空间,克服“假溢出”现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。 网上有很多关于循…

三维视频融合平台:如何构建动态感知的数字空间

分享大纲&#xff1a; 你的三维平台为何不能承载动态视频捷码打造三维视频融合平台的三步法则为何选择捷码 在智慧城市建设过程中&#xff0c;将实时视频与三维空间结合&#xff0c;已经成为一种主流趋势。传统视频监控模式&#xff0c;经常面临视频分散、操作复杂等问题。然而…

【AI Study】第五天,Matplotlib(5)- 颜色映射

文章概要 本文详细介绍 Matplotlib 的颜色映射功能&#xff0c;包括&#xff1a; 颜色映射类型颜色映射设置数据标准化颜色条 颜色映射类型 pcolormesh import matplotlib.pyplot as plt import numpy as np# 创建网格数据 x np.linspace(-3, 3, 100) y np.linspace(-3,…

DB2中合理使用INCLUDE关键字创建索引

DB2中合理使用 INCLUDE 关键字创建索引 1. 为何还需要 INCLUDE&#xff1f;——从索引的两大痛点说起 查询想“只读索引不回表”&#xff0c;却又不想把列都做键 → 联合索引空间膨胀&#xff0c;更新放大。唯一索引定位快&#xff0c;但只能返回键列数据 → 仍需 I/O 跳回数据…

基于Spring Boot的民宿管理系统设计与实现

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅Spring Boot框架3. ✅Vue.js框架4. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 浏览后台首页1.2 预订信息管理1.3 入住信息管理1.4 退房信息管理1.…

大数据系统架构实践(一):Zookeeper集群部署

大数据系统架构实践&#xff08;一&#xff09;&#xff1a;Zookeeper集群部署 文章目录 大数据系统架构实践&#xff08;一&#xff09;&#xff1a;Zookeeper集群部署一、Zookeeper简介二、部署前准备三、部署Zookeeper集群1. 下载并解压安装包2. 配置zoo.cfg3. 设置日志目录…

《道德经》:探寻古老智慧中的哲学之光

我强烈推荐4本可以改变命运的经典著作&#xff1a; 《寿康宝鉴》在线阅读白话文《欲海回狂》在线阅读白话文《阴律无情》在线阅读白话文《了凡四训》在线阅读白话文 《道德经》作为道家经典&#xff0c;短短五千言&#xff0c;却字字珠玑&#xff0c;蕴含着超越时空的哲学智慧。…

科技赋能民生:中建海龙为民生改善注入新动力

在社会发展的进程中&#xff0c;民生改善始终占据着核心地位。住房、基础设施建设等民生领域的进步&#xff0c;直接关系到民众的生活质量与幸福感。中建海龙科技有限公司&#xff08;以下简称“中建海龙”&#xff09;作为建筑行业的创新引领者&#xff0c;凭借其强大的科技实…