news 2026/7/20 10:43:21

预训练 Embedding + 轻量级线上模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
预训练 Embedding + 轻量级线上模型

1. 推荐系统的“离线重兵,线上轻骑”范式

一句话概括:这是一种经典的“离线训练、在线推理”的工业界架构。它利用大规模离线集群,通过复杂的深度模型(如双塔DNN、Graph Embedding)将用户和物品预先编码为稠密向量(Embedding),然后在线上服务时,仅使用极其轻量级的计算(如向量点积、余弦相似度或单层LR)来完成最终的推荐排序。

核心逻辑
离线(重):复杂模型→训练用户向量 Eu 和 物品向量 Ei \text{离线(重)}:\text{复杂模型} \xrightarrow{\text{训练}} \text{用户向量 } E_u \text{ 和 物品向量 } E_i离线(重)复杂模型训练用户向量Eu物品向量Ei
在线(轻):实时计算Score=f(Eu,Ei)(通常是点积或浅层MLP) \text{在线(轻)}:\text{实时计算} \quad \text{Score} = f(E_u, E_i) \quad \text{(通常是点积或浅层MLP)}在线(轻)实时计算Score=f(Eu,Ei)(通常是点积或浅层MLP


2. 详细案例推导:短视频 App 的“双塔召回与排序”

我们以业界最经典的**双塔模型(Two-Tower Model)**应用为例,详细拆解该范式的全过程。

2.1 场景设定

  • 平台:某短视频 App(如抖音/TikTok)。
  • 任务:用户打开 App 时,从千万级视频库中快速筛选出用户最可能点击的 100 个视频。
  • 策略离线预训练 Embedding + 线上 Faiss 向量检索 + 轻量级点击率(CTR)校准

2.2 步骤一:离线预训练(重计算阶段)

我们使用历史日志(用户点击、观看时长)训练一个双塔 DNN 模型

  • 用户塔(User Tower):输入用户 ID、性别(男=1)、年龄(25)、最近30天观看类别分布(如 [搞笑:0.6, 科技:0.3, 美食:0.1])。
  • 物品塔(Item Tower):输入视频 ID、作者 ID、类别(如“搞笑”)、平均观看完成率。

为了手算方便,我们设定最终的输出维度为 3 维

训练完成后,我们取出对应的预训练 Embedding 向量

  • 用户 ( U )(小明,25岁,男,偏好搞笑)的预训练向量:
    Eu=[0.2,0.8,0.3] E_u = [0.2, 0.8, 0.3]Eu=[0.2,0.8,0.3]

  • 候选视频 A(搞笑猫猫视频,类别匹配度高)的预训练向量:
    EvA=[0.9,0.4,0.7] E_{vA} = [0.9, 0.4, 0.7]EvA=[0.9,0.4,0.7]

  • 候选视频 B(硬核科技讲座,类别匹配度低)的预训练向量:
    EvB=[0.1,0.2,0.8] E_{vB} = [0.1, 0.2, 0.8]EvB=[0.1,0.2,0.8]

2.3 步骤二:线上轻量级推理(极速计算)

此时,线上服务器不需要加载庞大的 DNN 模型,只需要加载上述生成的向量表到内存(或向量数据库 Faiss)中。

线上服务收到小明的请求时,执行最简单的**向量点积(内积)**作为匹配得分:

视频 A 得分
ScoreA=Eu⋅EvA=0.2×0.9+0.8×0.4+0.3×0.7 \text{Score}_A = E_u \cdot E_{vA} = 0.2 \times 0.9 + 0.8 \times 0.4 + 0.3 \times 0.7ScoreA=EuEvA=0.2×0.9+0.8×0.4+0.3×0.7
ScoreA=0.18+0.32+0.21=0.71 \text{Score}_A = 0.18 + 0.32 + 0.21 = 0.71ScoreA=0.18+0.32+0.21=0.71

视频 B 得分
ScoreB=Eu⋅EvB=0.2×0.1+0.8×0.2+0.3×0.8 \text{Score}_B = E_u \cdot E_{vB} = 0.2 \times 0.1 + 0.8 \times 0.2 + 0.3 \times 0.8ScoreB=EuEvB=0.2×0.1+0.8×0.2+0.3×0.8
ScoreB=0.02+0.16+0.24=0.42 \text{Score}_B = 0.02 + 0.16 + 0.24 = 0.42ScoreB=0.02+0.16+0.24=0.42

由于 ( 0.71 > 0.42 ),线上系统仅用了3 次乘法和 2 次加法(轻量级),就判断视频 A 更适合小明,并将其优先推送。


3. 该范式的核心优势(为什么流行)

  1. 极致的线上低延迟:将复杂的非线性计算(MLP、Attention)全部抛给离线集群,线上只做内存读取和浮点数乘法,QPS(每秒查询数)可以达到数万甚至数十万。
  2. 解耦服务:推荐系统的召回(匹配)和排序(精排)可以分离,工程架构更清晰。
  3. 海量候选集快速检索:配合近似最近邻(ANN)算法(如 Faiss),可以在毫秒级从千万级向量中捞出 Top-K。

4. 不足之处(硬伤与挑战)

虽然该范式极大地解放了线上算力,但它存在四个致命的缺陷,尤其在面对实时变化的推荐场景时显得“力不从心”。

4.1 缺陷一:灾难性的“实时性滞后”(无法捕捉兴趣漂移)

预训练 Embedding 通常每天甚至每周更新一次。在这一天之内,用户的兴趣可能发生剧烈变化(例如用户刚刚搜索了“婴儿奶粉”)。

  • 举例推导:小明在上午 10 点点击了 5 个“孕妇食谱”视频。离线模型 ( E_u = [0.2, 0.8, 0.3] ) 尚未更新。
  • 线上轻量模型依然基于旧的 ( E_u ) 计算得分,疯狂推荐搞笑视频。
  • 结果:推荐系统完全忽视了用户当下的即时意图,导致用户体验断崖式下降。

4.2 缺陷二:无法捕捉“非线性高阶特征交叉”(表达能力受限)

线上轻量级模型(通常是点积)本质上是线性的。它无法处理特征间的复杂非线性关系(如“年轻男性”在“深夜”刷到“游戏视频”的突增点击概率)。

数学推导证明
设线上轻量模型为(Score=∑k=1dwk⋅(Eu,k⋅Ei,k))( \text{Score} = \sum_{k=1}^{d} w_k \cdot (E_{u,k} \cdot E_{i,k}) )(Score=k=1dwk(Eu,kEi,k))(加权点积)。

这等价于一个一阶线性模型。而复杂的非线性交互(如(Age×Category)( \text{Age} \times \text{Category} )(Age×Category))在预训练时虽然被双塔学习过,但被压缩进了 3~5 维的向量中。
在这个过程中,大量细粒度的非线性交叉信息被丢失了(信息瓶颈)。线上模型无法像 DeepFM 或 DIN 那样,基于当前的上下文(如时间、设备)动态调整特征权重。

4.3 缺陷三:严重的“离线-在线目标不一致”(Serving Skew)

离线训练时,双塔模型的优化目标可能是“点击率(CTR)”或“余弦相似度”。但在线上,我们往往想优化“观看时长”或“互动率”。

  • 离线模型为了拟合点击,把搞笑视频的向量拉得很近。
  • 但线上轻量模型无法改变权重重心,它只能死板地计算这个固定的点击向量,无法根据线上实时的“完播率”指标去微调排序,导致线上核心业务指标(如留存)不升反降。

4.4 缺陷四:“冷启动”时的表象相似困境

当一个新视频(如“新晋网红张三的日常”)上传时,它没有历史交互数据,只能靠物品的内容向量(标题、封面)来生成 Embedding。

  • 由于离线模型没见过该视频的协同过滤信号,生成的 Embedding 往往与其真实潜在受众有偏差。
  • 线上轻量模型对此毫无纠正能力,导致新视频很难被探索出来,永远被压制在旧的热门视频之下。

5. 总结:架构演进方向

该范式并非完美无缺,它是“高并发”与“高精度”之间的妥协产物。为了解决上述缺陷,工业界目前的演进方向包括:

  1. 在线学习(Online Learning):使用流式计算(如 Flink)实时更新用户 Embedding,替代“预训练”的静态向量。
  2. 轻量级深度排序网络(Lightweight Deep Ranking):在线上不只用点积,而是部署经过剪枝、量化后的极简 MLP(如 2 层 32 个神经元),允许在毫秒级内进行非线性交叉(即“粗排”阶段的模型化)。
  3. 强化学习的引入(如 DRN):利用实时奖励(点击、观看时长)在线微调轻量级模型的参数,弥补离线 Embedding 滞后带来的损失。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/20 10:42:07

忘记压缩包密码怎么办?这款开源工具让你3步找回加密文件

忘记压缩包密码怎么办?这款开源工具让你3步找回加密文件 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经遇到过这样的…

作者头像 李华
网站建设 2026/7/20 10:41:35

GitHub中文界面:3分钟告别英文困扰的终极解决方案

GitHub中文界面:3分钟告别英文困扰的终极解决方案 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为GitHub满屏的英文…

作者头像 李华
网站建设 2026/7/20 10:41:31

C++实现单层时间轮:高效定时任务管理与网络编程实践

1. 项目概述与核心价值最近在重构一个老项目的网络模块,里面有个定时器管理写得那叫一个“随心所欲”,每次有连接超时或者心跳检测的需求,就得在事件循环里硬塞一堆判断,代码又乱性能又差。痛定思痛,决定把定时器模块彻…

作者头像 李华
网站建设 2026/7/20 10:41:00

如何用WeChatMsg实现个人数据主权:终极本地聊天记录管理指南

如何用WeChatMsg实现个人数据主权:终极本地聊天记录管理指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…

作者头像 李华
网站建设 2026/7/20 10:40:58

VS Code Codex 插件加载失败,一直转圈问题解决方案

使用 VS Code 的 Codex 插件时,有时会遇到插件无法正常加载的问题,表现为右侧 Codex 面板一直转圈,无法进入对话界面。本文记录一次实际排查过程,并给出解决方案。问题现象安装 VS Code Codex 插件后:右侧 Codex 面板一…

作者头像 李华
网站建设 2026/7/20 10:40:42

大气层系统1.7.1:Switch自定义固件的三层安全架构与实战指南

大气层系统1.7.1:Switch自定义固件的三层安全架构与实战指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层系统(Atmosphere)作为Nintendo Switc…

作者头像 李华