TWIN 论文解读:快手两阶段兴趣网络如何把长序列行为的“召回-注意力一致性”做到底

论文:TWIN: TWo-stage Interest Network for Lifelong User Behavior Modeling in CTR Prediction at Kuaishou(arXiv:2302.02352)
链接:https://arxiv.org/abs/2302.02352(HTML:https://arxiv.org/html/2302.02352

这是一篇典型的“工业级难题 + 学术解法 + 工程落地”的论文:它要解决的不是“模型结构换一下就好”的小优化,而是如何在长达 10^4-10^5 的超长行为序列上,既保持注意力机制的精确性,又做到可部署、可扩展

一句话版结论:TWIN 的核心不是更花哨的注意力,而是让“两阶段模型”前后保持同一套相关性度量,从而让 GSU 与 ESU 不再“各自为政”,再通过“行为特征拆分 + 交叉特征压缩 + 缓存系统”把这套度量真正跑到工业规模

下面按“背景 → 问题 → 方法与公式 → 工程系统 → 实验 → 启示”讲清楚,尽量通俗,但公式、关键数字和工程细节都保留。

1. 背景:CTR 预测与长序列行为建模到底在难什么?

CTR 预测在推荐系统里是“核心评分器”:它决定曝光的结果是否点击、是否继续观看、是否转化。模型越能抓住用户的真实兴趣,线上收益越显著。

传统 CTR 预测可以写成一个二分类问题:

y^i=σ(f(xi)).\hat{y}_{i}=\sigma(f(\mathbf{x}_{i})).

训练目标是对数损失:

(D)=1Di=1Dyilog(y^i)+(1yi)log(1y^i).\ell(\mathcal{D})=-\frac{1}{|\mathcal{D}|}\sum_{i=1}^{|\mathcal{D}|}y_{i}\log(\hat{y}_{i})+(1-y_{i})\log(1-\hat{y}_{i}).

其中 xi\mathbf{x}_i 是各种稀疏离散特征拼出来的样本向量,常规做法是做 embedding:

xA,emb=EAxA,hot,\mathbf{x}_{\text{A,emb}}=E_{A}\mathbf{x}_{\text{A,hot}},

然后拼接进深度网络。问题在于,现代短视频/内容平台的用户行为极长,一个重度用户半年可以有上万次观看记录。你如果只看 100 条“近期行为”,你就错过了大量“长期兴趣”线索。

现实世界的数据规模是什么?论文给了非常具体的数字(Table 3):

  • 日活用户约 3.455 亿(345.5 million)
  • 日活视频约 4510 万(45.1 million)
  • 日样本量约 462 亿(46.2 billion)
  • 人均每天观看 133.7 次
  • 人均历史行为约 1.45 万(14.5 thousand)
  • 最长行为序列可到 10 万

结论:在这种场景里,长序列行为建模不是“加一个更深的 RNN”能解决的,得系统性地扩展。

2. 两阶段模型的“结构性矛盾”

工业界常用的方案是“两阶段行为建模”(two-stage):

  1. GSU(General Search Unit):从超长序列里快速粗筛,选出一小部分“可能相关”的行为。
  2. ESU(Exact Search Unit):在小集合上用更精细的 Target Attention (TA) 计算注意力并聚合。

这套结构的初衷是“用粗筛省算力,用精排保精度”。但论文指出:真正的问题不是两阶段本身,而是两阶段之间的“相关性度量不一致”。

  • GSU 通常用简单、便宜的度量(类别一致、LSH、哈希碰撞、预训练 embedding 的内积)。
  • ESU 用的是 Target Attention,它其实是一套更强、更细致的相关性计算。

于是你会得到一个很尴尬的现象:GSU 选出来的 top-100,并不是真正的 top-100。 这意味着 ESU 再怎么精细,也是在“错误候选上精排”。

论文的 Figure 1 用一个直观例子展示这种不一致:如果你把 ESU 的相关性定义当作“正确答案”(Oracle),GSU 的 top-100 里只有 40 个真 hit。也就是说,60% 的候选其实是“错的”

这就是 TWIN 要解决的核心矛盾:让 GSU 的相关性度量与 ESU 保持一致

2.1 相关工作:从 DIN 到 SIM/ETA/SDIM

