1. Tokenizer:文本→数字的“翻译官”
作用:把人类语言(如"我爱AI")转换成模型能理解的数字(如 [259, 102, 304])。
🔧 关键步骤
分词(Tokenize)
- 英文:按单词/子词拆分python
"ChatGPT is amazing!" → ["Chat", "G", "PT", " is", " amazing", "!"] - 中文:按字或词拆分python
"深度学习" → ["深", "度", "学", "习"] # 或 ["深度学习"]
- 英文:按单词/子词拆分
编码(Encode) → 转成数字ID
python["深", "度", "学", "习"] → [101, 204, 309, 502] # 具体数字因模型而异特殊标记
[CLS]:分类任务的开头(如[101])[SEP]:分隔句子(如[102])[PAD]:填充长度(如[0])
💻 代码示例(Hugging Face库)
python
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
text = "我爱自然语言处理"
inputs = tokenizer(text, return_tensors="pt") # 自动添加[CLS]/[SEP]
print(inputs.input_ids) # 输出:tensor([[101, 2769, 4263, ...]])2. Attention Mask:告诉模型“哪些是有效内容”
作用:区分真实文本和填充部分([PAD]),防止模型关注无意义的填充位置。
🌰 举个栗子
- 原始文本:
["深", "度", "学", "习"]→ 编码为[101, 204, 309, 502] - 统一长度填充后:
[101, 204, 309, 502, 0, 0](假设最大长度=6) - 对应的Attention Mask:python
[1, 1, 1, 1, 0, 0] # 1=真实文本,0=填充部分
🖼️ 可视化
输入ID: [101, 204, 309, 502, 0, 0]
▲ ▲ ▲ ▲ ▲ ▲
深 度 学 习 [PAD][PAD]
Mask: [1, 1, 1, 1, 0, 0]3. 其他关键概念
📌 Positional Encoding(位置编码)
- 问题:Transformer没有RNN的时序性,不知道单词顺序。
- 解决:给每个token添加位置信息(如“深”在第1位,“度”在第2位)。
📌 Attention Heads(注意力头)
- 模型同时从多个角度分析文本关系(如一个头看语法,一个头看语义)。
4. 完整流程示例
python
from transformers import BertModel
# Step 1: Tokenize
text = "今天天气真好"
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
# inputs包含:
# - input_ids: [101, 123, 456, 789, 102, 0, 0](数字编码)
# - attention_mask: [1, 1, 1, 1, 1, 0, 0]
# Step 2: 模型处理
model = BertModel.from_pretrained("bert-base-chinese")
outputs = model(**inputs) # 自动应用Attention Mask📚 学习建议
- 实践工具:直接玩Hugging Face的Tokenizer在线demo
- 可视化理解:
- 关键一句话:
Tokenizer是语言的“翻译器”,Attention Mask是模型的“注意力导航仪” 🧭