跳转至

三十五:长上下文窗口分割自测题答案

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484445&idx=1&sn=2ea4ac3ac5a56f8815d58091470f5576&chksm=f01eb764c7693e7287def7856569512cdb8d268813f46c41913f856e7eee3f44807034f9f03e#rd

参考资料

  • PCW paper:https://arxiv.org/abs/2212.10947

  • NBCE 讲解:https://spaces.ac.cn/archives/9617

  • StreamingLLM paper:https://arxiv.org/abs/2309.17453

一、基础概念

1. 上下文窗口分割解决的是什么问题?

答案: 它解决模型原生上下文窗口有限的问题。长输入被拆成多个窗口,通过并行处理、滑动处理、概率融合或流式缓存,使每次模型看到的长度仍在可处理范围内。

2. 它和 RoPE scaling 的区别是什么?

答案: RoPE scaling 改的是位置编码,让模型更适合更长 position;窗口分割改的是输入组织和推理策略,把长文本拆开处理。二者可以组合,并不是同一层技术。

3. 固定 chunking、滑动窗口、并行窗口、流式窗口分别是什么?

答案: 固定 chunking 是按长度切块;滑动窗口是带 overlap 地移动窗口;并行窗口是多个窗口同时作为上下文来源;流式窗口是随着输入流增长,只保留部分历史 cache。

4. 上下文窗口分割为什么不能天然解决全局长文档推理?

答案: 因为拆分后窗口之间缺少完整 token-level 交互。模型可能无法同时比较两个远距离窗口中的细节,也不一定能做跨窗口多跳推理。

5. 在真实系统中,窗口分割通常会和哪些技术组合?

答案: 常和 RAG、摘要记忆、提示压缩、RoPE scaling、稀疏 attention、外部记忆和重排序组合使用。

二、PCW

6. PCW 的全称和核心目标是什么?

答案: PCW 是 Parallel Context Windows。目标是在不重新训练模型的情况下,通过多个并行上下文窗口扩展 in-context learning 可用上下文。

7. PCW 如何让有限上下文模型利用多个窗口?

答案: 它把长上下文拆成多个窗口,每个窗口长度在模型原生限制内,窗口间通过 attention mask 限制交互,最后的 query 或生成位置可以 attend 到多个窗口,从而聚合信息。

8. PCW 中 position id 为什么可能会重置或复用?

答案: 因为每个窗口都要落在模型熟悉的位置范围内。复用或重置 position id 可以避免直接使用远超训练长度的位置。

9. PCW 中 attention mask 的作用是什么?

答案: Attention mask 用来阻止不同上下文窗口之间不必要的相互 attention,同时允许聚合 query 访问多个窗口。它决定信息流路径。

10. PCW 适合什么类型的任务?

答案: 适合多个示例、多个相对独立证据块、few-shot in-context learning 等任务。窗口之间弱交互时效果更好。

11. PCW 不适合什么类型的任务?

答案: 不适合需要严格跨窗口逐步推理、全局排序、跨段长链依赖、从多个窗口组合细粒度事实的任务。

12. PCW 和普通 sliding window 有什么区别?

答案: Sliding window 是按时间或文本位置顺序移动单个窗口;PCW 是多个窗口并行存在,并通过 query 聚合。PCW 更像并行证据块,sliding window 更像局部扫描。

三、NBCE

13. NBCE 的核心思想是什么?

答案: NBCE 把长上下文拆成多个窗口,分别计算每个窗口下对下一 token 的预测分布,再用朴素贝叶斯假设融合这些分布。

14. 请写出 NBCE 的 log 概率融合直觉公式。

答案: 直觉公式:

log P(y | C_1...C_n)
  ≈ Σ_i log P(y | C_i) - (n - 1) log P(y)

15. NBCE 中为什么要减去先验项 log P(y)?

答案: 因为每个 P(y | C_i) 都包含语言模型对 token y 的先验偏好。直接相加会重复计算常见 token 的先验,因此需要减去重复的先验项。

16. NBCE 的条件独立假设意味着什么?

答案: 它假设多个上下文窗口在给定目标 token 的情况下近似条件独立。这个假设简化了融合,但对强相关窗口或跨窗口推理并不严格成立。

17. NBCE 的优点是什么?

答案: 优点是不改模型结构,可并行计算多个窗口,能从概率层面合并多个上下文来源,对某些长上下文生成有帮助。

18. NBCE 的局限是什么?

答案: 局限是条件独立假设强、计算成本随窗口数增加、窗口之间没有真正交互,对复杂跨窗口推理和事实组合能力有限。

19. NBCE 和 PCW 的主要区别是什么?

答案: PCW 在一次模型结构化输入中让 query attend 到多个窗口;NBCE 是多次运行模型后融合输出概率。前者依赖 attention mask 和 position 设计,后者依赖概率融合。