为了理解 TWIN 的位置,先快速回顾一下 CTR 与长序列建模的演进脉络(论文 Related Work 里也做了系统梳理):

  • 浅层 CTR:FM、FFM 主要做显式特征交互,但对复杂语义和行为序列不够敏感。
  • 深度 CTR:Wide&Deep、DeepFM、DCN 等模型让“交互 + 表达”能力大幅提升,成为工业主流。
  • 序列建模:DIN 引入 Target Attention,把“目标 item 与历史行为”的相关性显式建模;DIEN、DSIN 进一步建模行为的时序、会话结构。
  • 长序列两阶段模型:SIM Hard/Soft、ETA、SDIM 等方法都采用 GSU+ESU,但 GSU 的检索方式与 ESU 的注意力度量仍然不同。

因此,TWIN 并不是“忽然出现的新范式”,而是在目标注意力已经被验证有效的基础上,把它真正扩展到“工业级长序列”的一步。

2.2 一个小例子:不一致为何致命?

设想一个用户长期喜欢“摄影器材”,最近因为朋友推荐看了几条“美食短视频”。

  • 如果 GSU 用“同类目匹配”或“哈希近邻”来检索,它可能更偏向近期的美食类行为;
  • 但 ESU 的 Target Attention 更看重“与目标商品的相关性”,比如目标是相机镜头,那么摄影历史才是关键。

结果就是:GSU 给 ESU 递交的候选,本身就不包含最关键的历史行为。注意力机制再强,也只能在“错误集合”里精排。

TWIN 要解决的正是这个根因:让 GSU 的检索标准与 ESU 的注意力标准一致,避免这种“候选集失真”。

3. TWIN 的核心思想:让两阶段成为“孪生体”

TWIN 的名字就是 “TWo-stage Interest Network”。它的核心是 Consistency-Preserved GSU (CP-GSU)

  • CP-GSU 使用和 ESU 完全相同的 Target Attention 度量;
  • 不仅结构一致,参数也一致;
  • 训练上是端到端同步的。

但问题立刻出现:Target Attention 很贵。 ESU 只需要在 100 条行为上算,而 CP-GSU 要在 10^4-10^5 条行为上算。

TWIN 的解决方式是三件事叠加:

  1. 行为特征拆分:把“可缓存的固有特征”与“不可缓存的交叉特征”拆开。
  2. 交叉特征压缩为 bias:让 attention 中昂贵的 cross projection 变成廉价的偏置项。
  3. 系统级预计算与缓存:把最重的线性投影离线化。

核心逻辑:让 TA 的“相关性度量”保持一致,但把它的计算负担从复杂矩阵运算变成“可缓存 + 轻量在线”的流程。

4. 行为特征拆分与简化注意力:公式与直觉

4.1 行为特征拆分:什么能缓存,什么不能缓存

论文把行为特征矩阵 KK 拆成两部分(Eq.4):

K[KhKc]RL×(H+C),K\triangleq\left[\begin{array}{cc}K_{h}&K_{c}\end{array}\right]\in\mathbb{R}^{L\times(H+C)},
  • KhK_h:行为 item 的固有特征(video id、作者、话题、时长等)
  • KcK_c用户-物品交叉特征(点击时间、观看时长、点击页面位置、用户与视频交互信息)

直观理解:

  • 固有特征是“视频自己带的属性”,不依赖用户,可以缓存。
  • 交叉特征是“用户看这个视频的方式”,用户不同就不同,不可缓存。

4.2 交叉特征压缩为 bias

如果你对 KcK_c 做完整线性投影,计算量很大。论文提出一种“简化线性投影”的方式(Eq.5):

K_{c}W^{c}\triangleq\left[\begin{array}[]{ccc}K_{c,1}\mathbf{w}_{1}^{c},&...&,K_{c,J}\mathbf{w}_{J}^{c}\end{array}\right],

意思是:把每个交叉特征维度压缩成一个标量贡献,后面作为 bias 加到注意力分数里。换句话说,交叉特征不再进入复杂矩阵乘法,而是变成“可解释的加性偏置”。

这一点背后其实是工程直觉:

  • 固有特征 KhK_h 是可缓存的。同一个视频的 id、作者、时长等对所有用户一致,线性投影 KhWhK_h W^h 可以离线算好,通过 lookup 聚合,时间复杂度近似 O(L)O(L)
  • 交叉特征 KcK_c 是不可缓存的。因为交互只发生一次,同一用户几乎不会重复观看同一视频,预计算没有复用价值。

