从序列切分到上下文窗口:语言模型如何在有限历史中学习01—为什么序列建模必须切分数据
自然语言文本本质上是长度不定的连续序列。在训练神经网络语言模型(如 RNN / LSTM,乃至后来的 Transformer)时,我们会遇到一个非常现实的工程限制:
- 模型一次只能处理固定长度的序列
- 无法将整篇长文本直接作为一个输入样本
因此,在训练语言模型之前,必须将原始长文本切分成多个长度一致的小子序列(subsequences),再将这些子序列组织成小批量(batch)进行训练。
本文将系统梳理序列建模中常见的数据切分策略,并重点对比:
-
理论上的滑动窗口
-
实践中更常用的随机采样与顺序采样
同时给出完整代码实现与设计动机,帮助你从“原理理解”过渡到“工程实践”。
1. 语言建模本质上是“逐 token 的预测任务”
真实世界中的文本往往非常长,例如整本小说《The Time Machine》。而在语言建模任务中,我们通常采用自回归建模方式:
-
在时间步ttt,模型根据历史x<t=(x1,⋯ ,xt−1)x_{<t}=(x_1, \cdots, x_{t-1})x<t=(x1,⋯,xt−1)预测下一个 tokenxtx_txt
-
每个时间步都对应一个预测任务
2. 模型一次只能看到有限长度的上下文
无论是传统的 RNN,还是现代的大语言模型(LLM),模型在一次前向计算中:只能接收固定长度的输入序列。这个长度通常记为KaTeX parse error: Expected 'EOF', got '_' at position 14: T = \text{num_̲steps}。
也就是说,哪怕原始文本再长,模型在某一次训练或推理时,也只能基于最近的TTT个 token 进行预测。
这就带来了一个不可回避的现实约束:
长文本≠模型可直接处理的输入
\text{长文本} \ne \text{模型可直接处理的输入}
长文本=模型可直接处理的输入
3. 序列切分:把长文本变成可学习的监督样本
因此,对于一条很长的序列,我们必须先对其进行切分:
- 将原始文本拆分为多个长度为TTT的子序列
- 每一个子序列,都会对应一个训练样本
- 每个样本的目标,都是预测该子序列中“下一个 token 序列”
从监督学习的角度来看,这一步的本质是:通过切分长序列,构造大量 「局部上下文 → 下一个 token」的训练样本。
也正是在这一过程中,“序列切分策略”成为连接语言建模理论与工程实现的关键环节。
1141

被折叠的 条评论
为什么被折叠?



