趋近智
文本模型处理的是数字数组而非字符。训练小语言模型时,需要将人类可读的指令数据集转换为整数序列。这种转换由分词 (tokenization)器(tokenizer)完成。大多数现代语言模型使用子词 (subword)分词算法,如字节对编码(Byte-Pair Encoding)或 SentencePiece。子词算法并不直接将整个单词映射到单个整数,也不映射单个字符,而是在两者之间取得了平衡。它们将罕见词拆分为更小、更常见的片段,并为每个片段分配一个特定的整数 ID。
在为训练格式化数据集时,并不会一次只处理一个序列。为了优化 GPU 矩阵运算,数据通常按批次(batches)处理。神经网络 (neural network)需要形状为 (batch_size, sequence_length) 的规整矩形张量才能执行这些运算。然而,自然语言序列的长度往往各不相同。
为了在批次中实现统一的矩阵维度,需要进行填充(padding)。如果批次中的序列长度不一,首先要确定该批次中的最大长度。设此最大长度为 。对于批次中长度为 且 的任何序列,需要在序列后追加特定的填充标记 (token) ID。添加到每个序列的填充标记数量 计算如下:
通过追加 个填充标记,批次中的每个序列都达到了 的确切长度,从而形成一个有效的矩形张量。
将长度不一的原始文本序列转换为统一的填充张量矩阵,以便进行批次处理的过程。
虽然填充保证了较短的序列能够满足矩阵维度的要求,但还必须处理超过模型最大上下文 (context)窗口的序列。如果序列长度 大于架构所能处理的绝对最大长度,就会导致显存 (VRAM)溢出错误或张量不匹配。
截断(Truncation)通过在允许的最大长度处切断序列来解决这个问题。在监督微调 (fine-tuning)中,通常会截断序列的末尾。但在处理指令数据集时必须小心。如果截断了“指令-回答”对中的回答部分,模型将学会生成不完整的答案。一种常见的策略是在初始数据准备阶段过滤掉过长的序列,以避免在分词 (tokenization)过程中进行过度截断。
使用 Hugging Face 的 transformers 库,可以通过一次函数调用来处理分词、填充和截断。许多小语言模型默认没有定义专门的填充标记 (token)。在这种情况下,通常的做法是将序列结束(EOS)标记指定为填充标记。
from transformers import AutoTokenizer
# 从预训练的 SLM 初始化分词器
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM-135M")
# 如果没有设置填充标记,则将 EOS 标记指定为填充标记
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
# 示例指令数据集条目
texts = [
"Translate the following sentence to French.",
"Say hi.",
"Write a python script to calculate the fibonacci sequence."
]
# 应用分词、填充和截断
encoded_inputs = tokenizer(
texts,
padding="longest",
truncation=True,
max_length=256,
return_tensors="pt"
)
print(encoded_inputs["input_ids"])
在上述实现中,padding="longest" 参数 (parameter)指示分词器 (tokenizer)将较短的序列填充到与当前批次中最长序列相同的长度。与 padding="max_length" 相比,这种方式的内存效率很高,因为后者无论批次中实际文本长度如何,都会强制将每个序列填充到 256 的长度。return_tensors="pt" 参数确保输出格式为 PyTorch 张量,以便直接移动到 GPU 上。
填充的方向取决于具体任务。对于训练自回归 (autoregressive)因果语言模型,通常使用右填充(right-padding)。这意味着填充标记 (token)被追加到序列的末尾。在正向传播过程中,模型从左到右预测下一个标记,因此右填充是保持序列完整性的合理选择。
左填充(left-padding)是将标记添加到序列的开头,有时在批量推理 (inference)中使用。它能确保最后生成的标记在矩阵右边缘对齐 (alignment)。但对于微调 (fine-tuning)任务,数据管道应配置为使用右填充。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•