S2-03: VecMap + BPE —— 跨语言嵌入对齐的落地路线
S2-02 定义了 L0/L1/L2 三尺度架构。本文选择跨语言对齐的具体路线并实施。
1. 问题重述
L0 共享词表 + 混合训练已达到 BLEU=89.7(S2-02 实验结论)。但 L1 GRU 的跨语言传递 仍然失败——EN GRU 隐状态无法直接解码 ZH token。
核心问题:EN 和 ZH 的 GRU 隐状态空间不重叠。需要一个桥来对齐。
2. 两条现有路线
2.1 VecMap —— 单训 + 后对齐
Conneau et al. (2018, ICLR). “Word Translation Without Parallel Data.”
核心思想:
- EN 单语训 Echo → E_en 空间稳定
- ZH 单语训 Echo → E_zh 空间稳定
- 用 5000 对种子词 (数字、地名) 算 Orthogonal Procrustes 矩阵 W
W = argmin ||W @ E_en[i] - E_zh[i]||², subject to W^T W = I
W 是 128×128 的正交旋转矩阵。0 参数训练——只需求解一次 SVD 分解。
2.2 XLM-R / mBERT —— 混训 + 内置对齐
Devlin et al. (2019). Conneau et al. (2020).
核心思想:
- BPE 子词表跨 104 语言共享
- 所有语言混合训练 MLM (Masked Language Model)
- 共享子词 + 混合数据 → 跨语言对齐"自动涌现"
2.3 对比学习 (Contrastive)
Oord et al. (2018). Gao et al. (2021, SimCSE).
核心思想:正例对 (cat, Katze) 推近,负例对 (cat, Hund) 推开。
loss = -log(exp(sim(cat_en, Katze_de)/τ) / Σ_j exp(sim(cat_en, w_j)/τ))
需要大 batch size (4096+) 来提供足够负例。
3. 我们的选择:VecMap + BPE 组合
| 组件 | 路线 | 理由 |
|---|---|---|
| L0 | BPE 共享词表 (XLM-R 路线) | 已验证可行——Phase AB 混训 BLEU=89.7 |
| L1 Bridge | Procrustes 正交对齐 (VecMap 路线) | 6 行代码,0 参数,一次算完 |
为什么不选纯 XLM-R
XLM-R 在 L0 层面(词层面)对齐。但不会自动对齐 L1(GRU 隐状态层面)——因为 GRU 把 E 空间映射到了不同的隐空间。Procrustes 可以同时解决词空间和隐空间的对齐。
为什么不选 Contrastive
对比学习需要大 batch (4096+),我们的单 GPU 训练不适合。Procrustes 不需要训练。
4. 实施计划
Step 1: BPE 分词
import sentencepiece as spm
# 训练 BPE 模型(EN + ZH 文本)
spm.SentencePieceTrainer.train(
input=['en_text.txt', 'zh_text.txt'],
model_prefix='sp_bpe',
vocab_size=16000,
character_coverage=0.9995
)
# 替换 jieba
zh_toks = sp.encode_as_pieces(zh_text) # ['中国', '人民', '共和国']
en_toks = sp.encode_as_pieces(en_text) # ['the', 'cat', 'sits']
Step 2: Phase AB (混训 L0+L1)
和 S2-02 完全一致——BPE 替换 jieba,其余不变。
Step 3: Procrustes 对齐
# 取 5000 对 EN-ZH 配句的 GRU 隐状态
X_en = [L1_encode(en_sent).mean(0) for en_sent in seed_pairs]
X_zh = [L1_encode(zh_sent).mean(0) for zh_sent in seed_pairs]
# SVD 求正交对齐矩阵
U, _, V = torch.svd(X_zh.T @ X_en)
W = V @ U.T # 128×128 orthogonal
# 翻译时:
zh_hidden = L1_decode(W @ en_hidden)
Step 4: 验证
| 指标 | 当前 (无桥) | VecMap 后 (预期) |
|---|---|---|
| EN echo BLEU | 89.7 | ≥ 89.7 |
| EN→ZH 翻译 BLEU | 0 ( |
> 5 (破零) |
5. 关键论文引用
| 论文 | 年份 | 与 SPR 关系 |
|---|---|---|
| Mikolov et al. “Exploiting Similarities among Languages…” | 2013 | 发现单语 Word2Vec 空间可通过线性变换对齐 |
| Artetxe et al. “Learning bilingual word embeddings with (almost) no bilingual data” | 2017 | 0 种子词对的自监督对齐 |
| Conneau et al. “Word Translation Without Parallel Data” (VecMap) | 2018 | 无监督 Procrustes 对齐的标杆——本实验直接用 |
| Devlin et al. (mBERT) | 2019 | 104 语言 BPE 共享词表 + MLM 混合训练——本实验的 L0 策略 |
| Conneau et al. (XLM-R) | 2020 | 更大规模多语言共享词表验证 |
| Oord et al. “Representation Learning with Contrastive Predictive Coding” | 2018 | InfoNCE 对比损失——对比学习路线的基础 |
6. 预期
如果 Procrustes W 能让 EN→ZH 的翻译 BLEU > 5,证明三尺度架构 + VecMap 路线是可行的。W 是 offline 计算的——不需要训,只是一次 SVD。失败则继续探索。
License: GPLv3 本文《SPR》系列采用 GPLv3 协议开源发布。