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 协议开源发布。