[CIKM'20] SIM: Search-based User Interest Modeling with Lifelong Sequential Behavior Data 论文精读

长序列用户兴趣建模有两条路线:

  • 记忆网络 (MIMN): 把所有历史行为增量地压进一个固定大小的 memory matrix, 长度可达 1000, 但与 target 解耦, 丢失了 target-aware 的精准性, 序列再长就被噪声淹没.
  • 目标感知检索 (DIN/DIEN): 针对当前候选 item 做 attention 检索, 精准但计算/存储开销与序列长度线性相关, 只能吃几百长度的短序列.

本文 SIM 用 两级级联检索 把两条路线的优点合在一起: 先用廉价的 GSU 从上万条行为里粗筛出几百条相关行为, 再用昂贵的 ESU 做精准的 target-aware attention. 长度上限从 MIMN 的 1000 推到 54000 (54x).

#摘要

丰富的用户行为数据对 CTR 预估极有价值, 尤其在推荐和广告等工业场景. 阿里此前的 SOTA 是基于记忆网络的 MIMN, 它通过 “学习算法 + 服务系统” 协同设计, 第一次把可建模的行为序列长度扩展到 1000. 但当序列再长 10 倍以上时, MIMN 无法在给定候选 item 时精准刻画用户兴趣 —— 把所有历史行为编码进固定大小的 memory matrix 会引入大量噪声.

本文提出 Search-based Interest Model (SIM), 用两个级联的检索单元来抽取用户兴趣:

  • General Search Unit (GSU): 以候选 item 作为 query, 从原始的、任意长的行为序列中做一次 “通用检索”, 得到一个与候选 item 相关的 Sub user Behavior Sequence (SBS).
  • Exact Search Unit (ESU): 对 SBS 与候选 item 之间的精确关系进行建模.

这种级联检索范式让 SIM 在可扩展性精准度上都能更好地建模终身行为序列. 自 2019 年起, SIM 部署于阿里展示广告系统, 带来 CTR +7.1%、RPM +4.4% 的提升, 目前承载主要流量, 可建模的最大行为序列长度达到 54000, 把 SOTA 推到 54x.

#1. 引言与动机

用户兴趣建模的核心难点在于: 行为序列越长越有价值, 但工业系统的延迟和存储扛不住.

  • 淘宝有 23% 的用户在过去 5 个月内点击过 1000+ 个商品, 长期行为信息价值巨大.
  • 但大多数方法只能建模数百长度的序列, 受限于在线系统的计算与存储.

两条已有路线各有硬伤:

  1. 记忆网络 (MIMN). 把多样兴趣增量地嵌入一个固定大小的 memory matrix, 每来一个新行为就更新一次. 好处是用户建模与 CTR 预估解耦, 在线延迟和存储只取决于 memory 大小. 坏处是: 序列长到 10000+ 时, 把所有行为压进固定大小的 memory 会引入海量噪声; 而且 memory 抛弃了 target item 信息, 而 target-aware 已被证明对兴趣建模很重要.

  2. 目标感知 attention (DIN/DIEN). DIN 指出用户兴趣是多样的, 面对不同候选 item 应当 “检索” 出有效信息来刻画特定兴趣, 从而避免把所有兴趣塞进固定大小参数. 但 DIN 的检索公式在长序列上计算与存储开销不可接受.

那么, 能否套用类似的检索思路, 设计一种更高效的方式从长行为序列中抽取知识?

这就是 SIM 的出发点: 用一个廉价的检索先把序列砍短, 再用昂贵的 attention 做精准建模.

主要贡献:

  • 提出 SIM 范式, 用级联两级检索机制, 在可扩展性与精准度上同时改善终身行为序列建模.
  • 给出工业落地经验, 2019 年起部署于阿里展示广告, CTR +7.1%、RPM +4.4%, 承载主流量.
  • 把长行为序列建模的最大长度推到 54000, 比 MIMN 大 54x.

#2. 相关工作

  • 用户兴趣模型: DIN 用 attention 捕捉用户对不同 target item 的多样兴趣; DIEN 用带辅助 loss 的 GRU 兴趣抽取层刻画兴趣的时间漂移; MIND 用胶囊网络 + 动态路由把用户表示成多个向量; 还有用 Transformer 建模 session 内/间兴趣的工作.
  • 长期兴趣建模: 长期序列能显著提升 CTR, 但极大增加在线延迟/存储, 且对 point-wise 预估引入大量噪声. MIMN 用固定大小 memory + UIC 模块增量记录行为, 解决了存储与延迟, 但丢弃了 target item 信息.

#3. SIM 模型

SIM 架构

图 1. SIM 遵循两级检索策略, 由两个单元组成: (i) GSU 从上万条行为里检索出最相关的 K 条; (ii) ESU 用 multi-head attention 捕捉多样兴趣, 之后接传统的 Embedding & MLP. 本文给出 hard-search 与 soft-search 两种 GSU 实现. soft-search 时 GSU 与 ESU 共享 embedding 参数, 同时训练, Top-K 基于最新参数生成.

#3.1 整体流程

SIM 是一个级联的两阶段检索:

  • 第一阶段 (GSU): 以亚线性时间复杂度从原始长序列中检索出 Top-K 最相关的子序列, K 远小于原始长度. 目标是在严格的时延/算力约束下, 把上万长度砍到几百, 同时滤掉大部分噪声.
  • 第二阶段 (ESU): 以筛出的子序列为输入, 用复杂的 attention 模型 (DIN/DIEN 风格) 精准刻画兴趣 —— 此时长度已降到几百, 算得起.

注意: 两个阶段是联合训练的.

#3.2 General Search Unit (GSU)

给定行为列表B=[b1;b2;;bT]B = [b_1; b_2; \cdots; b_T], GSU 为每个行为bib_i 计算一个相关分rir_i, 取 Top-K 作为子序列BB^*. hard-search 与 soft-search 的区别只在rir_i 的算法:

ri={Sign(Ci=Ca)hard-search(Wbei)(Waea)soft-searchr_i = \begin{cases} \text{Sign}(C_i = C_a) & hard\text{-}search \\[4pt] (W_b \mathbf{e}_i)^{\top} (W_a \mathbf{e}_a) & soft\text{-}search \end{cases}

Hard-search (硬检索): 无参数. 只选与候选 item 同类目的行为聚合成子序列送入 ESU.CaC_aCiC_i 分别是 target item 和第ii 个行为所属类目. 简单粗暴, 但第 4 节会看到它非常适合在线服务.

Soft-search (软检索): 把行为 one-hot 后嵌入为低维向量E=[e1;;eT]E = [\mathbf{e}_1; \cdots; \mathbf{e}_T],ea\mathbf{e}_aei\mathbf{e}_i 为 target 与第ii 个行为的 embedding,WbW_bWaW_a 为权重. 为在上万长度上加速 Top-K, 基于 embedding 用亚线性时间的最大内积检索 MIPS (ALSH) 找 Top-K. 这样上万行为可降到几百.

长短期分布不同: 直接复用短期兴趣模型学到的参数做 soft-search 可能误导长期兴趣建模. 因此 soft-search 的参数在一个独立的、基于长期行为的辅助 CTR 任务下训练 (图 1 左侧 “Soft Search Training”). 行为表示由rir_iei\mathbf{e}_i 加权得到:

Ur=i=1Triei.U_r = \sum_{i=1}^{T} r_i \mathbf{e}_i .

UrU_r 与 target 向量ea\mathbf{e}_a 拼接后送入 MLP. 若行为太长无法整条喂入, 可从长序列中随机采样子序列 (仍服从原分布).

#3.3 Exact Search Unit (ESU)

第一阶段筛出 Top-K 子序列BB^* 后, ESU 用基于 attention 的模型精准建模兴趣. 由于这些行为跨越很长时间, 贡献各异, ESU 引入时间间隔信息: target 与 K 个行为之间的时间间隔D=[Δ1;;ΔK]D = [\Delta_1; \cdots; \Delta_K]. 把BB^*DD 分别编码为E=[e1;;eK]E^* = [\mathbf{e}^*_1; \cdots; \mathbf{e}^*_K]Et=[et1;;etK]E_t = [\mathbf{e}_{t_1}; \cdots; \mathbf{e}_{t_K}], 拼接成最终的行为表示zj=concat(ej,etj)\mathbf{z}_j = \text{concat}(\mathbf{e}^*_j, \mathbf{e}_{t_j}).

用 multi-head attention 捕捉多样兴趣:

attiscore=Softmax(WbizbWaiea)att_i^{score} = \text{Softmax}(W_b^i \mathbf{z}_b \odot W_a^i \mathbf{e}_a)

headi=attiscorezbhead_i = att_i^{score}\, \mathbf{z}_b

其中attiscoreatt_i^{score} 是第ii 个 attention 分,headihead_i 是第ii 个头,WbiW_b^iWaiW_a^i 为权重. 最终长期多样兴趣表示为Ult=concat(head1;;headq)U_{lt} = \text{concat}(head_1; \cdots; head_q), 送入 MLP 做 CTR 预估.

#3.4 联合训练

GSU 与 ESU 在交叉熵下同时训练:

Loss=αLossGSU+βLossESULoss = \alpha\, Loss_{GSU} + \beta\, Loss_{ESU}

  • 若 GSU 用 soft-search, 则α=β=1\alpha = \beta = 1;
  • 若 GSU 用 hard-search (无参数), 则α=0\alpha = 0.

#4. 在线服务的工程实现

#4.1 终身行为数据的服务挑战

工业广告/推荐系统每秒处理海量请求, CTR 模型通常需在 30ms 内响应, 峰值服务 100 万+ 用户/秒. 终身行为带来的存储与延迟会随序列长度线性增长, 是长期兴趣模型上线的最大瓶颈.

#4.2 用 hard-search + 用户行为树落地

SIM 在线服务系统

图 3. 引入 SIM 后的 CTR 预估系统: 新增 hard-search 模块从长序列中检索与 target 相关的行为. 用户行为树的索引离线预先构建, 省掉了在线服务的大部分延迟.

为什么选 hard-search 而非 soft-search? 作者在工业数据上发现:

  • soft-search 的 Top-K 结果与 hard-search 高度相似 —— 大部分 soft 选出的行为本来就属于 target 类目 (电商场景同类目商品大多相似). 统计 100 万样本/10 万用户, hard-search 保留的行为能覆盖 soft-search 的 75%.
  • 离线上 soft 比 hard 只略好 (见表 4), 但 soft 在线需要跑 MIPS 近邻检索, 算力/存储开销大; hard 只需查一张离线建好的两级索引表.

权衡性能与资源后, 线上选了更简单、更系统友好的 hard-search.

用户行为树 (User Behavior Tree, UBT): hard-search 的核心是一个包含全部长序列行为的索引. 行为天然可按类目组织, 于是为每个用户建一棵两级索引树, 采用 Key-Key-Value 结构:

1
user_id  →  category_id  →  [该类目下的具体行为 item ...]

UBT 实现为分布式系统, 规模达 22TB, 支持高吞吐查询. 在线时以 target item 的类目作为 hard-search query, 把上万行为降到几百. 由于 UBT 离线预构建, GSU 的在线响应时间几乎可忽略, 其他用户特征还能并行计算.

#5. 实验

#5.1 数据集

数据集UsersItemsCategoriesInstances最大序列长度
Amazon (Books)75,053358,3671,583150,016100
Taobao7,956,43134,196,6125,5977,956,431500
Industrial (阿里广告)0.29 billion0.6 billion100,00012.2 billion54000

工业数据集中, 长期行为取前 180 天、短期取前 14 天; 超过 30% 的样本序列长度 >10000, 最大达 54000 (54x of MIMN).

#5.2 公开数据集结果

表 2. 公开数据集上的 AUC:

ModelTaobaoAmazon
DIN0.92140.7276
Avg-Pooling Long DIN0.92810.7280
MIMN0.92780.7396
SIM (soft)0.94160.7510
SIM (soft) with Timeinfo0.9501
  • 吃长期行为的模型全面优于只用短期的 DIN, 说明长期行为有用.
  • SIM 显著优于 MIMN: MIMN 把未过滤的全部历史压进固定 memory, 难以刻画多样的长期兴趣; SIM 的两级检索能针对不同 target 检索相关行为.
  • 加入时间 embedding 还能进一步提升.

#5.3 消融: 两级检索的有效性

表 3 (Taobao / Amazon AUC):

操作TaobaoAmazon
Avg-Pooling without Search0.92810.7280
Only First Stage (hard)0.93300.7365
Only First Stage (soft)0.93570.7342
SIM (hard)0.93320.7413
SIM (soft)0.94160.7510
SIM (soft) with Timeinfo0.9501
  • 任何带过滤的策略都远好于直接 avg-pooling —— 证明原始长序列里确实有大量噪声会损害兴趣学习.
  • 两级检索 (加第二阶段 attention) 比只有一级检索更好 —— 精准建模 target-aware 多样兴趣有用, 且过滤后序列已变短, attention 不会压垮在线 RTP.

#5.4 工业数据集与在线 A/B

表 4. 工业数据集 AUC:

ModelAUC
DIEN0.6452
MIMN0.6541
SIM (hard)0.6604
SIM (soft)0.6625
SIM (hard) with timeinfo (已上线)0.6624

soft 比 hard 仅略好, 但需在线 MIPS, 综合效率/性能选 hard. SIM 相比 MIMN 有 +0.008 AUC 的提升, 对业务而言已很显著.

在线 A/B (2020-01-07 ~ 02-07, 对比 MIMN):

指标CTRRPM
提升+7.1%+4.4%

系统性能: MIMN/DIEN 把序列截断到 1000, 而 SIM 可吃到上万. 即便如此, SIM 的服务延迟仍稳定在低位 (约 13~19ms), 而 DIEN 在长序列下最大吞吐只有 200 QPS —— 得益于 UBT 离线索引把 GSU 的在线开销几乎抹平.

#5.5 重新审视检索模型: SIM 真的在建模长期兴趣吗?

作者定义指标dcategoryd_{category} (Days till Last Same Category Behavior): 一次点击样本距离用户上一次同类目行为的天数. 把点击按dcategoryd_{category} 聚合后对比 SIM 与 DIEN 的分布 (图 4) 发现: SIM 显著提升了dcategoryd_{category} 较大 (即对应更久远的长期兴趣) 那部分点击的占比. 这证明 SIM 的收益确实来自更精准的长期兴趣建模, 倾向于推荐与用户长期兴趣相关的 item.

#6. 总结

SIM 用一个朴素但工程友好的思路解决了终身行为序列建模:

  • 级联检索范式: 廉价的 GSU 粗筛 (上万 → 几百) + 昂贵的 ESU 精排, 把 DIN/DIEN 的 target-aware 精准性扩展到终身序列.
  • hard-search + UBT: 用 “user_id → category → items” 的两级离线索引把在线检索延迟降到近乎为零, 是它能在 30ms / 百万 QPS 约束下上线的关键.
  • 时间间隔 embedding: 给跨越长时间的行为补上时序信息, 带来额外提升.

SIM 把可建模长度从 1000 推到 54000, 线上 CTR +7.1%、RPM +4.4%, 至今承载主流量. 它也奠定了后续 “检索式长序列建模” 的范式 —— 如 ETA、SDIM 等端到端方案, 以及 TWIN 进一步指出并解决了 SIM 中 GSU 与 ESU 检索度量不一致的问题.

#参考资料

  • Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click-Through Rate Prediction (arXiv:2006.05639)
  • DIN: Deep Interest Network (KDD’18)
  • DIEN: Deep Interest Evolution Network (AAAI’19)
  • MIMN: Practice on Long Sequential User Behavior Modeling (KDD’19)