深度拆解推荐系统核心:Embedding 的进化、训练与工业实战
在推荐系统领域,Embedding(嵌入) 是连接稀疏离散特征与深度神经网络的桥梁。从架构转型算法,理解 Embedding 不仅要看它“长什么样”,更要看它“怎么变强”。
一、 核心痛点:为什么 LR 之后必有 Embedding?
传统的逻辑回归(LR)擅长记忆,它通过手动特征交叉记住“北京人爱吃饺子”这种显式模式。但 LR 是扩展的“矮子”:如果数据中没出现过“中国人买火鸡”,LR 的权重就是 0。
Embedding 的出现实现了“模糊查找” 。它将 ID 映射到低维稠密向量,通过计算向量间的夹角,即使是未见过的冷门组合,模型也能“举一反三”。
二、 深度解析:Embedding 是如何“练”成的?
这是算法的核心。Embedding 的训练本质上是一个以代理任务为驱动的参数优化过程。
1. 数学骨架:前向传播 (Forward Pass)
无论是在 Word2Vec 还是双塔召回模型中,核心都是计算内积得分。
- 输入: 用户 ID 和物品 ID 。
- 查表: 从矩阵 中 Lookup 出向量 和 。
- 得分: ,其中 为 Sigmoid 函数。
2. 灵魂更新:反向传播 (Backward Pass)
当用户点击了某个商品(正样本,Label ),模型会产生一个误差。为了降低 Loss,模型必须调整 和 。
根据梯度下降公式:
梯度拉力直觉:
- 吸引力 (Pull): 如果用户点击了商品,梯度会引导 向 的方向移动,缩短它们在空间中的距离。
- 排斥力 (Push): 为了防止所有向量缩到一个点,我们需要负采样 (Negative Sampling) 。随机抽取未互动的 ID 作为负样本,产生的梯度会将 与这些负样本向量推开。
3. 特征处理:数值与类别的分化
- 类别型: 直接 Lookup,训练对应的 ID 行。
- 数值型: 工业界更偏爱分桶 (Binning) 。将连续值变为离散 ID,从而让不同区间(如不同价格段)拥有独立的 Embedding 向量,捕捉复杂的非线性偏好。
三、 进阶:独占式 Embedding 与语义解耦
当你的数据量足够大时,共享 Embedding 反而会变成负担。
- 语义干扰: “安装”反映的是优点,“卸载”反映的是痛点。如果强行共用一套向量,梯度会产生“相互拉扯”,导致语义模糊。
- 工业方案: 采用独占式 Embedding,为点击、购买、收藏、卸载设置独立的参数矩阵。同一个
ItemID在不同场景下拥有不同的“面孔”,互不干扰,极大提升了模型在细分场景的预估精度。
四、 架构视角:大规模 Embedding 的落地难点
作为架构背景的同学,你必须关注 Embedding 带来的工程挑战:
- 参数爆炸: Embedding 往往占据模型总体积的 80% 以上。
- 动态增长: 工业界不使用固定维度的 One-hot 乘法,而是使用 Lookup Table。
- 冲突与淘汰: 使用 Hash 映射 限制总空间,并配以类似 Redis TTL 的过期淘汰机制,清理长时间不出现的冷 ID 向量。
结语
Embedding 绝不是一张死表,它是算法在海量行为数据中,利用梯度“揉捏”出来的语义空间。从架构转向算法,理解了这种“动态建模”的思维,你就掌握了现代推荐系统的钥匙。