第 274 题:实现DIN的注意力机制,Mask与变长序列处理。
题目
实现DIN的注意力机制,Mask与变长序列处理。
完整讲解
一、DIN 的注意力机制
- DIN(Deep Interest Network):用户历史行为序列与候选 item 做注意力,得到与候选相关的兴趣表示。设用户行为序列 embedding 为 ${e_1,\ldots,e_T}$,候选 embedding 为 $e_a$,则 attention 权重 $w_t = \text{softmax}(f(e_t, e_a))$(如 $f$ 为 MLP 或内积),加权和 $v_u = \sum_t w_t e_t$ 作为用户表示,再与 $e_a$ 等拼接进 MLP 预测点击率。
二、Mask 与变长序列处理
- 变长:用户行为长度不一,需变长序列输入。做法:按 batch 内最大长度 padding(如补 0),同时维护 mask(0 表示 padding 位置,1 表示真实行为)。
- Mask 在 attention 中:计算 attention 权重后,对 padding 位置置为 $-\infty$ 再 softmax,则这些位置权重为 0,不参与加权和;等价于「只对有效位置做 attention」。实现上为
scores.masked_fill(mask == 0, -1e9) 再 softmax。
- 其他用法:序列建模(如 LSTM/Transformer)中,mask 可防止看到未来(因果 mask)或忽略 padding;DIN 中主要用 mask 屏蔽 padding,保证变长序列下 attention 只作用在有效行为上。
三、实现要点
- 输入:行为 id 序列 → embedding → 与候选算 attention 权重 → mask 掉 padding → 加权和 → 与候选等 concat → MLP。Batch 内变长用 mask 统一处理,避免无效位置参与计算与梯度。
面试要点
- 能说清 DIN 的 attention:历史行为与候选算权重、加权和得到用户兴趣向量;能写出 attention 权重与加权和公式。
- 能说明变长序列的 padding + mask,以及 mask 在 attention 中的用法(padding 位置置 $-\infty$ 再 softmax)。
记忆要点
- DIN:行为序列与候选做 attention,加权和为用户表示;mask 屏蔽 padding 处理变长。
- 实现:padding + mask;attention 前 scores 对 mask=0 置 -inf,再 softmax。