第 96 题:长序列召回的切片策略,滑动窗口 vs 分层注意力?
题目
长序列召回的切片策略,滑动窗口 vs 分层注意力?
完整讲解
一、长序列带来的问题
用户行为序列可达数百甚至数千,直接对全序列做 self-attention 的复杂度为 $O(L^2)$,显存与延迟难以承受。因此需要切片/截断策略,在保持表达能力的前提下控制计算量。
二、滑动窗口(Sliding Window)
- 做法:只保留最近 $W$ 个 item(如 $W=50$),或对长序列按固定步长滑动,每次只对窗口内做 attention。复杂度 $O(W^2)$,与全长 $L$ 无关。
- 优点:实现简单、显存与延迟可控;近期行为权重大,符合「近期兴趣」假设。
- 缺点:窗口外信息完全丢失,无法利用长期偏好与周期性模式。
三、分层注意力(Hierarchical / Staged Attention)
- 做法:将序列分成若干段(如每段 $W$),先在各段内做 self-attention 得到段表征,再对段表征做一次 attention 或 RNN 得到全局表征;或「局部 + 全局」两层,局部用窗口、全局用采样/压缩后的序列。
- 优点:兼顾局部细节与全局结构,长期信息通过段摘要保留;复杂度约 $O(L/W \cdot W^2 + (L/W)^2)$,可通过分段数控制。
- 缺点:实现与调参更复杂;段边界可能割裂连续行为。
四、选型建议
- 强近期、弱长期的场景(如会话内推荐)可用滑动窗口。
- 需要长期兴趣、周期性或多阶段兴趣时,优先分层/分段注意力或类似 SIM、MIMN 等长序列结构。
面试要点
- 能说清长序列 $O(L^2)$ 的问题,以及切片策略的目的(控计算、保表达)。
- 能对比滑动窗口(只保留最近 $W$)与分层注意力(分段再聚合)的优缺点。
- 能根据业务需求选型:近期为主用窗口,长期/周期用分层。
记忆要点
- 长序列:滑动窗口 = 最近 $W$,$O(W^2)$,简单但丢长期;分层 = 分段 attention 再聚合,保留长期。
- 滑动窗口适合强近期场景;分层适合长期兴趣、周期性。
- 复杂度:窗口 $O(W^2)$;分层约 $O((L/W)W^2 + (L/W)^2)$。