四、StreamingLLM

20. StreamingLLM 想解决什么推理问题?

答案: 它解决 LLM 在无限或超长输入流中持续推理的问题,目标是在固定 KV cache 大小下保持生成稳定。

21. 为什么普通 KV cache 不适合无限长输入流?

答案: 标准 KV cache 会保存所有历史 token 的 K/V,内存和 attention 计算随序列长度增长。无限输入流下不可持续。

22. 为什么简单 sliding window cache 会让模型退化?

答案: 因为模型在训练和推理中会依赖序列开头的若干 token 作为 attention sink。简单 sliding window 丢掉开头 token 后,attention 分布突变,模型可能退化。

23. 什么是 attention sink?

答案: Attention sink 是指开头少量 token 会稳定吸收一部分 attention 概率质量,即使它们语义上不重要,也像注意力锚点一样维持模型内部稳定。

24. 为什么开头 token 即使语义不重要,也可能必须保留?

答案: 因为某些 attention heads 需要把概率质量分配给稳定位置,开头 token 在训练中总是存在,容易成为这种稳定位置。丢掉后模型内部统计分布改变。

25. StreamingLLM 的 cache 由哪两部分组成?

答案: 由两部分组成:序列最开头的少量 sink tokens,以及最近的 W 个 tokens。中间历史可以被丢弃。

26. StreamingLLM 如何把 KV cache 控制在固定大小?

答案: 当新 token 到来时,保留 sink cache 不动;recent cache 滚动更新,只保留最近窗口;丢弃超过窗口的中间 K/V。总 cache 大小约为 sink_len + window_len

27. StreamingLLM 能否回答被丢弃中间历史中的细节?为什么?

答案: 不能。被丢弃的中间 token 不在 KV cache 中,新 token 无法 attend 到它们。StreamingLLM 保证流式稳定,不提供任意历史记忆。

28. StreamingLLM 适合哪些场景?

答案: 适合长时间聊天、连续文本生成、日志流处理、语音转写后续生成、只依赖近期上下文的流式应用。

29. StreamingLLM 不适合哪些场景?

答案: 不适合长文档问答、需要引用很早历史细节的对话、跨文档全局推理、法律/论文全文精读等任务。

30. StreamingLLM 与 RoPE scaling 是替代关系还是互补关系?

答案: 是互补关系。RoPE scaling 处理长 position 泛化;StreamingLLM 处理 cache 保留策略和 attention sink。长流式系统可以同时使用二者。

五、工程与排错

31. 实现流式窗口时,position_ids 应该注意什么?

答案: position_ids 应与缓存策略一致。即使丢弃中间 cache,生成位置通常仍继续递增;不能把 recent window 简单全部重置为从 0 开始,除非模型和 mask 策略专门支持。

32. 如果模型在长时间生成后突然质量崩掉,你会如何从 cache 策略排查?

答案: 检查 sink tokens 是否被保留;recent window 是否过小;KV cache eviction 是否错删;position_ids 是否跳变;attention mask 是否和 cache 对齐;是否发生服务层截断或 batch cache 混淆。

33. 如果只保留最近窗口,模型输出重复或乱码,可能是什么原因?

答案: 可能是丢掉了 attention sink,导致 attention 分布失稳。也可能是窗口太小、position_ids 错误、mask 错误或 cache 中 K/V 顺序错乱。

34. 如何评估 StreamingLLM 是否有效?

答案: 评估长时间流式生成的 perplexity、重复率、困惑度随长度曲线、生成质量、内存占用、吞吐、不同 sink_len/window_len 配置,以及是否能稳定运行远超训练窗口的 token 数。

35. 请用一段面试表达完整解释 StreamingLLM。

答案: 示例表达:

StreamingLLM 关注无限长输入流中的推理。普通 KV cache 会随历史长度增长,简单滑窗只保留最近 token 又会让模型退化。论文发现开头少量 token 会成为 attention sink,即稳定吸收注意力的锚点。因此 StreamingLLM 的缓存策略是保留开头的 sink tokens 和最近窗口 tokens,丢弃中间历史。这样 cache 大小固定,流式生成稳定。但它不能访问被丢弃的中间内容,所以不是完整长记忆方案。

36. 请画出 PCW、NBCE、StreamingLLM 三者的计算流程差异。

答案: 流程差异:

PCW:
  split context -> parallel windows with masks -> shared query attends to windows -> output

NBCE:
  split context -> run model on each window -> get log P(y|C_i) -> Bayes-style logit fusion -> output

StreamingLLM:
  input stream -> keep sink KV + recent KV -> discard middle KV -> generate next token
            预览时标签不可点




































<div class="