纯数据驱动方案治愈 lost-in-the-middle:用 GPT-4 合成 1.75M 条"答案藏在 4K–32K 上下文任意位置"的 QA 数据做 instruction tuning,得到 FilM-7B——VaL Probing 均分 85.9 超 GPT-4-Turbo (79.0),位置鲁棒性 Gap 仅 13.9 (vs 32.1),不损短上下文能力。
长上下文 LLM(Mistral、LongAlign、InternLM2)虽训练窗口达 32K+,但普遍在中间位置信息提取上失败——即 lost-in-the-middle。根因假设:训练数据自身带有不可见的位置偏置。(1) 自回归预训练的 next-token loss 被近距离 token 主导;(2) SFT 阶段 system message 始终在开头,让模型学到"重要信息在边缘"。现有 Needle-in-the-Haystack 评测在单一前向检索 + 自然语言上下文下给出近满分,严重高估了真实长上下文利用能力。
Information-Intensive (IN2) Training——核心是把"信息位置"作为独立的随机化维度,强制写入训练数据:
核心技术壁垒:将 gold segment position 的均匀分布作为显式监督信号——这不是简单的"长上下文数据",而是从数据构造层面消除位置偏置的根本机制。prior work (LongAlign / Fu et al.) 解决了长度分布平衡,但从未控制过 位置 分布。
VaL Probing 评估方案:3 种上下文风格(document / code / structured-data)× 3 种检索模式(forward / backward / bi-directional),暴露 Needle-in-the-Haystack 隐藏的 U 形缺陷。
| 指标 | FilM-7B | Backbone (Mistral-v0.2) | GPT-4-Turbo | 提升 |
|---|---|---|---|---|
| VaL Probing Avg | 85.9 | 47.3 | 79.0 | +38.6 vs backbone |
| VaL Probing Gap↓ | 13.9 | 56.2 | 32.1 | −42.3 vs backbone |
| LongBench 9-task Avg | 39.9 | 30.6 | 44.7 | +9.3 vs backbone |
| MMLU (short-ctx) | 59.2 | 59.3 | — | −0.1 (maintained) |
| 训练成本 | 300 GPU-day (128×A100) | — | — | — |

Paper's Figure 2, verbatim (caption: "The data construction process for In2 training, aimed at enhancing the fine-grained information awareness (upper), and the integration and reasoning of information (lower).").
上半部分展示从原文 $\mathcal{C}_i$ 中随机切出单个 128-token 段 $s_i$,GPT-4-Turbo 生成 $(q_i, a_i)$,然后 $s_i$ 与随机段 shuffle 后拼成长上下文 $\mathcal{L}_i$;下半部分展示原文切成多段 $[s_i]$,生成多跳 QA 后同样 shuffle 成长上下文。关键在于目标段在 $\mathcal{L}_i$ 中的位置是均匀随机的。