因此,TWIN 不是“随意压缩交叉特征”,而是把“不可缓存的部分”压成 bias,以保证一致性但避免算力爆炸。

4.3 统一的相关性度量:Attention 分数

TWIN 的相关性分数计算公式是(Eq.6):

α=(KhWh)(qWq)dk+(KcWc)β,\bm{\alpha}=\frac{(K_{h}W^{h})(\mathbf{q}^{\top}W^{q})^{\top}}{\sqrt{d}_{k}}+(K_{c}W^{c})\bm{\beta},
  • q\mathbf{q} 是目标 item 的固有特征(query)
  • 第一项是“固有特征的注意力相关性”
  • 第二项是“交叉特征压缩后的偏置项”

注意:这里的 β\bm{\beta} 是可学习参数,用来控制各类交叉特征的重要性。这一步保留了交叉特征对相关性的影响,但避免了重计算。

4.4 注意力聚合

Attention 的输出是(Eq.7):

Attention(qWq,KhWh,KcWc,KWv)=Softmax(α)KWv,\text{Attention}(\mathbf{q}^{\top}W^{q},K_{h}W^{h},K_{c}W^{c},KW^{v})=\text{Softmax}(\bm{\alpha})^{\top}KW^{v},

这一步在 ESU 中只对 100 条行为执行,所以开销可控。

4.5 多头注意力(MHTA)

TWIN 使用 4 个 head(Eq.8):

TWIN=Concat(head1,...,head4)Wo,\text{TWIN}=\text{Concat}(\text{head}_{1},...,\text{head}_{4})W^{o}, heada=Attention(qWaq,KhWah,KcWac,KWav),  a{1,...,4},\text{head}_{a}=\text{Attention}(\mathbf{q}^{\top}W_{a}^{q},K_{h}W_{a}^{h},K_{c}W_{a}^{c},KW_{a}^{v}),\;a\in\{1,...,4\},

直观理解:不同 head 可以捕捉不同“兴趣子空间”。例如同一个用户在“旅行”和“美食”上都有偏好,多头可以分别关注不同模式。

4.6 目标注意力的直觉:把“相关性度量”显式化

在 DIN 系列模型里,Target Attention 的意义其实很朴素:给每条历史行为打一个“与目标 item 的相关性分数”。这个分数就是 α\bm{\alpha}

在两阶段模型里,如果 GSU 用的是别的度量,那么“粗筛”的标准和“精排”的标准天然就会冲突。TWIN 选择直接把 α\bm{\alpha} 当作 CP-GSU 的检索分数,相当于把“精排标准”提前到“粗筛阶段”。

交叉特征 bias 的作用也可以从直觉上理解:两条行为在内容上可能很接近(例如都是摄影视频),但用户的观看时长、停留位置不同,说明“这条行为对用户兴趣的贡献程度不同”。bias 就是对这些细微差异的补偿。

5. CP-GSU 与 ESU 的协作流程(TWIN 的“核心算法”)

把前面的公式放进两阶段流程,可以得到一个完整的工作链路:

  1. CP-GSU:对 L=104L=10^4 级别的超长行为序列计算 α\bm{\alpha},选出 top-100 行为。
  2. ESU:在 top-100 上用相同注意力机制做精细加权聚合。
  3. 端到端训练:CP-GSU 与 ESU 共享同一套参数,保持一致性。

还有两个细节很关键:

  • 多头如何凑够 100 条? CP-GSU 用 4 个 head 计算注意力分数时,会在各 head 的排序中“交替取样”,直到收集到 100 条不重复行为,避免某一个 head 独占候选。
  • 参数如何保持同步? ESU 的 100 条行为可以实时计算,参数更新更及时;CP-GSU 由于依赖缓存,会有轻微延迟。论文强调需要在线训练与参数同步机制,才能最大化一致性。

关键点:GSU 与 ESU 使用同一套注意力度量,因此 top-100 真正代表“ESU 认可的 top-100”。

6. 一致性到底提升了多少?(RQ2)

论文专门做了“Consistency Analysis”。结论非常直接:

  • Oracle(用 ESU 的度量去扫描所有 10^4 行为)得到“真实 top-100”。
  • SIM Hard 的 GSU 选出来的 100 里,只有 40 个是真 top-100
  • TWIN 把 hit 数提升到 94,接近理论极限。

