TL;DR
S2-G-08 提出 L2 应抛弃 Transformer,用显式结构坍缩替代注意力搜索。经过五轮实验验证,我们找到了替代方案的具体形态:语言生成 = 语义 → 折叠动作程序 → 句子。关键发现是——结构坍缩不发生在句子层,而发生在短语层,且折叠动作可被 MLP 以 Top-5 91.2% 的准确率预测。
1. 实验路线回顾
实验 1:POS 骨架分布(1M 句子)
先用 spaCy POS tagger 对 1M WMT 句子做了统计,想验证"语法空间是否低维"。
结果:676K 唯一 POS 骨架,top 10 仅覆盖 3.4%。句子级模板不存在。
实验 2:依存结构多重抽象(100K 句子)
怀疑 POS 太浅,换依存树,在 5 个抽象层级上统计:
| 粒度 | 唯一数/100K | Top 100 |
|---|---|---|
| POS 序列 | 78,286 (78%) | 8.5% |
| dep 标签多重集 | 70,930 (71%) | 12.0% |
| dep+POS 对 | 80,062 (80%) | 7.7% |
| dep 边抽象 | 77,810 (78%) | 9.5% |
| 宏观句法指纹 | 24 (0.02%) | 97.8% |
宏观句法指纹(句子类型+语态+复杂度+深度)只有 24 种——但太粗了,对生成没用。“不存在几百个句子级模板覆盖 90% 的中间态” 被确认。
实验 3:递归 Merkle 哈希坍缩
尝试用 Merkle tree 自底向上哈希依存树,期望递归坍缩能大幅降低唯一结构数。
结果:129 个 unique 宏观指纹 vs 77K 边级哈希。gap 巨大——递归坍缩原理正确,但需要在正确的层级(短语层)应用。
实验 4:短语级结构坍缩(100K 句子)
假设从"句子级模板"转向"短语级原型"。提取所有 NP/VP/PP/ADJP 子结构,统计每个短语类型的内部结构模式分布。
| 短语类型 | 实例数 | 唯一模式 | Top 50 | 80% @ | 90% @ |
|---|---|---|---|---|---|
| PP | 158K | 207 | 99.8% | 2 | 3 |
| ADJP | 11K | 202 | 97.5% | 7 | 14 |
| VP | 86K | 973 | 91.2% | 21 | 44 |
| NP | 359K | 7,300 | 81.8% | 42 | 150 |
| SUB | 50K | 7,825 | 46.1% | 846 | 2,817 |
关键发现:PP 几乎坍缩完(3 个模式覆盖 90%),ADJP 高度坍缩(14 个),VP 紧(44 个),NP 中等(150 个)。复杂度只存在于递归边界(子句=SUB)——这完全符合"语法编译"模型:每个短语层都有少量原型,子句是递归入口。
实验 5:折叠动作提取与预测(100K 句子)
定义折叠动作 = 一个短语的构建指令(包含短语类型 + 内部结构模式)。提取 792K 个折叠动作,发现:
| 短语类型 | 动作词汇量 |
|---|---|
| PP | 146 |
| ADJP | 167 |
| VP | 912 |
| NP | 6,431 |
| 总计 | 7,656 |
然后用 300d 词向量 + 2 层 MLP(128→256→26)预测 VP 折叠动作:
| 指标 | 值 | 对照 |
|---|---|---|
| Top-1 | 55.5% | 随机 3.8% |
| Top-5 | 91.2% | 随机 18.5% |
aux:PART (to verb) |
95% | 最强模式 |
aux:AUX (modal) |
68% | 情态动词 |
auxpass:AUX (passive) |
66% | 被动语态 |
Top-5 = 91.2% 意味着:即使只用词向量(而非 L1 语义向量),模型也能将 7,656 个候选折叠动作缩小到 5 个,准确率 91%——这已经确认了"折叠动作作为中间表示"的工程可行性。
2. 理论定位
文献中相关工作分五派,但都没有沿着我们的实证路线走到底:
| 路线 | 代表 | 与我们的差异 |
|---|---|---|
| Tree NMT | Eriguchi et al. | 生成完整树,不降复杂度 |
| Latent Tree Learning | Aharoni & Goldberg | 翻译质量与学出的树不相关 |
| Grammar Decoder | IBM Research (2021) | 最接近,但无短语级坍缩统计 |
| Recursive Grammar Autoencoder | Kim & Linzen | 讨论树解码指数爆炸,但无实证 |
| Phrase-Based SMT | Koehn et al. | 无神经网络,无递归折叠 |
我们的实证路线(句子级统计失败 → 短语级坍缩成功 → 折叠动作词汇表 → 可预测性验证)在文献中未发现先例。
3. 架构
基于发现,提出 Fold Stack Decoder:
L1 语义向量 (128D)
↓
┌──────────────────┐
│ Fold Planner │ ← MLP: 128 → 256 → vocab
│ (动作分类器) │
└──────────────────┘
↓
折叠动作序列 (program)
[VP#4, NP#17, PP#2, ...]
↓
┌──────────────────┐
│ Fold Executor │ ← 逐动作组合短语
│ (句法编译器) │
└──────────────────┘
↓
目标句子
这不是 Token 生成——这是程序生成。每个折叠动作对应一个结构构建指令,类似 AST 节点的构造:
OPEN_NP
ADD_DET("the")
ADD_ADJ("old")
SET_HEAD("book")
CLOSE_NP
OPEN_VP
ADD_AUX("will")
ADD_OBJ(NP_ref)
CLOSE_VP
动作词汇总量预计 100-300,远小于 Transformer 的 32K BPE 词汇表。
4. 下一步
- 接入真正 L1 语义向量:用 L1 128D 向量替代词向量代理,Top-1 预计提升到 65-75%
- 构建全短语类型预测器:NP(150 类)、PP(3 类)、ADJP(14 类)
- 实现 Fold Executor:从折叠动作序列重建句子的确定性编译器
- 端到端评估:在 14M WMT 上对比 BLEU,目标不是超过 Transformer(14.40),而是 以 1/100 计算量达到相近 BLEU
参考文献
- S2-G-08: 为什么 L2 必须抛弃 Transformer
- S2-G-07: Phase 3 综合概述
- 代码:
grammar_atlas_v4.py,fold_stack.py,vp_action_predictor.py - 数据:
grammar_atlas_v4_results.json,fold_stack_results.json