Paper's Figure 3, verbatim (caption: "Three tasks in VaL Probing. The retrieval patterns are determined by the relative positions between the retrieval keywords and the information to be retrieved.").
三列分别展示 document sentence retrieval(需向前向后扩展找完整句)、code function retrieval(需向前找 def 行的函数名)、database entity retrieval(需向后找 label + description)。这个设计直接针对 Needle-in-the-Haystack 的单一"前向 + 自然语言"模式,暴露真实的位置偏置。
IN2 数据生成与训练 pipeline(Mermaid):
本文不含严格数学定理;核心等式是数据构造的形式化定义而非分析证明。
Notation table:
| 符号 | 含义 |
|---|---|
| $\mathbb{D} = \{(\mathcal{L}_i, q_i, a_i)\}$ | IN2 训练数据集 |
| $\mathcal{C}_i$ | 来自 C4 的原始文本 |
| $s_i$ | 128-token 段(最小信息单元) |
| $[r_j]$ | 从 $\mathbb{C}$ 随机采样的 128-token 段(干扰项) |
| $I_f, I_r$ | 细粒度 / 多跳 QA 生成 prompt |
| $\oplus\{\cdot\}$ | 段拼接算子 |
方程物理意义:
Eq.1 (细粒度): $(q_i, a_i) \sim \mathrm{Prompting}(s_i, I_f; \mathrm{LLM}), \quad \mathcal{L}_i = \oplus\{\mathrm{Shuffle}(s_i, [r_j])\}$
物理意义:从单个 128-token 段生成高度 specific 的 QA,然后将该段藏入随机位置的长上下文中。梯度只在模型正确 attend 到目标段并生成正确答案时才有信号。
Eq.2 (多跳): $(q_i, a_i) \sim \mathrm{Prompting}([s_i], I_r; \mathrm{LLM}), \quad \mathcal{L}_i = \oplus\{\mathrm{Shuffle}([s_i], [r_j])\}$
物理意义:多段 QA 要求模型在长上下文中找到散落在不同位置的多个目标段并整合推理,训练多跳 attention path。
6 Minimum checks:
| # | Check | 结果 | ||
|---|---|---|---|---|
| 1 | 方程 well-defined | ✓ — Eq.1/2 的所有变量在 §2.1 中有明确定义 | ||
| 2 | 假设合理性 | ⚠ — 假设 GPT-4 生成的 QA "highly specific to segment",但无 quality control 报告 | ||
| 3 | 量纲/类型一致性 | ✓ — 输入为 token 序列,输出为 (question, answer) 文本对 | ||
| 4 | 边界条件 | ⚠ — 当 $ | \mathcal{L}_i | = 128$ (极短) 时退化为无干扰段 = 短上下文 QA,论文用短 QA 子集处理 |
| 5 | 与实验匹配 | ✓ — 数据配比 (63%/17%/9%/11%) 与实验 setup 一致 | ||
| 6 | 可复现性 | ⚠ — 数据集未开源,需 1.4M GPT-4-Turbo 调用 (~$50K-$100K) |

Paper's Figure 1, verbatim (caption: "Performance of FilM-7B, Mistral-7B-Instruct-v0.2, and GPT4-Turbo on our three probing tasks. FilM-7B significantly overcomes the problem of information loss in the middle of the context.").
三个面板对应 Document / Code / Database 任务。FilM-7B(橙色)在所有位置上近乎水平(~85%),Mistral-v0.2(灰色)呈深 U 形(中间位置塌到 5%–40%),GPT-4-Turbo(蓝色)在 Document 和 Code 上也有明显中间衰减。这是论文的"金句图"——一目了然展示 IN2 彻底拉平了 U 形曲线。
| Model | Doc Avg | Doc Gap↓ | Code Avg | Code Gap↓ | DB Avg | DB Gap↓ | All Avg | All Gap↓ |
|---|---|---|---|---|---|---|---|---|
| Mistral-7B-Instruct-v0.2 | 74.2 | 32.1 | 20.3 | 59.5 | 47.5 | 77.0 | 47.3 | 56.2 |
| LongAlign-7B-64K | 65.3 | 16.9 | 39.3 | 56.0 | 55.0 | 36.2 | 53.2 | 36.4 |
| InternLM2-chat-7B | 68.8 | 18.7 | 50.2 | 44.1 | 61.2 | 57.1 | 60.1 | 40.0 |
| GPT-4-Turbo | 81.3 | 31.7 | 66.1 | 46.5 | 89.6 | 18.0 | 79.0 | 32.1 |
| FilM-7B | 85.4 | 6.1 | 83.3 | 18.7 | 89.0 | 16.8 | 85.9 | 13.9 |
FilM-7B 在 All Avg 上超 GPT-4-Turbo 6.9 分,Gap 从 32.1 压到 13.9——不仅均值更高,方差更小,即"真正的任意位置都能用"。

Paper's Figure 4a, verbatim (caption: "Performance of FilM-7B, Mistral-7B-Instruct-v0.1, and Mistral-7B-Instruct-v0.2.").
Mistral-v0.1 (4K sliding window) 在 Code 和 Database 任务上全程接近 0%——sliding window 直接截断了长距离信息流。v0.2 (无 SW) 呈经典 U 形,FilM-7B 全程平坦。