理论上 TWIN 可以做到 100% 命中,但实际受限于缓存刷新延迟(15 分钟),所以没有达到满分。

这一点非常关键:TWIN 的收益并不是来自新的注意力公式,而是来自“GSU 与 ESU 的一致性”。

7. 工程落地:如何把 TA 扩展到 10^4-10^5?

光有算法不够,TWIN 的工程系统是这篇论文非常重要的部分。核心思路是“把最贵的部分尽可能离线化”。

7.1 离线预计算与缓存

论文的部署系统包含两个关键组件:

  1. inherent feature projector

    • 离线计算 KhWhK_h W^h
    • 覆盖约 80 亿候选视频池
    • 每 15 分钟刷新一次
  2. embedding server

    • 存储上述投影结果(key-value)
    • 通过裁剪长尾视频,8B keys 覆盖 97% 在线请求

这套离线系统本质上是“特征投影的缓存服务”:线上只要给出视频 id,就能得到所有 head 的 KhWahK_h W_a^h,避免重复计算。同一套缓存被 CP-GSU 与 ESU 共享,既保证一致性,又减少算力浪费。

7.2 在线推理流程

  • 在线收到请求后,从 embedding server 拿到预计算的 KhWhK_h W^h
  • 实时计算交叉特征项 (KcWc)β(K_c W^c)\bm{\beta}
  • 计算 α\bm{\alpha},选 top-100 输入 ESU

这里有一个“工业级细节”很容易被忽略:参数新鲜度。ESU 的计算可以使用最新参数,但 CP-GSU 依赖缓存,会存在刷新延迟。论文强调需要近线训练与参数同步机制,让投影与注意力权重保持一致,才能把一致性收益真正吃满。

效果:线性投影瓶颈减少 99.3%,使 TA 可在 10^4 行为长度上运行。

7.3 工业规模指标

  • 已在快手主推荐流部署
  • 服务 3.46 亿日活用户
  • 峰值请求约 3000 万视频/秒

这部分说明:TWIN 不是一个“理想化学术模型”,而是已在真实大规模系统中运行。

8. 实验设置与结果

8.1 数据集规模

Table 3 的数据规模可以理解为“工业级的上限测试”:

  • Daily Users:345.5M
  • Daily Videos:45.1M
  • Daily Samples:46.2B
  • Average Actions:133.7 / day
  • Average Historical Behaviors:14.5k
  • Max Behaviors:100k

8.2 基线模型

论文比较了多个 SOTA 两阶段模型:

  • Avg-Pooling
  • DIN
  • SIM Hard / SIM Soft
  • ETA(LSH + Hamming Distance)
  • SDIM(多轮 hash collision)
  • SIM Cluster / SIM Cluster+

对两阶段模型统一设置:输入最近 10,000 条行为,输出 top-100 进入 ESU。

8.3 离线结果(RQ1)

Table 4 的关键结果:

  • TWIN AUC:0.7962 ± 0.00008
  • TWIN GAUC:0.7336 ± 0.00011
  • 相比最强 baseline(SIM Soft),AUC +0.29%,GAUC +0.51%

在工业 CTR 任务里,0.05% 都能带来线上收益,所以 0.29%/0.51% 的提升非常显著。

为了更直观,这里摘录几组 AUC/GAUC(Table 4):

  • Avg-Pooling:0.7855 / 0.7168
  • DIN:0.7873 / 0.7191
  • SIM Hard:0.7901 / 0.7224
  • ETA:0.7910 / 0.7243
  • SDIM:0.7919 / 0.7267
  • SIM Soft:0.7939 / 0.7299
  • TWIN:0.7962 / 0.7336

可以看到:GSU 检索越来越精细(类目 → 哈希 → embedding 内积),性能在逐步上升;但 只有当检索与注意力一致时,收益才能真正拉开

另外,论文同时报告 AUC 与 GAUC。GAUC 是按用户分组后的 AUC,能更公平地衡量“用户级排序效果”。在推荐场景里,GAUC 的提升往往意味着“每个用户的体验更一致”,这比单纯整体 AUC 更有业务价值。

8.4 长序列长度的影响(RQ3)

