一、transformers(专门针对大模型的第三方库)
-
transformers 和 diffusers 是由 Hugging Face 提供的两个不同的 Python 库,都用于处理深度学习模型,但各有不同的重点和用途。
1.Transformers
-
用途:主要用于自然语言处理(NLP),包含大量预训练模型,如 BERT、GPT-2、T5 等,适用于文本分类、文本生成、问答、翻译等任务。
-
模型多样性:提供广泛的模型选择,支持多种任务和语言。
-
特性:支持模型训练、微调、推理,并提供丰富的工具和接口,使 NLP 相关操作更简便。
-
社区和生态系统:拥有庞大的社区和生态系统,提供大量教程、示例和支持。
2.Diffusers
-
用途:专注于提供梯度扩散模型(如 DALL-E、Stable Diffusion 等),主要用于图像生成任务。
-
模型专一性:主要集中在扩散模型上,用于生成高质量图像。
-
特性:提供简单直观的方式来使用和探索梯度扩散模型,使图像生成变得容易。
-
社区和生态系统:目前社区和生态系统相对 transformers 较小,但在图像生成领域专注,是探索该领域的理想选择。
3.transformers库的安装
![]()
二、下载模型
1.在浏览器搜索魔搭社区并点击到模型库页面

2.搜索qwen2.5版本并找到千问2.5-1.5B-Instruct模型

3.点击打开千问2.5-1.5B-Instruct模型、并下载模型

有3种下载方法
方法一:命令行下载
在命令行中通过pip install modelscope命令安装ModelScope
下载完成后在命令行输入modelscope download –model Qwen/Qwen2.5-1.5B-Instruct命令下载模型
注:会出现下载后不知道模型保存到那个文件夹的情况
方法二:在代码中直接下载
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2.5-1.5B-Instruct')
方法三:Git下载
先下载lfs
git lfs install
下载模型
git clone https://www.modelscope.cn/Qwen/Qwen2.5-1.5B-Instruct.git
三、实际运用
任务:输入对某电影的评价,输出评价的类型(正面、中立或负面)
代码整体结构
from transformers import AutoModelForCausalLM, AutoTokenizer
-
导入Hugging Face的transformers库
-
AutoModelForCausalLM: 用于加载因果语言模型(生成式模型)
-
AutoTokenizer: 用于加载对应的分词器
1.模型加载
model_name = r"C:\\Users\\35802\\Qwen2.5-1.5B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
-
作用:从本地路径加载预训练的Qwen模型
-
特点:只需要加载一次,避免重复加载浪费时间
2.定义任务模板
prompt_template = "请判断以下文本属于哪个类别:{text}。可选类别有:正面、负面、中立。"
-
关键部分:通过提示词告诉模型要做什么
3.主循环
while True:
input_text = input("请输入影评文本:").strip()
-
无限循环,可以不断输入影评
-
input() 等待用户从键盘输入
-
.strip() 去掉输入文本首尾的空格
4.文本编码
prompt_input = prompt_template.format(text=input_text)
inputs = tokenizer(prompt_input, return_tensors="pt")
-
format():将用户输入的影评填入模板
-
tokenizer():将文本转换成模型能理解的数字(token IDs)
-
return_tensors="pt":返回PyTorch张量格式
5.模型推理
output_sequences = model.generate(
inputs.input_ids,
max_new_tokens=20,
attention_mask=inputs.attention_mask,
)
-
model.generate():让模型根据输入生成新的文本
-
inputs.input_ids:输入的token ID序列
-
max_new_tokens=20:限制最多生成20个新token
-
attention_mask:告诉模型哪些位置需要关注(1关注,0忽略)
-
output_sequences:模型生成的token ID序列
6.解码结果
generated_text = tokenizer.decode(output_sequences[0], skip_special_tokens=True)
result = generated_text[len(prompt_input):].strip()
-
decode():把生成的数字ID转换回人类可读的文本
-
skip_special_tokens=True:跳过特殊标记
-
[len(prompt_input):]:关键步骤——只提取模型新生成的部分,去掉输入的提示词
-
因为generated_text包含“提示词+模型回答”,而我们需要的是“模型回答”
-
-
.strip():去掉首尾空格
7.强制输出三种类别
valid_categories = ["正面", "负面", "中立"]
for category in valid_categories:
if category in result:
result = category
break
print(f"分类结果:{result}\\n")
-
定义有效类别:只允许输出这三个词
-
循环检查:遍历三个类别,看结果中是否包含它们
-
强制替换:如果找到“正面”在结果中(即使结果是“正面。这部电影很好”),把result强制设为“正面”
-
break:找到后就停止循环
-
输出结果:打印分类结果,然后继续下一次循环
8.运行结果