Paper's Figure 6, verbatim (caption: "Performance of FilM-7B with a 4K sliding window (SW). PT-In2: apply the sliding window in both pre-training and In2 training. In2: apply the sliding window only in In2 training.").
无论是 PT+IN2 还是仅 IN2 阶段加 4K 滑窗,距离超过 4K 的检索精度急剧下降到接近 0。这直接证明 sliding window 与长上下文目标不可调和——即便有 IN2 数据,硬件上截断信息流仍让模型完全失能。
| RoPE base θ | All Avg | All Gap↓ |
|---|---|---|
| $1.0 \times 10^6$ (default) | 80.3 | 23.6 |
| $2.0 \times 10^6$ | 83.8 | 16.5 |
| $1.0 \times 10^7$ (10× recommended) | 84.9 | 14.3 |
| $1.0 \times 10^8$ | 84.6 | 14.0 |
关键发现:不同于以往"上下文延长才需要更大 θ"的直觉,IN2 训练中信息密度增加也需要更大 θ。收益在 $10^7$ 后饱和。
| Model | NarrQA | Qasper | MultiFQA | HotpotQA | 2WikiMQA | MuSiQue | GovRep | QMSum | MultiNews | Avg |
|---|---|---|---|---|---|---|---|---|---|---|
| GPT-4-Turbo | 33.0 | 50.7 | 52.7 | 68.5 | 64.3 | 49.1 | 33.9 | 25.4 | 24.9 | 44.7 |
| Mistral-7B-v0.2 (backbone) | 23.5 | 33.8 | 45.9 | 42.4 | 24.3 | 20.8 | 33.3 | 24.8 | 26.8 | 30.6 |
| FilM-7B | 26.9 | 42.2 | 56.0 | 62.1 | 47.0 | 39.0 | 33.8 | 25.1 | 26.9 | 39.9 |
合成数据到真实任务的迁移成功:+9.3 pp over backbone (30.6→39.9)。多跳推理任务提升最大 (HotpotQA +19.7, MuSiQue +18.2),证明 IN2 的多跳 QA path 确实起作用。

