凌晨两点,当最后一行 JSON 数据通过一致性校验时,我长舒一口气。
Code4Paper v2.0.7,13个实验全部完成,学术审查评分:⭐⭐⭐⭐⭐。
这三天的日夜奋战,终于画上了句号。
🎯 为什么需要重构?
事情要从一周前说起。当时我的 ContextWeave 长文档翻译系统已经开发完成,各种实验也跑过一遍。但当我准备整理论文投稿材料时,发现了一个致命问题:
实验代码和结果散落在各个文件夹,没有统一的组织逻辑。
- EXP01 的结果在
old_experiments/目录 - EXP05 和 EXP06 数据重复,分不清谁依赖谁
- 部分实验有 JSON 结果但没有 LaTeX 表格
- 术语不统一:"Content Shrinkage" 和 "Structural Compression" 混用
这样的状态,别说投稿 ACL/EMNLP,就连自己复盘都头疼。
于是我决定:推倒重来,按论文叙事逻辑重新组织所有实验。
📋 重构设计原则
在动手之前,我确立了三条设计原则:
原则一:论文逻辑驱动实验组织
传统的实验目录按时间或功能分类(baseline/、ablation/、analysis/)。但这样的结构和论文章节对应不上,写作时需要频繁"翻译"。
我的方案:实验编号直接对应论文 Section 5 的小节编号。
EXP01 → Section 5.2 (Sentence Baseline)
EXP02 → Section 5.3 (Generation Collapse)
EXP03 → Section 5.4.1 (Structural Compression)
...
EXP13 → Section 5.10 (Key Results Summary)
这样写论文时,直接引用 table03_collapse.tex 就能对应到正确的实验,零心智负担。
原则二:数据真实性是生命线
学术研究最忌讳的就是数据"调整"。我给自己定了一条铁律:
所有指标必须从真实翻译文件实时计算,绝不允许预设值。
这意味着每个 metrics.json 都是脚本运行的输出,而非手工编辑的结果。任何人 clone 仓库后运行 run_all_experiments.sh,都能复现完全一致的数字。
原则三:因果链必须清晰
实验之间不是孤立的,而是环环相扣。我花了大量时间梳理因果关系:
EXP02 (发现问题) → EXP03 (定位根因) → EXP05 (解决方案)
↓ ↓ ↓
生成坍塌 结构压缩 Section-Aware 分块
每个实验的 README 都会标注"与前置实验的关系",让审稿人一目了然。
🔬 13个实验的完整图谱
三天时间,我完成了 13 个实验的组织和验证。这里分享一下核心发现:
EXP01-02: 基线与问题定义
首先用 FLORES-200 数据集验证 DeepSeek 作为 Base LLM 的质量(COMET=88.5,与 Google 88.8 相当)。然后在 20K-100K 规模上验证"生成坍塌"现象:
| 输入规模 | 完成率 (RCR) |
|---|---|
| 20K | 103.4% ✅ |
| 50K | 78.2% ⚠️ |
| 100K | 53.1% ❌ |
100K 输入时,LLM 只输出了一半内容就"累了"。这就是 ContextWeave 要解决的核心问题。
EXP03: 揭开"结构压缩"的真相
这是整个实验体系中最关键的发现。
最初我以为 LLM "偷懒"是删除了内容(MQM Omission)。但数据告诉我真相完全不同:
| 策略 | PRR (段落保留率) | char_ratio (字符压缩比) |
|---|---|---|
| Minimal | 31.8% | 29.0% |
| Anti-Shrinkage+ | 100.0% | 30.9% |
注意看:所有策略的 char_ratio 都在 ~29%,说明内容是完整的!
LLM 做的不是删除内容,而是合并段落——把原本独立的 10 个段落合并成连贯的 3 个段落。语义完整,但结构被压缩了。
我把这个现象正式命名为 Structural Compression(结构压缩),与 Generation Collapse(生成坍塌)区分开来:
| 特征 | Generation Collapse | Structural Compression |
|---|---|---|
| 触发条件 | Token 限制耗尽 | Token 充足 |
| 表现 | 硬截断,finish_reason=length | 段落合并,语义完整 |
| 解决方案 | 输入端分块 | Prompt 负面约束 (FORBIDDEN) |
这个区分非常重要——很多人误以为"内容缩水"是 LLM 在删东西,实际上它只是在"编辑"文档结构。
EXP03b/03c: 消融验证
为了确认这是 LLM 的内在行为而非超参数问题,我做了两个补充实验:
- EXP03b (Temperature): T=0.0~1.3 全范围测试,PRR 恒定 ~32%。Temperature 无影响。
- EXP03c (Rich-Format): 含 LaTeX 公式/表格的学术论文,公式保留率 98.8%,语义保留 100%。
结论:结构压缩是 LLM 的内在优化倾向,与温度、文档类型无关。
EXP05-07: 分块与边界处理
Section-Aware 分块策略的效果验证:
- 物理重叠: 6.6% → 0%(从源头消除)
- 边界截断率 (BTR): 97.4% → 0%(不再在句子中间切分)
- 翻译质量 (COMETKiwi): 0.535 → 0.580 (+8.5%)
EXP08-09: 术语一致性
跨 5 类文档验证 Context-Aware Terminology Injection:
| 文档类型 | Fixed TCR-A | Section TCR-A | 提升 |
|---|---|---|---|
| 学术论文 | 75.2% | 84.5% | +9.3% ⭐ |
| 法律合同 | 74.1% | 79.9% | +5.9% |
| 技术文档 | 79.8% | 80.8% | +1.0% |
| 平均 | 67.2% | 72.5% | +5.3% |
有趣的发现:术语注入会略微降低 COMETKiwi(-0.018),因为强制使用术语表会打断 LLM 的自然表达流。这是一个 TCR-A vs COMETKiwi 的 Trade-off,需要根据场景权衡。
EXP10-11: 效率与多语言
- 并行加速: Sequential 13min → Parallel-5 2.6min,5× 提速
- 多语言验证: 5 种语言(中/日/法/俄/印地语)全部通过 CCF 阈值
EXP13: 关键结果汇总
最后一张表,汇总 ContextWeave 的 6 大核心改进:
| 挑战 | 解决方案 | 指标 | 基线 | CW | 提升 |
|---|---|---|---|---|---|
| 结构压缩 | FORBIDDEN 约束 | PRR | 31.8% | 100% | +68.2pp |
| 边界截断 | Section-Aware | BTR | 97.4% | 0% | -97.4pp |
| 质量下降 | Context Weaving | COMETKiwi | 0.535 | 0.580 | +8.5% |
| 术语不一致 | Smart Injection | TCR-A | 67.2% | 72.5% | +5.3pp |
| Token 浪费 | Chunk-Relevant | Tokens | 14,805 | 1,795 | -87.9% |
| 延迟 | Parallel Mode | Speed | 1× | 5× | 5× faster |
🛠️ 质量保证:一致性校验
实验多了,最怕的就是数据不一致。比如 EXP03 说基线 PRR 是 31.8%,EXP13 总结表里写成了 31.2%——这种低级错误会让审稿人对整个论文产生怀疑。
为此,我写了一个跨实验一致性校验脚本:
# 核心检查项
checks = [
("EXP03 PRR Baseline", exp03_prr, 0.318),
("EXP04 Human char_ratio", exp04_ratio, 0.331),
("EXP07 vs EXP09 COMETKiwi", abs(exp07_comet - exp09_comet) < 0.02),
("EXP08 vs EXP09 TCR-A", abs(exp08_tcr - exp09_tcr) < 0.02),
("EXP11 CCF All Pass", all(lang["ccf_pass"] for lang in exp11_results)),
]
运行结果:ALL CONSISTENCY CHECKS PASSED ✅
这个脚本现在是 CI 流程的一部分,每次提交都会自动验证。
📊 最终交付物
三天奋战的成果:
| 交付物 | 数量 | 状态 |
|---|---|---|
| 实验脚本 | 13 个 | ✅ 全部可重现 |
| JSON 结果 | 13 组 | ✅ 数据一致 |
| LaTeX 表格 | 13 张 | ✅ 论文可直接引用 |
| 一致性校验 | 1 套 | ✅ 自动化验证 |
| README 文档 | 1 份 | ✅ 500+ 行 |
目录结构:
Code4Paper_v2/
├── 01_data/ # 原始数据(只读)
├── 02_configs/ # 实验配置
├── 03_evaluation/ # 评估脚本
├── 04_experiments/ # 13个实验脚本
├── 05_results/ # 结果 + LaTeX表格
└── README.md # 实验指南
💭 反思:学术研究的工程化
这次重构让我深刻体会到:顶会论文不只是创新,更是工程。
创新点固然重要,但如果实验混乱、数据不一致、无法复现,再好的想法也会在审稿中被质疑。
我总结了几条经验:
- 早规划,晚动手:先定好实验编号与论文章节的映射,再开始跑实验
- 数据不可篡改:用脚本生成结果,用版本控制追踪变更
- 因果链要可视化:每个实验的 README 都标注前置/后置实验
- 自动化校验:写检查脚本比人工核对可靠 100 倍
🎉 下一步
实验体系已经就绪,接下来的计划:
- 论文初稿:按照 Section 5 结构填充实验结果
- 可视化:为关键发现制作示意图
- 同行评审:找 2-3 位同事帮忙 review
- 投稿准备:确认 ACL 2026 DDL,准备 submission checklist
凌晨三点,保存最后一个文件,合上电脑。
窗外的城市已经沉睡,而我心里是满满的成就感。这三天虽然累,但每一行代码、每一个数字,都是为 ContextWeave 论文打下的坚实地基。
学术研究就是这样——日夜奋战的背后,是对真理的执着追求。
期待在 ACL 2026 见到这些成果。
如果你也在准备顶会投稿,欢迎在评论区交流实验组织的经验。学术之路,与君共勉。
