S2-02: 三尺度翻译桥接——最终架构

S2-01 记录了 7 个架构版本的失败与演进。本文呈现最终的收敛设计。

1. 核心问题

S1 echo 证明了:一句话可以用树结构编码成 root_hash,再从 root_hash 解码回原句。

S2 要回答:德语句子的树根,怎么变成英语句子的树根?

经过 7 个版本的迭代,答案是:不能在一个尺度上完成翻译。需要三层桥,分别处理 token 级别、数组级别和树结构级别。


2. 三尺度架构总览

DE: "die Katze sitzt"
      │
  ┌───▼──────────────────────────────────────────────┐
  │ L0: 全局记忆库                                    │
  │   E_de["die", "Katze", "sitzt"] → token embeddings │
  │   跨语言共享的 E 空间                              │
  │   共现训练自然拉近 cat/Katze 的距离                 │
  └───┬──────────────────────────────────────────────┘
      │
  ┌───▼──────────────────────────────────────────────┐
  │ L1 (Encoder): Bi-GRU 共现数组                    │
  │   学习德语的 token 共现模式                         │
  │   GRU 隐状态编码了数组内的 token 间关系              │
  └───┬──────────────────────────────────────────────┘
      │
  ┌───▼──────────────────────────────────────────────┐
  │ L2 (Encoder): 层级树折叠                          │
  │   完全二叉树 + Linear(2d→d) 逐层合并               │
  │   产出 root_de [128]                              │
  └───┬──────────────────────────────────────────────┘
      │
      │  Bridge_L2: root_de → root_en_pred
      │  Bridge_L1: 不完整的英语数组 → 完整的英语数组
      │  Bridge_L0: 跨语言 E 空间自动对齐 (共现统计)
      │
  ┌───▼──────────────────────────────────────────────┐
  │ L2 (Decoder): 层级树展开                          │
  │   root_en_pred → W_split 逐层展开 → leaf_array    │
  └───┬──────────────────────────────────────────────┘
      │
  ┌───▼──────────────────────────────────────────────┐
  │ L1 (Decoder): Bi-GRU 修复数组                     │
  │   补全缺失的冠词、时态、格标记                       │
  └───┬──────────────────────────────────────────────┘
      │
  ┌───▼──────────────────────────────────────────────┐
  │ L0: 全局记忆库 (共享)                              │
  │   leaf → dot E_en.T → English tokens              │
  └───┬──────────────────────────────────────────────┘
      │
EN: "the cat sits"

3. 三层详解

3.1 L0: 全局记忆库

职责:每个 token 的 embedding。不按语言分表——德语、英语、中文全部在同一个 E 空间中。

为什么共享:“cat” 和 “Katze” 出现在相似的上下文(共现矩阵)里,自然获得相邻的 E 向量。bridge_L0 不需要额外的参数——E 空间中相邻的词天然就是翻译。

训练:Phase A (EN autoencode) 和 Phase B (DE autoencode) 中,E 被两种语言的数据同时更新。“cat” 始终离自己最近 (E_self=94%),混合训练不破坏这个事实。

3.2 L1: Bi-GRU 共现数组

职责:编码本语言内 token 的共现模式。双向 GRU 看到整个 token 序列,输出每个位置的隐状态 [n_leaves, d]

Encode 方向:原始 token array → Bi-GRU → 上下文感知的隐状态 → 传给 L2 做树折叠。

Decode 方向:L2 展开产出的叶序列 → Bi-GRU 反演 → 修复缺失 token → dot L0 召回单词。

修复训练:Phase A 和 B 的 autoencode 中,随机去除输入句 20-30% 的 token,要求 decoder 产出完整句子。这迫使 L1 GRU 学会从破损输入中恢复完整序列。

训练样本:
  Input:    "bee flying"        (破损, 去除了 "the" 和 "is")
  Target:   "the bee is flying"  (完整)

L1 GRU 必须学会:
  - 主语需要冠词 → 补 "the"
  - 谓语需要时态 → 补 "is"
  - 介词短语需要连接词 → 补 "to", "for"

这个能力天然适配翻译:Bridge_L0 的词对词翻译天然有空缺(源语言和目标语言的冠词/时态系统不同)。L1 GRU 已学会修复这种破损。

3.3 L2: 层级树折叠

职责:把 token 数组折叠成语序正确的句子。

Encoder:完全二叉树 + 逐层 Linear(2d→d) 合并。同深度共享参数。

leaf[0]  leaf[1]  leaf[2]  leaf[3]
   \      /         \       /
   parent(Linear)    parent(Linear)     ← depth 2
        \               /
        root [128]                     ← depth 1

Decoder (W_split)Linear(d→2d) 逐层展开。和 encoder 对称。W_split 的监督信号来自 encoder 的 merge——每个深度的 merge 产出一对 (left, right),作为 W_split 的训练标签。

各语言独立:英语的 merge/split 参数和德语的分开。英语的 W_split 在 Phase A 训好,翻译时直接复用。

Bridge:只对齐 L2 的最终 root [128]。root_de → Bridge(Linear(d→2d→d)) → root_en_pred


4. 训练流水线

Phase A: English Autoencode(带修复)

Data:  50K English sentences, 30 epochs
Input: 完整或随机去除 25% token 的句子
Target:完整句子

Trained: L0, L1_en (enc+dec Bi-GRU), L2_en (merge+split)

验证指标:
  - BLEU (完整输入): 应 > 80%
  - BLEU (破损输入): 应 > 60%  ← 修复能力的核心指标
  - E_self: 应 > 90%

Phase B: German Autoencode(带修复,L0 共享)

Data:  50K German sentences, 30 epochs
Input: 同 Phase A
Target:完整句子

Trained: L1_de, L2_de (L0 继续微调或冻结)
Frozen:  L1_en, L2_en

验证指标:
  - BLEU (完整): 应 > 70%
  - BLEU (破损): 应 > 50%

Phase C: Bridge Training

Data:  50K DE-EN 平行句对, 30 epochs
Input: DE sentence → L0 → L1_de → L2_en → root_de
Bridge: root_de → root_en_pred
Decoder: root_en_pred → L2_dec_en → L1_dec_en(修复) → L0 → token

Trained: Bridge only (L0/L1/L2 冻结)
Loss:   CE(English decoder output, Gold English) + MSE(root_en_pred, root_en_gold)

验证指标:
  - BLEU (翻译): 目标 > 10%
  - 修复能力: 完好输出中冠词、时态标记的正确率

5. 风险点

风险 缓解措施
L2 Linear merge 破坏回声信息 (代替 cat encoding) 先用 cat encoding (已验证 BLEU=84.5) 测修复训练,再逐步替换
修复训练的去除率选错 网格搜索 10%, 25%, 40% 三种去除率
L2 W_split 学不动 加内节点 MSE 辅助监督
Bridge 训不动 Phase C 先用 L0 共享 + L1 修复能力兜底,桥是辅助而非唯一通道
计算开销过大 三尺度每 epoch 增加 Bi-GRU + tree merge 计算,约 2-3x 当前 echo 训练时间

6. 与 S2-01 版本的对比

S2-01 (7 版本尝试) S2-02 (三尺度)
桥只对齐 L2 root hash 桥在 L0/L1/L2 三层各自对齐
decoder 从 root 重建全句 decoder 接收已翻译 token 数组
LeafPredictor / GRU / W_split 混用 L1=GRU, L2=tree, 各自独立
单语言任务和翻译任务混训 Phase A/B 独立 autoencode, Phase C 桥训练
修复能力没有显式训练 L1 GRU 在 autoencode 中显式训练修复

7. 实施计划

阶段 内容 文件
1 EN autoencode (带修复) + cat encoding spr_v4_multiscale.py
2 DE autoencode (L0 共享) 同上
3 Bridge integration 同上
4 修复训练去除率消融 grid search script
5 L2 merge 替代 cat encoding 消融 同上

代码仓库: github.com/houming818/sametime/experiments/


License: GPLv3 本文《SPR》系列采用 GPLv3 协议开源发布。