堆树实验全录——架构、锚点、评测、L0教训
一、为什么不是 flat world_emb
world_emb = nn.Embedding(16000, 128) 每人一行,互不共享
→ 改 cat 的 world_emb 不影响 dog
→ anchor 梯度无法传播到非 anchor token
→ 没有扩散 = 没有泛化
堆树 = 31 个共享节点 (depth=5, 1+2+4+8+16),token 按 token_id // (V/2^L) % 2^L 路由。
二、锚点设计
| 来源 | 对数 | 准确率 |
|---|---|---|
| 位置对齐 (平行句统计) | 18568 raw → 3000 valid | nce acc=17% |
| LaBSE 语义筛选 (cos>0.35) | 1428 dedup | nce acc=56% |
| 手工标注 | 888 pairs (不参与训练) | gold eval 专用 |
结论:LaBSE 语义锚点远优于位置统计。手工锚点只做 gold eval,不和训练锚点重叠。
三、评测 Bug——e[0] 把全部之前结果压了 6 倍
# BUG: 只取锚点词的第一个 BPE token
z[0] # ZH anchor 的第一个 BPE token
→ 中文词 z[0]: 449/500 = 90% 是 "▁" (BPE prefix)
→ 所有 ZH anchor 指针在同一 token
→ gold acc 被压到 5-16%
# FIX: mean embedding
mean(heap_world(all_bpe_tokens)) # 全 token 向量均值
→ gold acc: 5% → 30% (6×修正)
四、LaBSE 蒸馏——768D → 128D
LaBSE teacher (768D): word-level NN acc = 39.8% (gold ceiling)
Heap tree (128D): word-level NN acc = 29.3% (best, 74% of teacher)
Distilled L0 (128D): word cos = 0.776 (good initialization)
128D 达到 768D 教师 74% 精度——维度压缩是主要损耗源。
五、架构深度——更多≠更好
| 实验 | 配置 | gold |
|---|---|---|
| 树深度 | depth=3 (7 nodes) | 29.7% |
| depth=5 (31 nodes) | 29.3% | |
| depth=7 (127 nodes) | 29.4% | |
| 递归乘 | 2,3,4 层递归 | 12-26% |
| 路由 | hard routing | 29.3% |
| Gumbel-Softmax | 11.6% | |
| 对齐方法 | InfoNCE | 29.3% |
| MSE | 0% (cos 退化) | |
| 评测方式 | mean embed | 29.3% |
| e[0] | 5% (BUG) |
结论:depth=5 + hard routing + single complex multiply + InfoNCE = sweet spot。过深、递归、学路由、MSE 全失败。
六、一字一义训练的后果
每个 EN 锚点只配一个 ZH 词 → L0[light] 只指向轻 → 无法同时表达 光 和 轻 → 树的多叶性被浪费。
七、L0 六大核心教训
- MSE 毁空间——逐点修正破坏全局几何,cos_L0 0.27→0.08
- Procrustes 不适用——前提是同构空间 (cos>0.3),实际 cos=0.11
- flat world_emb 无扩散——没有共享节点,梯度不能跨 token 传播
- e[0] 评测漏网——BPE prefix 单 token 不能代表一个词
- 深度递归噪音 > 信号——单层 CMul 优于 K 层递归
- 过拟合普适——全部实验 ep 0 最佳,之后退化 → 早停是最佳策略