Skip to content

1. Tokenizer:文本→数字的“翻译官”

作用:把人类语言(如"我爱AI")转换成模型能理解的数字(如 [259, 102, 304])。

🔧 关键步骤

  1. 分词(Tokenize)

    • 英文:按单词/子词拆分
      python
      "ChatGPT is amazing!" → ["Chat", "G", "PT", " is", " amazing", "!"]
    • 中文:按字或词拆分
      python
      "深度学习" → ["深", "度", "学", "习"]  # 或 ["深度学习"]
  2. 编码(Encode) → 转成数字ID

    python
    ["深", "度", "学", "习"] → [101, 204, 309, 502]  # 具体数字因模型而异
  3. 特殊标记

    • [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

📚 学习建议

  1. 实践工具:直接玩Hugging Face的Tokenizer在线demo
  2. 可视化理解
  3. 关键一句话
    Tokenizer是语言的“翻译器”,Attention Mask是模型的“注意力导航仪” 🧭

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer