什么是语义ID?

语义ID(Semantic ID)是推荐系统中一种革命性的物品表示方法,它将传统的随机数字ID改造为具有语义含义的离散标识符。简单来说,语义ID就像是给每个商品或内容贴上一个"智能标签",这个标签不仅能唯一标识物品,还能反映物品的核心特征和类别信息。

传统ID vs 语义ID的对比:

特征传统随机ID语义ID
表示形式随机数字(如123)离散码字序列(如[10,21,50])
语义信息无有层次化语义结构
相似性表达无法表达相似性相似物品具有重叠码字
冷启动能力弱强
泛化能力弱强

为什么需要语义ID?

传统推荐系统面临三大核心挑战:

  1. 冷启动问题:新物品缺乏历史交互数据,难以被有效推荐
  2. 反馈环路:热门物品不断被推荐,长尾物品永远得不到曝光
  3. 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​)

步骤:

  1. 初始化:r0=zr_0 = zr0​=z(初始残差等于输入向量)

  2. 逐层量化:对于 l=0l = 0l=0 到 L−1L-1L−1:

    • 在码本 ClC_lCl​ 中查找与当前残差 rlr_lrl​ 最接近的码字:
      cl=arg⁡min⁡c∈Cl∥rl−c∥22c_l = \arg\min_{c \in C_l} \|r_l - c\|_2^2cl​=argc∈Cl​min​∥rl​−c∥22​
    • 计算下一层残差:
      rl+1=rl−clr_{l+1} = r_l - c_lrl+1​=rl​−cl​
  3. 输出:语义ID序列 (c0,c1,...,cL−1)(c_0, c_1, ..., c_{L-1})(c0​,c1​,...,cL−1​)

训练目标

训练RQ模型需要优化三个损失函数:

  1. 重构损失:确保量化后的向量能准确重建原始输入
    Lrecon=∥x−x^∥22L_{recon} = \|x - \hat{x}\|_2^2Lrecon​=∥x−x^∥22​

  2. 量化损失:鼓励输入向量与码字接近
    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​

  3. 码本损失:鼓励码字靠近选择它的输入向量
    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=arg⁡min⁡c∈C0∥z−c∥22=42c_0 = \arg\min_{c \in C_0} \|z - c\|_2^2 = 42c0​=argc∈C0​min​∥z−c∥22​=42
  • 计算残差:r1=z−c0r_1 = z - c_0r1​=z−c0​

第1层(中粒度):

  • 在码本 C1C_1C1​ 中查找最接近 r1r_1r1​ 的码字:
    c1=arg⁡min⁡c∈C1∥r1−c∥22=156c_1 = \arg\min_{c \in C_1} \|r_1 - c\|_2^2 = 156c1​=argc∈C1​min​∥r1​−c∥22​=156
  • 计算残差:r2=r1−c1r_2 = r_1 - c_1r2​=r1​−c1​

第2层(细粒度):

  • 在码本 C2C_2C2​ 中查找最接近 r2r_2r2​ 的码字:
    c2=arg⁡min⁡c∈C2∥r2−c∥22=789c_2 = \arg\min_{c \in C_2} \|r_2 - c\|_2^2 = 789c2​=argc∈C2​min​∥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:表示"红色真丝"属性

算法优势

  1. 层次化表示:天然形成从粗到细的语义结构
  2. 可解释性:每层码字对应不同粒度的语义信息
  3. 参数效率:参数从 O(N×d)O(N \times d)O(N×d) 降低到 O(K×d)O(K \times d)O(K×d)
  4. 泛化能力:相似物品具有相似的语义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末尾添加额外标识符(如哈希值)确保唯一性。

应用场景

  1. 生成式推荐:将语义ID作为Transformer的输入token,自回归生成下一个物品
  2. 判别式推荐:将语义ID作为稀疏特征输入传统推荐模型
  3. 相似性检索:基于语义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%,在长尾商品和新商品的推荐上表现尤为突出。

推荐论文与学习资源

核心论文

  1. TIGER:Recommender Systems with Generative Retrieval (NeurIPS 2023)

    • 论文链接:https://arxiv.org/abs/2305.05065
    • 核心贡献:提出基于语义ID的生成式推荐框架
  2. DAS:Dual-Aligned Semantic IDs Empowered Industrial Recommender System (CIKM 2025)

    • 论文链接:https://arxiv.org/abs/2508.10584
    • 核心贡献:一段式对偶对齐语义ID框架
  3. Meta语义ID:Enhancing Embedding Representation Stability in Recommendation Systems with Semantic ID

    • 论文链接:https://arxiv.org/abs/2504.02137
    • 核心贡献:使用语义ID提升推荐系统ID Embed稳定性
  4. CAT-ID²:Category-Tree Integrated Document Identifier Learning for Generative Retrieval In E-commerce

    • 论文链接:https://arxiv.org/abs/2511.08006
    • 核心贡献:融合类别树先验知识的语义ID生成方法

学习资源

  1. 技术博客:

    • CSDN:https://blog.csdn.net/MoonOutCloudBack/article/details/149078961
    • 知乎:https://zhuanlan.zhihu.com/p/1938973235350861588
    • 稀土掘金:https://juejin.cn/post/7580564126402199602
  2. 开源代码:

    • TIGER:https://github.com/google-research/tiger
    • DAS:https://github.com/kuaishou/DAS
    • CAT-ID²:https://github.com/meituan/CAT-ID2
  3. 在线课程:

    • 推荐系统前沿技术:https://www.coursera.org/learn/recommender-systems
    • 深度学习与推荐系统:https://www.edx.org/course/deep-learning-for-recommender-systems

未来发展方向

  1. 多模态语义ID:融合文本、图像、视频等多模态信息生成更丰富的语义ID
  2. 动态语义ID:支持在线更新和增量学习,适应物品内容的动态变化
  3. 跨域语义ID:构建统一的语义空间,支持跨平台、跨业务的推荐
  4. 可解释性增强:让语义ID的生成过程更加透明和可解释

总结

语义ID作为推荐系统从传统范式向生成式范式演进的关键技术,通过将物品的内容特征转化为具有语义含义的离散标识,有效解决了冷启动、反馈环路、ID漂移等长期困扰推荐系统的难题。随着大语言模型和多模态技术的发展,语义ID将在推荐系统的智能化、个性化、可解释性等方面发挥越来越重要的作用,成为下一代推荐系统的核心技术基石。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