Llama、Qwen、DeepSeek bpe算法都不一样 怎么办 AutoTokenizer AutoModelForCausalLM “自动选择并加载正确分词器(tokenizer)”的工具类
·
Llama、Qwen、DeepSeek bpe算法都不一样 怎么办 AutoTokenizer AutoModelForCausalLM “自动选择并加载正确分词器(tokenizer)”的工具类
AutoTokenizer 和 AutoModelForCausalLM 是 Hugging Face transformers 库中最常用的两个“Auto”类,几乎所有加载大语言模型(LLM)的代码都会同时用到它们。下面用最直白的方式介绍它们的作用、区别和典型用法(2026 年视角,基于 transformers v4.4x ~ v5.x 主流写法)。
1. AutoTokenizer 是什么?
一句话:
它是“自动选择并加载正确分词器(tokenizer)”的工具类。
主要功能:
- 把人类可读的文本 → 模型能理解的数字 token id
- 把 token id → 人类可读的文本(解码)
- 处理 padding、truncation、attention mask、special tokens 等
为什么用 AutoTokenizer 而不是具体的 XXXTokenizer?
- 你不需要提前知道模型用的是什么分词方式(BPE、WordPiece、SentencePiece、tiktoken 风格……)
- 同一个 checkpoint 名字,AutoTokenizer 会自动匹配对应的 tokenizer 类型
最常见写法:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B-Instruct")
# 或 Qwen、DeepSeek、Mistral、Gemma、Phi-4 等任意模型
典型用法示例:
text = "你好,世界!"
inputs = tokenizer(
text,
return_tensors="pt", # 返回 PyTorch 张量
padding=True,
truncation=True,
max_length=512
)
print(inputs["input_ids"]) # tensor([[ 1, 31514, ..., 198]])
print(tokenizer.decode(inputs["input_ids"][0])) # 还原文本
2. AutoModelForCausalLM 是什么?
一句话:
它是“自动加载适合自回归因果语言建模(next-token prediction)的模型”的工具类。
核心特点:
- 专门为 GPT 风格的自回归生成模型 设计(Llama、Qwen、Mistral、Gemma、Phi、DeepSeek、Grok 等几乎所有现代聊天/生成模型都属于这一类)
- 模型自带 LM Head(一个线性层),能直接输出每个位置的下一个 token 的 logits
- 支持
.generate()方法做方便的文本生成
和 AutoModel 的最大区别:
| 类名 | 包含的内容 | 主要用途 | 是否自带生成头(LM Head) | 是否能直接 .generate() |
|---|---|---|---|---|
AutoModel | 只有 Transformer 骨干(隐藏状态输出) | 特征提取、embedding、继续预训练 | ✗ | ✗ |
AutoModelForCausalLM | 骨干 + LM Head(输出 vocab 大小的 logits) | 文本生成、聊天、SFT、RLHF | ✓ | ✓ |
简单记忆:
想做聊天、写代码、续写故事 → 用 AutoModelForCausalLM
只想拿隐藏状态做下游任务(分类、embedding 等) → 用 AutoModel
最常见写法:
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
torch_dtype="auto", # 自动选择 bf16/fp16
device_map="auto" # 自动分布到多卡
)
生成文本最经典写法(几乎所有 demo 都这样写):
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-14B-Instruct")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-14B-Instruct", device_map="auto")
messages = [{"role": "user", "content": "用 Python 写一个快速排序"}]
input_text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(input_text, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=800,
temperature=0.7,
top_p=0.9,
do_sample=True
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
快速总结对比表
| 项目 | AutoTokenizer | AutoModelForCausalLM |
|---|---|---|
| 负责什么 | 文本 ↔ token ids | 模型权重 + LM head(预测下一个 token) |
| 典型导入方式 | AutoTokenizer.from_pretrained() | AutoModelForCausalLM.from_pretrained() |
| 是否支持 .generate() | ✗ | ✓(最方便的生成接口) |
| 主要场景 | 所有模型都用 | 聊天、代码生成、续写、对话类模型 |
| 如果误用会怎样 | — | 用 AutoModel 加载生成模型 → 没有生成能力 |
一句话口诀:
Tokenizer 管切词,CausalLM 管续写。
现代 LLM 推理/微调基本永远是:
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint, ...)
有具体模型或任务想深入了解用法,可以继续问!
更多推荐


所有评论(0)