Paper's Figure 5, verbatim (caption: "Performances of FilM-7B and the backbone model on short-context tasks.").
整体近乎一致:MMLU 59.3→59.2, BoolQ +2.3, GSM8K +4.1。但 HellaSwag −4.5 / ARC-C −3.4 已不算论文宣称的 "minor variance"——这是 catastrophic forgetting 的痕迹,OpenOrca anchor 未完全兜住常识推理类。
| Stage | Goal | Data (tokens + mix) | LR schedule | Context | Techniques |
|---|---|---|---|---|---|
| Pre-training | 通用语言建模 | [论文未披露] (继承 Mistral-7B) | — | 32K (v0.2) | 标准自回归 |
| Mistral-Instruct SFT | 指令跟随 | [论文未披露] (继承 v0.2 ckpt) | — | 32K | 标准 SFT |
| IN2 SFT | 消除位置偏置 | 1.75M 条 (1.1M FG + 0.3M MH + 0.15M short + 0.2M OpenOrca) | cosine decay, max LR=1e-6, 3% warmup | 4K–32K | answer-only loss, FSDP full-shard + CPU offload |
| Post-training (RLHF/DPO) | — | — | — | — | [论文未应用] |
| Quantization-aware | — | — | — | — | [论文未应用] |
Training infra: 16 nodes × 8×80GB A100 = 128 GPUs, ~14K steps (1 epoch), ~300 GPU-day (~56h wall-clock)
单一最难复现训练技巧: reject sampling 保证 gold segment position 在 [0, L] 上均匀分布——这不是标准 data loader 能实现的,需要在 data generation pipeline 中预计算目标长度 bin 并反复采样直到每个 bin 填满。
| Step | Premise | Conclusion | Load-bearing? |
|---|---|---|---|
| 1 | 长上下文 LLM 普遍在中段位置丢信息 (Liu et al. 2024 U-shape curve; 本文 Fig.1 Mistral 灰线) | Lost-in-the-middle 是真实存在的现象 | ✓ (公认前提) |
| 2 | 已有归因指向 RoPE / causal mask / sliding window 等架构因素 | 解法应改架构——作者需否定此 framing | ✓ (必须打掉才能立数据论点) |
| 3 | 训练数据本身有位置偏置: (a) 自回归 loss 近距离主导, (b) system message 始终在开头 → 模型学到"信息在边缘" | LITM 是数据问题, 不是架构问题 | ✓ (全文存活基石) |
| 4 | 用 GPT-4 合成 1.75M 条 IN2 数据 (位置均匀 + 细粒度/多跳两路), 标准 SFT 不改架构 | 仅靠数据 + instruction tuning 即可修 LITM | ✓ (方法论核心) |
| 5 | FilM-7B VaL Avg=85.9 超 GPT-4-Turbo (79.0), Gap=13.9; LongBench +9.3; 短 ctx 基本无回归 | IN2 训练成功泛化到真实任务且保持 base capability | ✓ (实证验证) |
| 6 | Sliding window 实验 (Fig.6): 距离 > 4K 时精度归零 | SW 与长上下文目标根本冲突, 进一步否定架构修补路线 | 辅助 (加强 step 3) |
| 7 | RoPE θ 消融 (Table 3): 10× θ 额外提升 ~5pp | 信息密度增加需要更大 θ, 但数据仍是主因 | 辅助 (不改变核心结论) |
论证封堵: step 6 预封"sliding window 能救吗";step 7 预封"RoPE 不够大吗"——两者都是辅助证据否定替代方案。
可攻击点: step 4 (GPT-4 QA 质量无审计; 数据量无 scale ablation); step 5 (仅 32K 验证; HellaSwag/ARC-C 退化被 understate)。
代码仓库: https://github.com/microsoft/FILM
模型权重: https://huggingface.co/In2Training/FILM-7B-32K
关键实现细节:
核心技术壁垒 (§2 Q2 展开):
"Gold position uniformity" 是整个方案的 load-bearing insight。prior work (LongAlign 用真实长上下文数据、Fu et al. 做长度分布平衡) 都没有显式控制 信息位置 的分布。IN2 的关键是把位置均匀性从"希望模型自己学到"变成"数据构造层面强制保证"——这改变了梯度的信号分布:每个位置都有等概率被问到 → 每个位置都获得等量的 attention 训练信号 → 位置偏置被消除。
| 配置 | VRAM 需求 | 备注 |
|---|---|---|
| FP16/BF16 | ~14.5 GB (weights) + KV cache | 单卡 A100-80G / H100-80G 可服务 32K |
| FP8 (W8A8) | ~7.3 GB + KV cache | [论文未讨论] |
| INT4 (GPTQ/AWQ) | ~3.6 GB + KV cache | [论文未讨论] |
KV cache per token (GQA 8 KV heads × 128 head_dim × 32 layers):
推理特点:
代码来源:https://huggingface.co/In2Training/FILM-7B-32K (继承 Mistral-7B-Instruct-v0.2 架构)
FilM-7B 不改变 Mistral-7B 架构,仅通过 IN2 SFT 修改权重。以下为继承的架构图。
N/A — FilM-7B / Mistral-7B 仅使用单一 GQA attention,无辅 attention 机制。
N/A — Dense 模型,无 MoE routing / gating / indexer。
标准 pre-norm residual connection: $x_{l+1} = x_l + \text{Attn}(\text{RMSNorm}(x_l))$, $x_{l+1}' = x_{l+1} + \text{FFN}(\text{RMSNorm}(x_{l+1}))$。无非标准残差。
| 代码构件 | 对应图 | 关键实现细节 |
|---|---|---|
MistralForCausalLM | A1 | embed_tokens + 32 layers + norm + lm_head |
MistralDecoderLayer | A2 | pre-norm residual × 2 |
MistralAttention (q/k/v/o_proj) | A3 | GQA 32/8, RoPE applied to Q and K |
MistralMLP (gate_proj, up_proj, down_proj) | A2 FFN | SwiGLU: gate×up then down, hidden=14336 |
MistralRMSNorm | A2 ln1/ln2 | ε=1e-5 |
rotary_emb | A3 RoPE | θ=1e6 default; IN2 推荐训练时用 1e7 |