LLM 分词器Tokenizer 如何从 0 到 1 训练出来

写在前面

大型语言模型(LLM)处理的是人类的自然语言,但计算机本质上只能理解数字。Tokenizer(分词器) 就是架在自然语言和计算机数字表示之间的一座至关重要的桥梁。它负责将我们输入的文本字符串分解成模型能够理解的最小单元——Token,并将这些 Token 转换成对应的数字 ID,反之亦然(将 ID 转换回文本)。

那么, LLM Tokenizer如何训练、评估呢?

1. Tokenizer 基础知识

在深入训练之前,我们先厘清几个核心概念:

  • Tokenization(分词/标记化): 将原始文本字符串分解成一系列 Token 的过程。
  • Token: 模型处理的基本单元。它可以是一个完整的词("apple")、一个词的一部分(子词,"token", "ization" 中的 "ization")、一个字符("a")、或者一个特殊的标记(
<think>好的,我现在需要回答用户关于LLM训练中输出padding到与输入token相同长度的原因的问题。首先,我得回想一下LLM训练的基本流程,特别是数据处理部分。 用户提到输出padding到和输入token等长,这可能涉及到输入和输出的对齐问题。在训练语言模型时,通常会把输入和输出拼接起来,比如在自回归模型中,输入是上下文,输出是接下来的token。这时候,如果输入和输出的长度不一致,可能会需要进行填充,以确保所有样本的长度一致,便于批量处理。 接下来,我需要考虑为什么输出需要padding到与输入相同的长度。可能的原因包括计算损失函数时的一致性。比如,在训练时,模型会生成每个位置的输出,而损失函数通常只关心有效token的位置,padding的部分需要被忽略。如果输入和输出的长度不同,可能会导致对齐问题,比如输出的某些位置没有对应的输入,或者在计算损失时索引错位。 另外,Transformer架构的自注意力机制要求序列长度一致,因为每个token都要与其他token交互。如果输入和输出的长度不同,可能需要在处理时进行额外的掩码操作,或者调整模型结构,这会增加复杂性。因此,将输出padding到与输入相同长度,可以简化模型的处理流程,确保矩阵运算的一致性。 还有,数据批处理也是一个因素。在批量训练中,所有样本需要保持相同的长度,这样才能堆叠成张量进行计算。如果输入和输出的长度不同,可能需要分别填充,但统一填充到相同长度可能更高效,减少计算中的条件判断和额外操作。 然后,我需要验证这些想法是否正确。比如,参考引用[1]提到输入token是Prompt + Label,输出是Padding Token + Label,输入长度大致是Prompt和Label的长度之和。这说明在训练时,输入和输出可能被合并处理,因此需要长度对齐,填充到相同长度以便于计算损失函数时屏蔽掉padding部分的影响,如引用[2]提到的避免计算padding token的loss。这样,模型在训练时只关注有效的label部分,而padding部分被忽略,从而提升训练效率。 总结起来,输出padding到与输入等长的原因可能有以下几点:保持输入输出长度一致以便于批量处理,确保损失函数正确计算(忽略padding部分),以及符合Transformer架构对序列长度的要求。这样设计简化了数据处理流程,提高了训练效率,并减少了潜在的错位问题。</think>在LLM(大语言模型)训练中,将输出(Label)填充(Padding)到与输入Token相同长度的原因主要包括以下方面: --- ### 1. **序列对齐与批量计算需求** Transformer架构依赖矩阵运算,要求同一批次内所有序列长度一致。输入(Prompt)和输出(Label)会被拼接为统一序列进行训练,例如输入为`Prompt + Label`,输出为`Padding + Label`。 - **对齐逻辑**:若输入和输出长度不一致,无法直接堆叠为张量进行计算。填充后,输入和输出长度一致,便于批量处理[^1]。 - **示例**: 输入:`[Token1, Token2, <PAD>, <PAD>]` 输出:`[<PAD>, <PAD>, Token3, Token4]` 通过填充对齐后,可直接计算损失函数。 --- ### 2. **损失函数计算的正确性** 在自回归训练中,模型需要预测下一个Token,而损失函数仅需计算有效Token(Label部分)的损失,需屏蔽Padding部分的影响: - **掩码机制**:通过`attention_mask`标记有效Token位置,确保模型仅关注有效内容[^2]。 - **计算效率**:统一长度后,可高效生成掩码矩阵,避免逐样本计算条件判断。 --- ### 3. **Transformer架构的兼容性** Transformer的自注意力机制要求序列长度一致: - **位置编码对齐**:输入和输出的位置编码需连续且一致,否则可能破坏位置信息的连续性。 - **注意力掩码一致性**:统一的长度简化了注意力掩码的设计,例如因果掩码(Causal Mask)的生成[^3]。 --- ### 4. **简化数据处理流程** - **预处理统一性**:输入和输出统一填充到相同长度,减少了数据预处理的复杂性。 - **解码兼容性**:在推理阶段,模型生成的Token需与输入长度解耦,但训练时统一长度可简化训练-推理的一致性设计。 --- ### 示例代码说明 以下为分词与填充的典型实现(基于Hugging Face库): ```python tokenizer = AutoTokenizer.from_pretrained("Qwen2.5-0.5B-Instruct") # 输入与输出拼接后统一填充 inputs = tokenizer(prompt, padding="max_length", max_length=512) labels = tokenizer(label, padding="max_length", max_length=512) # 训练时通过掩码忽略Padding部分的损失 loss = model(input_ids, attention_mask=inputs.attention_mask, labels=labels).loss ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kakaZhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值