语义ID:让推荐系统从“盲人摸象“到“心领神会“的革命
什么是语义ID?
语义ID(Semantic ID)是推荐系统中一种革命性的物品表示方法,它将传统的随机数字ID改造为具有语义含义的离散标识符。简单来说,语义ID就像是给每个商品或内容贴上一个"智能标签",这个标签不仅能唯一标识物品,还能反映物品的核心特征和类别信息。
传统ID vs 语义ID的对比:
| 特征 | 传统随机ID | 语义ID |
|---|---|---|
| 表示形式 | 随机数字(如123) | 离散码字序列(如[10,21,50]) |
| 语义信息 | 无 | 有层次化语义结构 |
| 相似性表达 | 无法表达相似性 | 相似物品具有重叠码字 |
| 冷启动能力 | 弱 | 强 |
| 泛化能力 | 弱 | 强 |
为什么需要语义ID?
传统推荐系统面临三大核心挑战:
- 冷启动问题:新物品缺乏历史交互数据,难以被有效推荐
- 反馈环路:热门物品不断被推荐,长尾物品永远得不到曝光
- ID漂移:物品频繁上下架导致ID空间不稳定
语义ID通过将物品的内容特征(标题、描述、图片等)转化为具有语义含义的离散标识,让模型能够理解物品之间的相似性,从而有效解决上述问题。
语义ID的计算过程
算法核心:残差量化(Residual Quantization)
语义ID生成的核心是残差量化(RQ),这是一种将连续向量分层离散化的技术。其核心思想是:通过多层量化器,每一层量化当前残差,并将量化误差传递给下一层,最终用码字序列近似表示原始向量。
算法流程
输入:连续语义嵌入向量 z∈Rdz \in \mathbb{R}^dz∈Rd,码本集合 {C0,C1,...,CL−1}\{C_0, C_1, ..., C_{L-1}\}{C0,C1,...,CL−1},有L层码本,每层码本大小 KKK
输出:语义ID序列 (c0,c1,...,cL−1)(c_0, c_1, ..., c_{L-1})(c0,c1,...,cL−1)
步骤:
-
初始化:r0=zr_0 = zr0=z(初始残差等于输入向量)
-
逐层量化:对于 l=0l = 0l=0 到 L−1L-1L−1:
- 在码本 ClC_lCl 中查找与当前残差 rlr_lrl 最接近的码字:
cl=argminc∈Cl∥rl−c∥22c_l = \arg\min_{c \in C_l} \|r_l - c\|_2^2cl=argc∈Clmin∥rl−c∥22 - 计算下一层残差:
rl+1=rl−clr_{l+1} = r_l - c_lrl+1=rl−cl
- 在码本 ClC_lCl 中查找与当前残差 rlr_lrl 最接近的码字:
-
输出:语义ID序列 (c0,c1,...,cL−1)(c_0, c_1, ..., c_{L-1})(c0,c1,...,cL−1)
训练目标
训练RQ模型需要优化三个损失函数:
-
重构损失:确保量化后的向量能准确重建原始输入
Lrecon=∥x−x^∥22L_{recon} = \|x - \hat{x}\|_2^2Lrecon=∥x−x^∥22 -
量化损失:鼓励输入向量与码字接近
Lquant=∥sg(z)−e∥22+β∥z−sg(e)∥22L_{quant} = \|sg(z) - e\|_2^2 + \beta \|z - sg(e)\|_2^2Lquant=∥sg(z)−e∥22+β∥z−sg(e)∥22 -
码本损失:鼓励码字靠近选择它的输入向量
Lcodebook=∥e−sg(z)∥22L_{codebook} = \|e - sg(z)\|_2^2Lcodebook=∥e−sg(z)∥22
其中 sg(⋅)sg(\cdot)sg(⋅) 表示停止梯度操作,β\betaβ 通常取 0.25。
具体示例
假设我们要为一件"红色真丝连衣裙"生成语义ID,码本大小 K=1024K=1024K=1024,层数 L=3L=3L=3。
步骤1:内容特征编码
使用BERT编码器将文本描述"红色真丝连衣裙"转换为连续向量:
z=[0.23,−0.45,0.78,...,0.12]∈R768z = [0.23, -0.45, 0.78, ..., 0.12] \in \mathbb{R}^{768}z=[0.23,−0.45,0.78,...,0.12]∈R768
步骤2:残差量化
第0层(粗粒度):
- 在码本 C0C_0C0 中查找最接近 zzz 的码字:
c0=argminc∈C0∥z−c∥22=42c_0 = \arg\min_{c \in C_0} \|z - c\|_2^2 = 42c0=argc∈C0min∥z−c∥22=42 - 计算残差:r1=z−c0r_1 = z - c_0r1=z−c0
第1层(中粒度):
- 在码本 C1C_1C1 中查找最接近 r1r_1r1 的码字:
c1=argminc∈C1∥r1−c∥22=156c_1 = \arg\min_{c \in C_1} \|r_1 - c\|_2^2 = 156c1=argc∈C1min∥r1−c∥22=156 - 计算残差:r2=r1−c1r_2 = r_1 - c_1r2=r1−c1
第2层(细粒度):
- 在码本 C2C_2C2 中查找最接近 r2r_2r2 的码字:
c2=argminc∈C2∥r2−c∥22=789c_2 = \arg\min_{c \in C_2} \|r_2 - c\|_2^2 = 789c2=argc∈C2min∥r2−c∥22=789
步骤3:输出语义ID
最终语义ID为:(42,156,789)(42, 156, 789)(42,156,789)
这个ID序列具有层次化语义结构:
- c0=42c_0=42c0=42:表示"女装"类别
- c1=156c_1=156c1=156:表示"连衣裙"子类
- c2=789c_2=789c2=789:表示"红色真丝"属性
算法优势
- 层次化表示:天然形成从粗到细的语义结构
- 可解释性:每层码字对应不同粒度的语义信息
- 参数效率:参数从 O(N×d)O(N \times d)O(N×d) 降低到 O(K×d)O(K \times d)O(K×d)
- 泛化能力:相似物品具有相似的语义ID前缀
技术细节
码本初始化
码本通常使用K-Means聚类初始化:
- 对训练数据使用K-Means聚类得到 KKK 个质心
- 每层码本独立初始化
def train_residual_quantizer(data, num_layers, codebook_size):
codebooks = []
residuals = data.copy()
for layer in range(num_layers):
# 对当前残差进行K-means聚类
kmeans = KMeans(n_clusters=codebook_size)
kmeans.fit(residuals)
# 保存码本
codebooks.append(kmeans.cluster_centers_)
# 计算新残差
assignments = kmeans.predict(residuals)
quantized = kmeans.cluster_centers_[assignments]
residuals = residuals - quantized
return codebooks
训练策略
def residual_quantization(x, codebooks):
"""
残差量化生成语义ID
Args:
x: 输入向量 (d,)
codebooks: 码本列表 [(K,d), (K,d), ...]
Returns:
semantic_id: 语义ID列表
reconstructed: 重构向量
"""
semantic_id = []
residual = x.copy()
reconstructed = np.zeros_like(x)
for layer, codebook in enumerate(codebooks):
# 找最近码字
distances = np.linalg.norm(residual - codebook, axis=1)
idx = np.argmin(distances)
# 记录索引
semantic_id.append(idx)
# 更新重构向量
codeword = codebook[idx]
reconstructed += codeword
# 计算新残差
residual = residual - codeword
return semantic_id, reconstructed
采用端到端训练:
- 使用梯度下降优化三个损失函数的加权和
- 使用EMA(指数移动平均)更新码本
- 采用Gumbel-Softmax技巧处理离散选择
碰撞处理
为防止不同物品映射到相同ID,通常在语义ID末尾添加额外标识符(如哈希值)确保唯一性。
应用场景
- 生成式推荐:将语义ID作为Transformer的输入token,自回归生成下一个物品
- 判别式推荐:将语义ID作为稀疏特征输入传统推荐模型
- 相似性检索:基于语义ID前缀匹配快速召回相似物品
该算法在工业级推荐系统中已得到广泛应用,有效解决了冷启动、长尾推荐等核心问题。
语义ID的核心优势
1. 层次化语义结构
语义ID采用多层残差量化,天然形成从粗粒度到细粒度的层次结构。例如:
- 第一层码字c0c_0c0:表示粗粒度类别(如"美妆")
- 第二层码字c1c_1c1:表示子类(如"口红"或"粉底")
- 第三层码字c2c_2c2:表示更细粒度的属性(如"色号"或"品牌")
这种结构让模型能够理解"相似物品具有相似ID"的语义关系。
2. 强大的泛化能力
由于语义ID基于内容特征而非随机ID,即使新物品没有任何历史交互数据,只要其内容特征与已有物品相似,就能获得相似的语义ID,从而被模型正确推荐。这有效解决了冷启动问题。
3. 打破反馈环路
传统推荐系统中,热门物品会不断被推荐,形成"强者恒强"的正反馈。语义ID通过让模型理解物品之间的内容相似性,能够发现用户潜在的兴趣点,为长尾物品和新物品提供曝光机会。
4. 参数效率
使用语义ID后,模型参数从O(N×d)O(N \times d)O(N×d)(NNN为物品数量,ddd为嵌入维度)降低到O(K×d)O(K \times d)O(K×d)(KKK为码书大小,通常为1024或2048),大幅减少了存储和计算开销。
语义ID的应用场景
1. 电商推荐
在电商平台中,语义ID可以用于:
- 商品搜索:基于语义相似性快速召回相关商品
- 个性化推荐:根据用户历史行为预测下一个可能购买的商品
- 冷启动商品推荐:新上架商品即使没有历史数据也能被推荐
2. 内容推荐
在新闻、视频、音乐等平台,语义ID可以:
- 理解内容主题和风格
- 跨域推荐(如从新闻推荐到视频推荐)
- 多兴趣建模:一个用户可能同时喜欢多种类型的内容
3. 广告推荐
在广告系统中,语义ID可以:
- 提升广告与用户兴趣的匹配度
- 优化广告投放效果
- 提高广告转化率
工业级实践案例
快手DAS框架
快手提出的DAS(Dual-Aligned Semantic IDs)框架通过一段式对偶对齐,将语义ID与协同信号进行联合训练,实现了语义表征与协同信号互信息的端到端最大化。在线A/B测试显示,商业化广告大盘累计收入提升3.48%,冷启动场景累计收入提升8.98%。
美团CAT-ID²
美团将类别树先验知识融入语义ID生成过程,通过分层类别约束损失、聚类规模约束损失和离散度损失,生成既增强相似文档关联性、又保持不同文档表征独特性的ID。在线A/B测试显示,模糊意图查询的千次用户平均订单量提升0.33%,长尾查询提升0.24%。
Meta语义ID应用
Meta在广告推荐系统中使用语义ID前缀ngram方法,通过基于内容嵌入的层次聚类创建具有语义意义的碰撞,显著提升了嵌入表示的稳定性。在线指标提升0.15%,在长尾商品和新商品的推荐上表现尤为突出。
推荐论文与学习资源
核心论文
-
TIGER:Recommender Systems with Generative Retrieval (NeurIPS 2023)
- 论文链接:https://arxiv.org/abs/2305.05065
- 核心贡献:提出基于语义ID的生成式推荐框架
-
DAS:Dual-Aligned Semantic IDs Empowered Industrial Recommender System (CIKM 2025)
- 论文链接:https://arxiv.org/abs/2508.10584
- 核心贡献:一段式对偶对齐语义ID框架
-
Meta语义ID:Enhancing Embedding Representation Stability in Recommendation Systems with Semantic ID
- 论文链接:https://arxiv.org/abs/2504.02137
- 核心贡献:使用语义ID提升推荐系统ID Embed稳定性
-
CAT-ID²:Category-Tree Integrated Document Identifier Learning for Generative Retrieval In E-commerce
- 论文链接:https://arxiv.org/abs/2511.08006
- 核心贡献:融合类别树先验知识的语义ID生成方法
学习资源
-
技术博客:
- CSDN:https://blog.csdn.net/MoonOutCloudBack/article/details/149078961
- 知乎:https://zhuanlan.zhihu.com/p/1938973235350861588
- 稀土掘金:https://juejin.cn/post/7580564126402199602
-
开源代码:
- TIGER:https://github.com/google-research/tiger
- DAS:https://github.com/kuaishou/DAS
- CAT-ID²:https://github.com/meituan/CAT-ID2
-
在线课程:
- 推荐系统前沿技术:https://www.coursera.org/learn/recommender-systems
- 深度学习与推荐系统:https://www.edx.org/course/deep-learning-for-recommender-systems
未来发展方向
- 多模态语义ID:融合文本、图像、视频等多模态信息生成更丰富的语义ID
- 动态语义ID:支持在线更新和增量学习,适应物品内容的动态变化
- 跨域语义ID:构建统一的语义空间,支持跨平台、跨业务的推荐
- 可解释性增强:让语义ID的生成过程更加透明和可解释
总结
语义ID作为推荐系统从传统范式向生成式范式演进的关键技术,通过将物品的内容特征转化为具有语义含义的离散标识,有效解决了冷启动、反馈环路、ID漂移等长期困扰推荐系统的难题。随着大语言模型和多模态技术的发展,语义ID将在推荐系统的智能化、个性化、可解释性等方面发挥越来越重要的作用,成为下一代推荐系统的核心技术基石。
更多推荐
所有评论(0)