解密Transformer训练中的input_ids、attention_mask和labels:从数据到模型的完整流程
在自然语言处理领域,Transformer架构已经成为现代语言模型的基石。无论是机器翻译、文本生成还是问答系统,理解模型训练过程中的数据流动机制都是工程师和研究者必须掌握的核心技能。本文将深入剖析训练流程中的三个关键要素:input_ids、attention_mask和labels,揭示它们如何协同工作,将原始文本转化为模型可理解的数字信号。
1. 从文本到数字:数据预处理全流程
1.1 标记化:语言到数字的桥梁
任何Transformer模型的输入起点都是标记化(Tokenization)过程。以Hugging Face的Tokenizer为例,处理英文句子"How are you?"时:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokens = tokenizer.tokenize("How are you?")
# 输出: ['how', 'are', 'you', '?']
标记化后的结果会通过词汇表转换为数字ID。这个过程需要考虑几个关键因素:
- 子词切分:对于罕见词可能分解为子词单元
- 特殊标记:如[CLS]、[SEP]等任务相关标记
- 大小写处理:根据模型配置决定是否保留大小写信息
1.2 input_ids的生成逻辑
input_ids是模型真正理解的"语言",它承载着原始文本的全部语义信息。一个典型的input_ids序列生成过程如下:
encoded = tokenizer.encode("How are you?", return_tensors="pt")
print(encoded.input_ids)
# 输出: tensor([[ 101, 2129, 2024, 2017, 1029, 102]])
这里需要注意的几个细节:
- 101和102分别是[CLS]和[SEP]标记的ID
- 每个单词对应一个或多个token ID
- 不同语言的tokenizer会产生完全不同的ID映射
1.3 attention_mask的设计哲学
attention_mask的存在让Transformer能够高效处理变长输入。考虑以下两个长度不同的句子:


518

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



