今天是 2026 年的第三天,也是我在 ContextWeave 项目上收获最大的一天。
从早上开始运行消融实验,到深夜完成实验清单更新,这一天经历了兴奋、困惑、沮丧,最后又回到平静的满足。作为一个正在准备 ACL/EMNLP 投稿的研究者,我想记录下这段宝贵的经历。
🎯 背景:为什么需要消融实验
ContextWeave 是我开发的一个长文档翻译系统,核心思想是通过智能分块 + 上下文编织来解决 LLM 翻译长文档时的各种问题。在之前的实验中,我已经验证了系统的整体效果:
- 成功翻译 60 万字符的完整书籍
- COMETKiwi 质量评分超越人工翻译(在 FIDIC 法律文档上)
- 支持 6 种目标语言
但是,顶会 Reviewer 一定会问一个问题:"每个组件的独立贡献是多少?"
这就是消融实验(Ablation Study)的意义——逐个移除系统组件,量化每个部分的价值。
📊 E14:5 配置消融矩阵
我设计了 5 个配置来验证系统的核心组件:
| 配置 | 分块方式 | 上下文 | 术语注入 | 预期作用 |
|---|---|---|---|---|
| A0 | Direct(不分块) | - | - | 验证 LLM 崩溃现象 |
| A1 | Fixed-4K | ❌ | ❌ | 基线:仅分块 |
| A2 | Section-Aware | ❌ | ❌ | 验证智能分块 |
| A3 | Section-Aware | ✅ | ❌ | 验证上下文编织 |
| A4 | Section-Aware | ✅ | ✅ | 完整系统 |
测试文档选用了 Mustafa 的《The Coming Wave》第 4-6 章,约 115K 字符。
第一个惊喜:A0 配置确认崩溃
当 A0(Direct 翻译)的结果出来时,我知道论文的核心论点站住了:
A0_direct:
- char_ratio: 13.47% ← 只输出了原文的 13.5%!
- TCR: 45.45%
- 状态: COLLAPSED
115K 字符的输入,LLM 只输出了不到 16K 字符,然后就"累了"停止了。
这不是 token limit 的问题——DeepSeek V3 有 128K 上下文窗口,8K 输出限制。按理说 115K 输入完全在能力范围内。但 LLM 就是"崩溃"了,这正是我们系统要解决的核心问题。
第二个惊喜:分块的戏剧性效果
A1(Fixed-4K 分块)的结果让人振奋:
A1_fixed_only:
- char_ratio: 30.83% ← 从 13.5% 提升到 30.8%!
- COMETKiwi: 0.8238
- TCR: 77.27%
仅仅是把文档分成小块,输出完整度就提升了 +17.4 个百分点。这是分块策略最直接的价值证明。
😰 遇到问题:TCR 为什么不增长?
按照我的预期,A4(完整系统 + 术语注入)的 TCR 应该明显高于其他配置。但结果让我困惑:
| 配置 | TCR |
|---|---|
| A1 (Fixed) | 77.27% |
| A2 (Section) | 75.00% |
| A3 (+Context) | 75.00% |
| A4 (+Term) | 77.27% |
A4 的 TCR 和 A1 一样?术语注入没有效果?
这不符合直觉。我花了几个小时排查问题。
第一次诊断:分块逻辑 bug
首先发现分块引擎有问题。当遇到超大章节时,_split_large_section 函数没有被正确调用,导致某些块超过了目标大小限制。
修复后重跑,问题依旧。
第二次诊断:TCR 计算太严格
深入分析 TCR 计算逻辑后,我发现了真正的问题:
# 原始的严格匹配
if term_zh in translation:
matches += 1
这要求术语的中文翻译完全一致才算匹配。但实际上:
- 术语表:
"artificial intelligence" → "人工智能" - A4 翻译:
"人工智能技术"← 包含术语但不完全匹配
修复为宽松匹配后:
# 宽松匹配:检查术语是否被包含
if any(variant in translation for variant in [term_zh, term_zh.replace(' ', '')]):
matches += 1
结果立刻改善:
| 配置 | TCR (严格) | TCR (宽松) |
|---|---|---|
| A1 | 77.27% | 92.86% |
| A4 | 77.27% | 96.43% |
终于看到了 +3.5pp 的提升!
🔍 意外发现:边界分析的价值
在排查过程中,我额外做了边界分析,发现了更有价值的结论:
| 分块方式 | 边界数量 | 问题边界 | 词中截断 |
|---|---|---|---|
| Fixed-4K | 28 | 17 (60.7%) | 17 |
| Section-Aware | 23 | 0 (0%) | 0 |
Section-Aware 分块完全消除了词中截断问题!
这个发现比 TCR 的微小提升更有说服力。Fixed-4K 有超过 60% 的边界会在单词中间截断,而 Section-Aware 通过尊重文档结构,实现了 100% 的段落完整性。
📝 实验清单更新
一天下来,我更新了完整的实验清单:
| 状态 | 数量 | 占比 |
|---|---|---|
| ✅ 完成 | 13 | 81% |
| ⚠️ 部分/暂停 | 3 | 19% |
| ❌ 未开始 | 0 | 0% |
特别值得一提的是 E01(CCF 指标验证),我决定采用文献替代方案而非人工标注:
We adopt established MT completeness metrics from prior work. Paragraph Retention Rate (PRR) follows the structural preservation principle proposed by [Tiedemann & Thottingal, 2020]...
这是学术写作的常见策略——当某个指标已经在领域内被广泛验证时,引用权威文献比重新做人工实验更有说服力。
🎓 今天学到的教训
1. 实验设计要考虑评估粒度
TCR 计算的严格 vs 宽松匹配问题,本质上是评估粒度的选择。在消融实验中,选择合适的评估方式和选择合适的测试数据同样重要。
2. 样本量决定结论可信度
E14 实验只匹配了 22 个术语(术语表 92 个中的 24%),这导致 TCR 差异不够显著。下次改进时需要:
- 更换术语密集的测试文档(如 FIDIC 法律合同)
- 或扩大术语表到 150+ 条目
3. 意外发现有时比预设目标更有价值
边界分析本来只是调试手段,但"Section-Aware 消除 100% 边界问题"这个发现,比 TCR 的 3.5pp 提升更能说明方法的价值。
🚀 下一步计划
E14 暂停,但核心发现已经足够支撑论文:
- ✅ 分块防止崩溃:Char% 13.5% → 30.8% (+17.4pp)
- ✅ Section-Aware 消除边界问题:60.7% → 0%
- ✅ 完整系统质量最优:COMETKiwi 0.833
剩余的 P0 实验:
- E02:DCR 边界重复检测(可用理论分析替代)
- E05:多文档 TCR 汇总
今天的工作让我更深刻地理解了一点:好的研究不是一帆风顺的,而是在发现问题、解决问题的循环中逐步前进的。
从崩溃到突破,这一天的经历会成为论文 Discussion 部分的宝贵素材。
休息一下,明天继续!☕
如果你对长文档翻译或 LLM 应用有兴趣,欢迎关注 ContextWeave 项目的后续更新。
