真实面经题目 · 原创解析

推荐系统中如何把 Transformer 行为序列表征接入 DIN 式目标兴趣建模?

这道题考察的是推荐序列建模和目标兴趣抽取的组合设计。高质量回答要说明:Transformer 适合把用户历史行为编码成带上下文的序列表征,DIN 的价值在于针对当前候选物品做 target-aware attention;工程上不能只拿一个全局向量,要处理时间因果、候选量、缓存、延迟和线上线下一致。

出现于:美团 · 算法

60 秒回答模板

我会把它理解成 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 编码上下文
难度 真实面经题
回答目标 讲清 Transformer 序列编码和 DIN 目标兴趣建模的分工,并能落到训练样本、在线服务、延迟控制和效果验证。

深入解析

01

先分清两类能力

Transformer 负责建模行为之间的上下文关系,例如前后点击、短期 session、类目迁移和长短期偏好;DIN 负责让当前候选物品去历史行为里找相关兴趣。同一个用户对酒店、外卖、电影票的相关历史不同,所以 DIN 的目标相关 attention 不能被一个固定用户向量替代。

02

构造行为序列输入

序列通常包含 item id、类目、品牌、价格段、行为类型、时间间隔、位置编码和场景信息。行为要按事件时间排序,并在样本曝光时刻截断。最近 N 个行为、强行为加权、session 边界和时间衰减都会影响模型学到的是短期兴趣还是长期偏好。

03

Transformer 输出不要压扁

更适合 DIN 的接法是保留每个位置的 h_i,而不是只取 CLS 或 mean pooling。CLS 是全局兴趣摘要,能做用户向量,但 DIN 需要候选相关的局部兴趣:候选 q 不同,历史行为权重也应该不同。

04

目标兴趣抽取

以候选 item/ad embedding 作为 query,与每个历史行为向量做交互,经过小 MLP 输出 attention score,再 softmax 或 sigmoid 归一化得到权重。加权兴趣向量与用户画像、候选特征、上下文特征和统计特征拼接,进入排序模型。

05

训练与部署取舍

端到端训练效果潜力更高,但候选多、序列长时成本很高。工程上可以离线或近线更新用户序列表征,线上只做轻量 target attention;也可以在粗排阶段缩小候选,再对少量候选跑重模型。缓存、序列截断、蒸馏和批量化都是常见优化。

06

验证要分桶

只看整体 AUC 不够。要按新老用户、长短序列、不同业务场景、不同候选来源和实时行为缺失情况分桶评估,并对 DIN-only、Transformer-only、Transformer+CLS、Transformer+target attention 做消融。

易错点

  • 把 Transformer 和 DIN 说成二选一,忽略前者做序列编码、后者做目标兴趣抽取的互补关系。
  • 只拿 CLS 或平均池化向量,导致不同候选共享同一兴趣表示。
  • 训练样本使用预测时刻之后的行为或统计特征,造成时间穿越。
  • 没有处理 padding mask、序列长度和时间间隔,模型学到无效位置模式。
  • 忽略线上候选规模和 P95/P99 延迟,提出无法服务的重模型方案。

面试官追问

为什么不能只用 Transformer 的 CLS 向量?

CLS 或 pooling 表达的是全局兴趣,适合做用户摘要,但 DIN 的目标是根据候选物品动态选择相关历史。候选变化时,相关行为也应变化,所以更稳的做法是保留每个位置的 h_i,再做 target-aware attention。

候选量很大时如何降低计算成本?

可以先用召回和粗排缩小候选,再对 TopN 做 target attention;用户序列表征可离线或近线缓存;序列长度可按时间和行为强度截断;重模型可蒸馏成轻模型。核心是在效果、延迟和特征新鲜度之间取舍。

如何避免未来信息泄漏?

训练样本要按曝光时间 point-in-time join 历史行为和画像统计,所有窗口特征只能看过去。可以用日志回放和特征时间戳校验同一请求在离线、线上得到的序列是否一致。

attention 权重能直接当解释吗?

可以作为弱解释线索,但不能完全等同因果贡献。曝光偏差、热门 item、特征共线性都可能影响权重。更可靠的验证是做行为遮挡、通道消融和分桶效果分析。