以三个结束符作为标准 | AI生成和翻译

Home 2025.11

从技术层面讲,你可以只使用一个<|endoftext|>(标记50256)作为文档分隔符——这样仍然能在文档间建立清晰边界,模型大多情况下也能学会不跨越这些边界进行续写。

但实践中,几乎所有基于网络文本(OpenWebText、FineWeb、RedPajama、C4衍生数据集等)训练GPT-2风格模型的人都会严格使用三个分隔符,这源于早期形成的实际标准,且具有充分理由:

1. 遵循原始GPT-2 WebText的既定规范

正因如此,使用三个分隔符能使你的数据预处理方式与产出GPT-2公开困惑度指标及下游性能基准的数据集完全一致。

2. 有效防止数据打包时的意外合并

现代训练器(nanoGPT、llm.c、HuggingFace、Megatron等)会将多个文档打包到同一训练序列中以达到完整上下文长度(GPT-2为1024,现多为2048/4096/128k)。

若仅使用一个<|endoftext|>,极少数情况下可能因程序错误、偏移错误或异常边界情况导致两个文档在无分隔符时连接。这将造成灾难性的训练信号(模型会突然学习将随机网页内容续写到另一个网页)。

使用连续三个分隔符时,即使发生某个标记被丢弃或误读的意外,剩余两个标记仍能维持边界完整性。这是一种低成本的错误检测冗余机制。

3. 确保分隔符具备唯一识别性

4. 零成本优势

总结

单分隔符方案适用于个人实验,但三分隔符成为行业惯例是因为:

这正是所有公开脚本(Karpathy的fineweb.py、OpenWebText仓库、HazyResearch的flash-attention训练代码等)都严格使用三个分隔符的原因——也是我向你推荐此方案的理由。

若需将模型困惑度或生成样本直接与GPT-2/nanoGPT/FineWeb基线对比,采用三分隔符方案即可完美对标。


Back

x-ai/grok-4.1-fast

Donate