论文把 GSU 输入长度从更短逐步增加,观察表现变化:

  • 所有模型在长度增加时都变好
  • TWIN 的优势随着长度增加而扩大

这意味着:TWIN 更擅长“吃掉极长序列”,并能从长序列里提取额外收益。

更重要的是,序列越长,GSU 与 ESU 的不一致会被“放大”:噪声行为更多、误筛风险更高。TWIN 通过一致性把“长序列”真正变成增益,而不是噪声。对工业系统来说,这类收益往往比“多堆几层网络”更稳健。

8.5 消融实验(RQ4)

几组关键消融:

  • TWIN w/o Para-Cons(结构一致但参数不一致):比 SIM Soft 好,但不如 TWIN
  • TWIN w/o Bias(去掉交叉特征 bias):性能明显下降
  • TWIN w/ Raw MHTA(不简化交叉特征):性能几乎不变,但推理成本更高

结论:

  • 一致性不仅是结构一致,更要参数一致
  • 交叉特征 bias 很关键
  • 简化 MHTA 几乎不损性能,却能显著省算力

8.6 在线 A/B(RQ5)

Table 5 的线上 Watch Time 提升:

  • vs SIM Hard

    • Featured-Video Tab:+4.893%
    • Discovery Tab:+3.712%
    • Slide Tab:+6.249%
  • vs SIM Soft

    • Featured-Video Tab:+2.778%
    • Discovery Tab:+1.374%
    • Slide Tab:+2.705%

论文指出:在快手场景里 0.1% 已是显著收益,因此这些提升非常可观。

9. 这篇论文真正的贡献是什么?

如果只看公式,TWIN 没有“颠覆式新注意力”。它的核心贡献其实是三个“工程-算法一体”的思路:

  1. 一致性原则:两阶段模型要用同一套相关性度量,否则 ESU 无法挽救 GSU 的错误。
  2. 特征分层:把“可缓存的固有特征”与“不可缓存的交叉特征”拆开处理。
  3. 系统协同:算法设计必须与缓存、预计算、参数同步等系统机制同步设计。

这三点组合在一起,才让“高质量注意力”真正落地到超长序列上。

论文还特别区分了 TWIN 与“索引近似类方法”(例如把行为映射到 codebook 再查距离的方案):

  • 索引近似方法往往是近似相关性计算
  • TWIN 仍然使用精确的注意力度量,只是通过 GSU 把候选规模压缩。

这强调了一个立场:一致性带来的收益,不是靠近似,而是靠“同一套度量在不同阶段的可扩展实现”。

10. 可能的局限与启示

10.1 局限

  • 缓存延迟:15 分钟刷新会带来注意力度量的“轻微不一致”。
  • 交叉特征压缩:把交叉特征压成 bias 可能损失部分表达能力(虽然实验表明损失很小)。
  • 依赖强工程系统:如果没有足够的离线基础设施,很难复制这种方案。

10.2 启示

  • 两阶段模型最怕的不是“粗筛不够粗”,而是“粗筛和精排标准不一致”。
  • 大规模系统里的创新往往来自“算法 + 系统协同设计”。
  • 对于推荐系统而言,“一致性”可能比“更复杂的结构”更重要。

如果把推荐系统看作“召回 → 粗排 → 精排”的流水线,那么一致性原则不仅适用于 GSU/ESU,也可以推广到多级召回或多目标排序场景:越早的阶段越要保持“同一目标函数的近似版本”,否则后续再复杂的模型也只能在“错误候选”里打磨。

11. 总结

TWIN 解决的不是“怎么设计一个更酷的 attention”,而是一个更现实的问题:怎么让两阶段模型真正协同工作

它用统一的 Target Attention 作为相关性度量,让 GSU 与 ESU 成为“孪生体”,再通过特征拆分、交叉特征 bias 化、缓存系统,把注意力从 10^2 扩展到 10^4-10^5。

实验与线上结果证明:一致性带来的收益非常真实,而且非常大。

如果你在做大规模推荐系统,这篇论文的价值不仅在于 TWIN 模型本身,更在于它提供了一个“算法-工程协同”的可复用范式:

  • 先找出系统里“关键的瓶颈算子”
  • 再从特征组织与计算流程上重构它
  • 最终让算法与系统协同落地

这也是工业级推荐系统真正能持续迭代、持续收益的关键。