从崩溃到突破:ContextWeave 消融实验的一天

今天是 2026 年的第三天,也是我在 ContextWeave 项目上收获最大的一天。

从早上开始运行消融实验,到深夜完成实验清单更新,这一天经历了兴奋、困惑、沮丧,最后又回到平静的满足。作为一个正在准备 ACL/EMNLP 投稿的研究者,我想记录下这段宝贵的经历。

🎯 背景:为什么需要消融实验

ContextWeave 是我开发的一个长文档翻译系统,核心思想是通过智能分块 + 上下文编织来解决 LLM 翻译长文档时的各种问题。在之前的实验中,我已经验证了系统的整体效果:

  • 成功翻译 60 万字符的完整书籍
  • COMETKiwi 质量评分超越人工翻译(在 FIDIC 法律文档上)
  • 支持 6 种目标语言

但是,顶会 Reviewer 一定会问一个问题:"每个组件的独立贡献是多少?"

这就是消融实验(Ablation Study)的意义——逐个移除系统组件,量化每个部分的价值。

📊 E14:5 配置消融矩阵

我设计了 5 个配置来验证系统的核心组件:

配置分块方式上下文术语注入预期作用
A0Direct(不分块)--验证 LLM 崩溃现象
A1Fixed-4K基线:仅分块
A2Section-Aware验证智能分块
A3Section-Aware验证上下文编织
A4Section-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 (宽松)
A177.27%92.86%
A477.27%96.43%

终于看到了 +3.5pp 的提升!

🔍 意外发现:边界分析的价值

在排查过程中,我额外做了边界分析,发现了更有价值的结论:

分块方式边界数量问题边界词中截断
Fixed-4K2817 (60.7%)17
Section-Aware230 (0%)0

Section-Aware 分块完全消除了词中截断问题!

这个发现比 TCR 的微小提升更有说服力。Fixed-4K 有超过 60% 的边界会在单词中间截断,而 Section-Aware 通过尊重文档结构,实现了 100% 的段落完整性。

📝 实验清单更新

一天下来,我更新了完整的实验清单:

状态数量占比
✅ 完成1381%
⚠️ 部分/暂停319%
❌ 未开始00%

特别值得一提的是 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 实验:

  1. E02:DCR 边界重复检测(可用理论分析替代)
  2. E05:多文档 TCR 汇总

今天的工作让我更深刻地理解了一点:好的研究不是一帆风顺的,而是在发现问题、解决问题的循环中逐步前进的。

从崩溃到突破,这一天的经历会成为论文 Discussion 部分的宝贵素材。

休息一下,明天继续!☕


如果你对长文档翻译或 LLM 应用有兴趣,欢迎关注 ContextWeave 项目的后续更新。

留言与讨论