真实面经题目 · 原创解析
推荐系统中如何把 Transformer 行为序列表征接入 DIN 式目标兴趣建模?
这道题考察的是推荐序列建模和目标兴趣抽取的组合设计。高质量回答要说明:Transformer 适合把用户历史行为编码成带上下文的序列表征,DIN 的价值在于针对当前候选物品做 target-aware attention;工程上不能只拿一个全局向量,要处理时间因果、候选量、缓存、延迟和线上线下一致。
真实面经题目 · 原创解析
这道题考察的是推荐序列建模和目标兴趣抽取的组合设计。高质量回答要说明:Transformer 适合把用户历史行为编码成带上下文的序列表征,DIN 的价值在于针对当前候选物品做 target-aware attention;工程上不能只拿一个全局向量,要处理时间因果、候选量、缓存、延迟和线上线下一致。
我会把它理解成 Transformer 做行为序列编码,DIN 做目标相关兴趣抽取。先把用户历史行为按时间组成序列,输入 item、类目、行为类型、时间间隔和位置等特征;Transformer 输出每个历史行为的上下文向量 h_i。然后以当前候选 item 的向量 q 作为 query,对所有 h_i 做 DIN 式 attention,常见交互特征是 [h_i, q, h_i * q, h_i - q],得到权重 alpha_i,再把 sum(alpha_i * h_i) 和候选、用户画像、上下文特征一起送进 CTR/CVR 排序模型。关键是保留每个行为位置的向量,而不是只取 CLS;训练必须按曝光时刻截断历史,线上要通过截断、缓存、蒸馏或两阶段排序控制延迟。
Transformer 负责建模行为之间的上下文关系,例如前后点击、短期 session、类目迁移和长短期偏好;DIN 负责让当前候选物品去历史行为里找相关兴趣。同一个用户对酒店、外卖、电影票的相关历史不同,所以 DIN 的目标相关 attention 不能被一个固定用户向量替代。
序列通常包含 item id、类目、品牌、价格段、行为类型、时间间隔、位置编码和场景信息。行为要按事件时间排序,并在样本曝光时刻截断。最近 N 个行为、强行为加权、session 边界和时间衰减都会影响模型学到的是短期兴趣还是长期偏好。
更适合 DIN 的接法是保留每个位置的 h_i,而不是只取 CLS 或 mean pooling。CLS 是全局兴趣摘要,能做用户向量,但 DIN 需要候选相关的局部兴趣:候选 q 不同,历史行为权重也应该不同。
以候选 item/ad embedding 作为 query,与每个历史行为向量做交互,经过小 MLP 输出 attention score,再 softmax 或 sigmoid 归一化得到权重。加权兴趣向量与用户画像、候选特征、上下文特征和统计特征拼接,进入排序模型。
端到端训练效果潜力更高,但候选多、序列长时成本很高。工程上可以离线或近线更新用户序列表征,线上只做轻量 target attention;也可以在粗排阶段缩小候选,再对少量候选跑重模型。缓存、序列截断、蒸馏和批量化都是常见优化。
只看整体 AUC 不够。要按新老用户、长短序列、不同业务场景、不同候选来源和实时行为缺失情况分桶评估,并对 DIN-only、Transformer-only、Transformer+CLS、Transformer+target attention 做消融。
CLS 或 pooling 表达的是全局兴趣,适合做用户摘要,但 DIN 的目标是根据候选物品动态选择相关历史。候选变化时,相关行为也应变化,所以更稳的做法是保留每个位置的 h_i,再做 target-aware attention。
可以先用召回和粗排缩小候选,再对 TopN 做 target attention;用户序列表征可离线或近线缓存;序列长度可按时间和行为强度截断;重模型可蒸馏成轻模型。核心是在效果、延迟和特征新鲜度之间取舍。
训练样本要按曝光时间 point-in-time join 历史行为和画像统计,所有窗口特征只能看过去。可以用日志回放和特征时间戳校验同一请求在离线、线上得到的序列是否一致。
可以作为弱解释线索,但不能完全等同因果贡献。曝光偏差、热门 item、特征共线性都可能影响权重。更可靠的验证是做行为遮挡、通道消融和分桶效果分析。