[ SKILL_DOCUMENTATION ]
# 分词器 (Tokenizers)
## 概述
分词器将文本转换为模型可以处理的数值表示(token)。它们处理特殊 token、填充 (padding)、截断 (truncation) 和注意力掩码 (attention masks)。
## 加载分词器
### AutoTokenizer
自动加载模型对应的正确分词器:
python
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
从本地路径加载:
python
tokenizer = AutoTokenizer.from_pretrained("./local/tokenizer/path")
## 基础分词
### 编码文本
python
# 简单编码
text = "Hello, how are you?"
tokens = tokenizer.encode(text)
print(tokens) # [101, 7592, 1010, 2129, 2024, 2017, 1029, 102]
# 文本分词
tokens = tokenizer.tokenize(text)
print(tokens) # ['hello', ',', 'how', 'are', 'you', '?']
### 解码 token
python
token_ids = [101, 7592, 1010, 2129, 2024, 2017, 1029, 102]
text = tokenizer.decode(token_ids)
print(text) # "hello, how are you?"
# 跳过特殊 token
text = tokenizer.decode(token_ids, skip_special_tokens=True)
print(text) # "hello, how are you?"
## `__call__` 方法
主要的分词接口:
python
# 单个文本
inputs = tokenizer("Hello, how are you?")
# 返回包含 input_ids, attention_mask 的字典
print(inputs)
# {
# 'input_ids': [101, 7592, 1010, 2129, 2024, 2017, 1029, 102],
# 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]
# }
多个文本:
python
texts = ["Hello", "How are you?"]
inputs = tokenizer(texts, padding=True, truncation=True)
## 关键参数
### 返回张量
**return_tensors**: 输出格式 ("pt", "tf", "np")
python
# PyTorch 张量
inputs = tokenizer("text", return_tensors="pt")
# TensorFlow 张量
inputs = tokenizer("text", return_tensors="tf")
# NumPy 数组
inputs = tokenizer("text", return_tensors="np")
### 填充 (Padding)
**padding**: 将序列填充到相同长度
python
# 填充到批次中最长的序列
inputs = tokenizer(texts, padding=True)
# 填充到指定长度
inputs = tokenizer(texts, padding="max_length", max_length=128)
# 不填充
inputs = tokenizer(texts, padding=False)
**pad_to_multiple_of**: 填充到指定值的倍数
python
inputs = tokenizer(texts, padding=True, pad_to_multiple_of=8)
### 截断 (Truncation)
**truncation**: 限制序列长度
python
# 截断到 max_length
inputs = tokenizer(text, truncation=True, max_length=512)
# 截断成对序列中的第一个序列
inputs = tokenizer(text1, text2, tru