自动模型方式 - 文本分类任务
1 课程概览
本课讲解 Transformers 库的第二种方式:自动模型(AutoModel)。所有 API 都以 Auto 开头。自动模型比管道方式更具体,可以做 DIY(如句子长度截取、补齐)。流程:加载 Tokenizer → 加载模型 → 文本转张量 → 送给模型预测。本课完成文本分类任务。
2 核心概念与定义
- 自动模型(AutoModel):Transformers 的第二种方式,所有 API 以 Auto 开头。
- AutoConfig:自动配置模型参数。
- AutoModel:自动加载模型。
- AutoTokenizer:自动加载分词器。
- eval():做预测(evaluate)。
3 模型与算法详解
Pipeline vs AutoModel
| 方式 | 特点 | 灵活性 |
|---|---|---|
| Pipeline | 简单,底层全帮你做 | 低 |
| AutoModel | 可 DIY(如句子长度截取、补齐) | 中 |
AutoModel 流程
1. 加载 Tokenizer(分词器)
2. 加载模型
3. 文本转张量
4. 送给模型预测
导包
所有 API 都以 Auto 开头。
import torch
from transformers import AutoConfig, AutoModel, AutoTokenizer
| 包 | 说明 |
|---|---|
torch | PyTorch 深度学习框架 |
AutoConfig | 自动配置模型参数 |
AutoModel | 自动加载模型 |
AutoTokenizer | 自动加载分词器 |
文本转张量
两种方式:返回张量(PT)或不返回。
| 参数 | 返回形式 |
|---|---|
return_tensors='pt' | 二维张量 |
| 不加 | 一维列表(需自己封装成二维) |
eval() 函数
eval 是 evaluate 的缩写,做预测。
my_model.eval()
with torch.no_grad():
output = my_model(input)
4 数学原理与推导
文本分类
$$\text{output} = \text{model}(\text{input_ids}, \text{attention_mask})$$
其中:
- $\text{input_ids}$ 是文本的 id 序列
- $\text{attention_mask}$ 是注意力掩码
文本转张量
$$\text{tensor} = \text{tokenizer}(\text{text}, \text{return_tensors}='pt')$$
5 代码示例
import torch
from transformers import AutoConfig, AutoModel, AutoTokenizer
def dm01_text_classification():
"""自动模型方式:文本分类"""
model_path = "C:/software/softwallg/pretrained_model/chinese_text_classification"
# 1. 加载 Tokenizer(分词器)
my_tokenizer = AutoTokenizer.from_pretrained(model_path)
# 2. 加载模型
my_model = AutoModel.from_pretrained(model_path)
# 3. 文本转张量
text = "人生该如何起头"
inputs = my_tokenizer(
text,
return_tensors='pt', # 返回二维张量
padding=True, # 是否填充
truncation=True, # 是否截断
max_length=30 # 最大长度
)
print(f"输入文本: {text}")
print(f"输入张量: {inputs}")
# 4. 送给模型预测
my_model.eval()
with torch.no_grad():
output = my_model(**inputs)
print(f"\n输出结果: {output}")
return my_model
# 测试
if __name__ == "__main__":
print("=== 自动模型方式:文本分类 ===")
model = dm01_text_classification()
代码说明
| 代码 | 说明 |
|---|---|
AutoTokenizer.from_pretrained() | 加载分词器 |
AutoModel.from_pretrained() | 加载模型 |
my_tokenizer(text, return_tensors='pt') | 文本转张量 |
my_model.eval() | 设置为预测模式 |
torch.no_grad() | 不计算梯度 |
my_model(**inputs) | 送给模型预测 |
6 重难点与易错提醒
- ❗重点:自动模型所有 API 都以 Auto 开头。
- ❗重点:流程:加载 Tokenizer → 加载模型 → 文本转张量 → 送给模型预测。
- ❗重点:
return_tensors='pt'返回二维张量。 - ⚠️易错:
from_pretrained函数名相同,但属于不同的类。 - 💡技巧:导包时输入 auto 就有提示,不需要全背下来。
7 课堂问答精选
Q1:自动模型和管道方式有什么区别?
A:管道方式简单,底层全帮你做;自动模型可 DIY(如句子长度截取、补齐),更灵活。
Q2:自动模型的流程是什么?
A:①加载 Tokenizer(分词器);②加载模型;③文本转张量;④送给模型预测。
Q3:AutoTokenizer 和 AutoModel 的 from_pretrained 有什么区别?
A:函数名相同,但属于不同的类。一个是分词器的,一个是模型的。
Q4:return_tensors='pt' 有什么作用?
A:返回二维张量。如果不加,返回一维列表,需要自己封装成二维。
8 本课小结
- 自动模型:Transformers 的第二种方式,所有 API 以 Auto 开头。
- 流程:加载 Tokenizer → 加载模型 → 文本转张量 → 送给模型预测。
return_tensors='pt'返回二维张量。- 比管道方式更灵活,可 DIY。
9 延伸思考
- 自动模型方式如何进行特征提取?
- 特征提取返回什么结果?