空白折叠压倒上下文 | AI生成和翻译

Home 2026.06

以下是您提供的 Markdown 内容的中文翻译:

以下是由 613 个标记的上下文产生的内容。让我分析一下提示结束后的延续部分:

示例 1:

free(classroom[i]->name);
                             data(s, &n, &n,->n1);

然后大约 250 个字符的纯空白。

示例 2:

free(classroom[i]->name);
          if(p->size() == 1)

然后大约 250 个字符的纯空白。

示例 3:

free(classroom[i]->name);
              = 1;
              m[i - i] + 1] + 1_t;

然后大约 200 个字符的纯空白。

发生了什么

好消息仍然存在。 在 613 个标记的上下文下,模型确实生成了 C/C++ 标记——data(s, &n, &n,->n1)if(p->size() == 1)m[i - i] + 1]——这些在语法上是合理的片段。它甚至试图保持正确的风格:在循环内的 free() 调用后,它生成了更多的 C 语句。这表明上下文条件作用正在发挥作用。

但三个明显的问题仍然可见:

  1. 它无法完成明显正确的下一行。 提示在 free(classroom[i]->name); 处结束——任何人类都会自然写出 free(classroom[i]); } 作为下一行。模型做不到。它生成了语法上相似但语义上错误的内容 (data(s, &n, &n,->n1))。这是 124M + PPL 32 的症状:它有足够的局部统计信息来生成 一个 C 语句,但不足以生成 正确的 C 语句。

  2. 在延续大约 10 个标记后,它会塌缩为空白。 所有三个样本都生成了一行伪 C 代码,然后填充了 200 多个空白字符。这是模型的空白先验在重新发挥作用。它有足够的上下文来“启动”一段延续,但在 10 个标记后,上下文信号减弱,它回退到训练数据中的主导模式:空白和缩进。这直接来自于数据质量问题——github-code 包含大量的空白序列(许可证头、空行、缩进),模型最强的先验是“在不确定时,发出空白。”

  3. _ 乱码仍然存在,但有所减轻。 样本 3 中的 _t,样本 1 中的 ->n1。这些是经过 BPE 切分的标识符片段。与 3 标记上下文相比,出现的频率降低,但仍然可见。

诊断更新

613 个标记的测试确认了之前答案的诊断,但有一个细化:

修订后的优先级排序

排名 手段 原因
1 数据清理 在 613 个标记处出现的空白塌缩证明数据质量是第一大问题。富含空白的训练数据 → 空白优先的模型。
2 分词器 仍然重要——_t->n1 是 BPE 的伪影。但不如数据问题关键。
3 延长训练 仅在 #1 和 #2 修复后才有用。

还有一件事可以尝试

在相同提示上以 temperature=0.0(贪婪解码)运行。如果贪婪解码也在 10 个标记后塌缩为空白,则确定是数据/权重问题(模型给空白分配了最高概率)。如果贪婪解码生成了一个完整的函数,那么这是采样问题,权重比看起来要好。


Back Donate