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 预测可以写成一个二分类问题:
训练目标是对数损失:
其中 是各种稀疏离散特征拼出来的样本向量,常规做法是做 embedding:
然后拼接进深度网络。问题在于,现代短视频/内容平台的用户行为极长,一个重度用户半年可以有上万次观看记录。你如果只看 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):
- GSU(General Search Unit):从超长序列里快速粗筛,选出一小部分“可能相关”的行为。
- 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 的解决方式是三件事叠加:
- 行为特征拆分:把“可缓存的固有特征”与“不可缓存的交叉特征”拆开。
- 交叉特征压缩为 bias:让 attention 中昂贵的 cross projection 变成廉价的偏置项。
- 系统级预计算与缓存:把最重的线性投影离线化。
核心逻辑:让 TA 的“相关性度量”保持一致,但把它的计算负担从复杂矩阵运算变成“可缓存 + 轻量在线”的流程。
4. 行为特征拆分与简化注意力:公式与直觉
4.1 行为特征拆分:什么能缓存,什么不能缓存
论文把行为特征矩阵 拆成两部分(Eq.4):
- :行为 item 的固有特征(video id、作者、话题、时长等)
- :用户-物品交叉特征(点击时间、观看时长、点击页面位置、用户与视频交互信息)
直观理解:
- 固有特征是“视频自己带的属性”,不依赖用户,可以缓存。
- 交叉特征是“用户看这个视频的方式”,用户不同就不同,不可缓存。
4.2 交叉特征压缩为 bias
如果你对 做完整线性投影,计算量很大。论文提出一种“简化线性投影”的方式(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 加到注意力分数里。换句话说,交叉特征不再进入复杂矩阵乘法,而是变成“可解释的加性偏置”。
这一点背后其实是工程直觉:
- 固有特征 是可缓存的。同一个视频的 id、作者、时长等对所有用户一致,线性投影 可以离线算好,通过 lookup 聚合,时间复杂度近似 。
- 交叉特征 是不可缓存的。因为交互只发生一次,同一用户几乎不会重复观看同一视频,预计算没有复用价值。
因此,TWIN 不是“随意压缩交叉特征”,而是把“不可缓存的部分”压成 bias,以保证一致性但避免算力爆炸。
4.3 统一的相关性度量:Attention 分数
TWIN 的相关性分数计算公式是(Eq.6):
- 是目标 item 的固有特征(query)
- 第一项是“固有特征的注意力相关性”
- 第二项是“交叉特征压缩后的偏置项”
注意:这里的 是可学习参数,用来控制各类交叉特征的重要性。这一步保留了交叉特征对相关性的影响,但避免了重计算。
4.4 注意力聚合
Attention 的输出是(Eq.7):
这一步在 ESU 中只对 100 条行为执行,所以开销可控。
4.5 多头注意力(MHTA)
TWIN 使用 4 个 head(Eq.8):
直观理解:不同 head 可以捕捉不同“兴趣子空间”。例如同一个用户在“旅行”和“美食”上都有偏好,多头可以分别关注不同模式。
4.6 目标注意力的直觉:把“相关性度量”显式化
在 DIN 系列模型里,Target Attention 的意义其实很朴素:给每条历史行为打一个“与目标 item 的相关性分数”。这个分数就是 。
在两阶段模型里,如果 GSU 用的是别的度量,那么“粗筛”的标准和“精排”的标准天然就会冲突。TWIN 选择直接把 当作 CP-GSU 的检索分数,相当于把“精排标准”提前到“粗筛阶段”。
交叉特征 bias 的作用也可以从直觉上理解:两条行为在内容上可能很接近(例如都是摄影视频),但用户的观看时长、停留位置不同,说明“这条行为对用户兴趣的贡献程度不同”。bias 就是对这些细微差异的补偿。
5. CP-GSU 与 ESU 的协作流程(TWIN 的“核心算法”)
把前面的公式放进两阶段流程,可以得到一个完整的工作链路:
- CP-GSU:对 级别的超长行为序列计算 ,选出 top-100 行为。
- ESU:在 top-100 上用相同注意力机制做精细加权聚合。
- 端到端训练: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 离线预计算与缓存
论文的部署系统包含两个关键组件:
-
inherent feature projector:
- 离线计算
- 覆盖约 80 亿候选视频池
- 每 15 分钟刷新一次
-
embedding server:
- 存储上述投影结果(key-value)
- 通过裁剪长尾视频,8B keys 覆盖 97% 在线请求
这套离线系统本质上是“特征投影的缓存服务”:线上只要给出视频 id,就能得到所有 head 的 ,避免重复计算。同一套缓存被 CP-GSU 与 ESU 共享,既保证一致性,又减少算力浪费。
7.2 在线推理流程
- 在线收到请求后,从 embedding server 拿到预计算的
- 实时计算交叉特征项
- 计算 ,选 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 没有“颠覆式新注意力”。它的核心贡献其实是三个“工程-算法一体”的思路:
- 一致性原则:两阶段模型要用同一套相关性度量,否则 ESU 无法挽救 GSU 的错误。
- 特征分层:把“可缓存的固有特征”与“不可缓存的交叉特征”拆开处理。
- 系统协同:算法设计必须与缓存、预计算、参数同步等系统机制同步设计。
这三点组合在一起,才让“高质量注意力”真正落地到超长序列上。
论文还特别区分了 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 模型本身,更在于它提供了一个“算法-工程协同”的可复用范式:
- 先找出系统里“关键的瓶颈算子”
- 再从特征组织与计算流程上重构它
- 最终让算法与系统协同落地
这也是工业级推荐系统真正能持续迭代、持续收益的关键。