Embedding 的进化、训练与工业实战

44 阅读2分钟

深度拆解推荐系统核心:Embedding 的进化、训练与工业实战

在推荐系统领域,Embedding(嵌入) 是连接稀疏离散特征与深度神经网络的桥梁。从架构转型算法,理解 Embedding 不仅要看它“长什么样”,更要看它“怎么变强”。

一、 核心痛点:为什么 LR 之后必有 Embedding?

传统的逻辑回归(LR)擅长记忆,它通过手动特征交叉记住“北京人爱吃饺子”这种显式模式。但 LR 是扩展的“矮子”:如果数据中没出现过“中国人买火鸡”,LR 的权重就是 0。

Embedding 的出现实现了“模糊查找” 。它将 ID 映射到低维稠密向量,通过计算向量间的夹角,即使是未见过的冷门组合,模型也能“举一反三”。


二、 深度解析:Embedding 是如何“练”成的?

这是算法的核心。Embedding 的训练本质上是一个以代理任务为驱动的参数优化过程

1. 数学骨架:前向传播 (Forward Pass)

无论是在 Word2Vec 还是双塔召回模型中,核心都是计算内积得分

  • 输入: 用户 ID uu 和物品 ID ii
  • 查表: 从矩阵 WRV×dW \in \mathbb{R}^{V \times d} 中 Lookup 出向量 vuv_uviv_i
  • 得分: y^=σ(vuvi)\hat{y} = \sigma(v_u \cdot v_i^\top),其中 σ\sigma 为 Sigmoid 函数。

2. 灵魂更新:反向传播 (Backward Pass)

当用户点击了某个商品(正样本,Label y=1y=1),模型会产生一个误差。为了降低 Loss,模型必须调整 vuv_uviv_i

根据梯度下降公式:

vnew=voldηLossvv_{new} = v_{old} - \eta \cdot \frac{\partial Loss}{\partial v}

梯度拉力直觉:

  • 吸引力 (Pull): 如果用户点击了商品,梯度会引导 vuv_uviv_i 的方向移动,缩短它们在空间中的距离。
  • 排斥力 (Push): 为了防止所有向量缩到一个点,我们需要负采样 (Negative Sampling) 。随机抽取未互动的 ID 作为负样本,产生的梯度会将 vuv_u 与这些负样本向量推开。

3. 特征处理:数值与类别的分化

  • 类别型: 直接 Lookup,训练对应的 ID 行。
  • 数值型: 工业界更偏爱分桶 (Binning) 。将连续值变为离散 ID,从而让不同区间(如不同价格段)拥有独立的 Embedding 向量,捕捉复杂的非线性偏好。

三、 进阶:独占式 Embedding 与语义解耦

当你的数据量足够大时,共享 Embedding 反而会变成负担。

  • 语义干扰: “安装”反映的是优点,“卸载”反映的是痛点。如果强行共用一套向量,梯度会产生“相互拉扯”,导致语义模糊。
  • 工业方案: 采用独占式 Embedding,为点击、购买、收藏、卸载设置独立的参数矩阵。同一个 ItemID 在不同场景下拥有不同的“面孔”,互不干扰,极大提升了模型在细分场景的预估精度。

四、 架构视角:大规模 Embedding 的落地难点

作为架构背景的同学,你必须关注 Embedding 带来的工程挑战:

  1. 参数爆炸: Embedding 往往占据模型总体积的 80% 以上。
  2. 动态增长: 工业界不使用固定维度的 One-hot 乘法,而是使用 Lookup Table
  3. 冲突与淘汰: 使用 Hash 映射 限制总空间,并配以类似 Redis TTL 的过期淘汰机制,清理长时间不出现的冷 ID 向量。

结语

Embedding 绝不是一张死表,它是算法在海量行为数据中,利用梯度“揉捏”出来的语义空间。从架构转向算法,理解了这种“动态建模”的思维,你就掌握了现代推荐系统的钥匙。