SPR L2重装升级:千维架构跨越与千万级数据融合

在我们成功验证了 L2 (Transformer Decoder) 的自回归重排能力,并通过缩放模型和引入 Beam Search 打破了 1-NN 的 BLEU 分数天花板后,我们的项目正式进入了“火力全开”的大规模计算阶段。

今天,我们在数据和架构两个维度上完成了极其壮观的跨越。

一、 千万级数据的 L1 锚点树 (Anchor Tree) 结网

WMT17 的 9.8 万对语料对于验证算法可行性来说足够,但要让模型真正掌握人类语言(尤其是英语)复杂的从句、倒装、虚拟语气等长距离语法依赖,我们需要真正的数据汪洋。

我们成功引入了 ParaCrawl v9 (14.17M / 一千四百万对) 的高质量中英双语语料,并基于此重新训练了一个 32,000 词表大小的超大 BPE (Super BPE) 模型。

在如此恐怖的数据量下,我们的 L1 架构展现出了惊人的效率。由于 L1 (InfoNCE 锚点树) 是纯隐空间表示,没有昂贵的自回归生成,它在单卡 GPU 上跑出了 120 batches/秒 (batch size = 512) 的超高吞吐量!

仅仅用了 15 分钟(3个 Epoch),模型就成功将一千四百万对语料消化完毕,训练 Loss 稳步下降到 2.10 附近。这意味着,这棵包含 32,000 个词汇的“拓扑锚点树”,已经在高维连续空间中彻底对齐了中英文的底层语义网络。我们得到了极其坚实的基石:anchor_tree_massive_ep3.pt

二、 1024 维重装 L2 Decoder 出击

L1 负责“死记硬背”概念与语义的对齐,而“语法重排与流利生成”的重任则落在了 L2 身上。为了应对千万级语料带来的语法复杂性挑战,我们对 L2 进行了大规模重装升级:

  • 隐层维度 (Hidden Size) 跃升:从原来的 256 维直接跃升至 1024 维
  • 网络深度 (Layers) 与注意力头 (Heads):扩展至 6 层 Decoder 和 16 个 Attention Heads。
  • 概念升维桥接 (Dimension Projection):我们在 L2 入口处加入了一个线性投影层 Linear(128, 1024),将 L1 冻结输出的、高度浓缩的 128 维概念坐标,瞬间展开到 1024 维的广阔空间,供 Transformer 去做交叉注意力 (Cross-Attention) 映射。
  • 激活函数与混合精度:升级为当前大模型标配的 GELU 激活函数,并引入了 CUDA AMP (自动混合精度) 来保障超大模型在千万级数据上的计算速度与显存安全。
  • 权重共享 (Weight Tying):将输入 Embedding 层与输出的 32k 词表 Linear 层权重绑定,不仅省下 3200 万个参数,更大幅加速了梯度的收敛。

三、 好起好落,静待花开

目前,这台配置了 1024 维引擎的重装 L2 机器,已经作为 L2_Massive_Train 任务进入了服务器 GPU 队列的 RUNNING 状态。

由于数据量高达一千四百万条,第一轮 Epoch 可能需要数小时。但这种“大算力 + 大数据 + 大一统分离架构”的强强联合,必定会带来 BLEU 分数上质的飞跃。

更重要的是,这个解耦架构带来了极强的实验扩展性。 当 L1 负责了所有“对齐”脏活累活后,L2 是否只能是 Transformer?状态空间模型 (Mamba)、线性 RNN (RWKV) 甚至文本扩散模型 (Diffusion) 是否能做得更好?这为我们打开了无限可能的科研大门。

我们让子弹飞一会儿,静待首轮评估结果的诞生! — s2-09-phase3-massive-l2-1024d.md +++ s2-09-phase3-massive-l2-1024d.md @@ -102,6 +102,12 @@ train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True, collate_fn=collate_fn, num_workers=0)

+
+### 🚨 Emergency Bugfix: The 2000-Pair Illusion
+
+A major bug was discovered during the initial run: passing `train_pairs` (a list of 14 million items) instead of the string `'train'` into the dataset class's `split` parameter triggered the fallback condition (`split == 'train'`). This inadvertently sliced only the last 2,000 items, causing the model to only train on the test set (`16 batches/epoch`).
+
+We immediately fixed the dataset initialization to directly accept the pre-sliced list. The training has now correctly resumed on the full 14.17M dataset, processing exactly 110,690 batches per epoch with an ETA of ~5.5 hours per epoch on the A100. Let it run!

## 🔭 Next Steps