一、用户兴趣建模 属于离线模型吗?
结论:主体是「离线训练 + 在线实时推理」
训练阶段:完全离线用过去几天 / 几十天的用户行为日志,离线训练模型(DIN/DIEN/SIM),凌晨全量跑任务、更新模型权重。
向量生成:分两种
离线生成用户兴趣向量每天凌晨批量给全量用户算好兴趣向量,存到Redis / 向量池 / Hive,线上直接查,不用实时算。
在线实时推理用户当下刷广告、产生新点击 / 浏览,实时更新行为序列,实时走模型推理,刷新兴趣向量。
模型训练 = 离线;兴趣向量可离线预计算,也可在线实时更新。
二、需要实时预估吗?
业务答案:不需要实时训练,但需要实时推理
不用每秒重新训练模型参数
但用户行为在变(刚点了口红广告),必须实时刷新兴趣向量,否则推荐还是旧偏好,效果崩。
模型几天 / 一周更一次就行;用户兴趣向量跟着用户行为实时变。
三、最关键:「主目标、0/1 标签、Target Item 从哪来」
用户兴趣建模不是凭空学向量,向量是靠一个监督任务 “带出来” 的。
1. 训练时的样本长这样
一条训练样本结构:
输入行为序列(历史已交互物品):Item1, Item2, Item3 ... ItemN
Target Item(目标物品):用户下一次真实点击 / 转化的那个广告 / 商品
标签:0/11 = 真的点了这个 Target Item0 = 没点
2. Target Item 来自哪里?
来自日志回溯,拿用户行为做序列拆分举个真实拆分逻辑:以某个用户一整天行为:
浏览 A → 点击 B → 浏览 C → 点击 D(真实下一次交互)
构造训练样本:
历史行为序列输入:[A, B, C]
Target Item = D
标签 = 1(真实点击了)
再负样本构造:随机抽一个用户没点过的广告 E
历史序列:[A,B,C]
Target Item = E
标签 = 0(没点)
3. 模型训练目标是什么?
模型输入:历史行为序列要预测:当前候选 Target Item 会不会被用户点击(0/1 二分类)
训练完之后:把模型最后一层隐藏层向量,拿出来当「用户兴趣 Embedding」👉 这就是你疑惑的:明明输出向量,为啥还有 0/1 标签?
0/1 是训练任务的监督信号,用来把模型训收敛
训好后不用这个分类结果,只扒中间的向量当用户兴趣表征
四、极简流程
离线拿用户行为日志,做序列拆分
构造:历史行为序列 + 正样本 Target (点过) + 负样本 Target (没点过) + 0/1 标签
离线训练 DIN/DIEN,做二分类任务
训练收敛后,抛弃分类头,取模型中间层作为用户兴趣向量
离线批量全量用户生成向量入库,或在线实时推理更新
给到召回、CTR、oCPX 用
2. 召回/ctr 模型训练任务,如何使用这个向量?
用户兴趣建模训出来的用户 Embedding 向量,不单独干活,是喂给「召回」和「CTR 精排」当特征用的,两套模块用法完全不一样。
一、先统一:用户兴趣向量是什么
假设模型(DIN/DIEN)产出:User_Emb ∈ R¹²⁸128 维稠密向量,每一维隐含用户对美妆、3C、低价、高端、短视频素材等隐性偏好。
二、广告召回 怎么用用户兴趣向量?
1. 召回核心逻辑
召回做的是:从千万广告库里,快速挑出几百个和用户兴趣最匹配的广告。
2. 具体用法(向量相似度召回)
离线阶段给每一个广告,提前训好Ad_Emb 广告向量</