当前位置: 首页 > news >正文

多轮对话分类任务

这次是一个多轮对话式分类任务,算是上面两篇文章的一个组合。

模型通过我们的历史对话,判断新问题答案。

1.导入和加载模型

from transformers import AutoModelForCausalLM, AutoTokenizer model_name_or_path = r"D:\learn\damodel\Qwen2.5-1.5B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path,device_map='auto')#不写这个参数就自动放到cpu里面

一样的导入模块和加载模型,但是这里我们加了一个device_map='auto',这是让模型自动分配可用设备(有GPU就用GPU,没有才用CPU),没有这个参数的时候默认使用CPU。

device 直译是“设备”,在 PyTorch / transformers 的世界里,主要指两种:CPU:中央处理器,擅长复杂逻辑控制,但跑大模型慢;GPU:图形处理器(显卡),擅长并行计算,跑大模型快(通常快10-50倍),所以 device 决定了你的模型在哪块硬件上“思考”。

用了 device_map='auto' 后,你的输入也要放到同一个设备上,因为模型在GPU上,输入还在CPU上,就会报错。

2.构建历史对话

# 假设的历史输入信息(多轮对话) history_inputs = ['''我是用户,你是系统,你需要按照我给你的句子判断属于哪一个科目,有三种:'数学','语文','英语'。 "用户:another,", "系统:英语", "用户:sin90度=1", "系统:数学“ “用户:花落知多少”, “系统:语文” ''']

这段字符串中,首先就是系统的指令,告诉模型它的任务是什么。

并要求了格式,需要是用户:……系统:……

给了三个例句

3.当前输入

# 当前轮次的输入信息 current_input = '''"用户:good" '''

设置新问题,这里也遵循我们设置的格式

4.拼接完整输入

# 将历史输入和当前输入连接成一个长字符串 full_input_text = "\n".join(history_inputs + [current_input]) # 字符串的组合

用换行符把历史对话和当前问题拼成一个长字符串。

full_input_text的内容如下:

5.编码

# 编码整个输入序列 inputs = tokenizer(full_input_text, return_tensors="pt").to(model.device)

前半部分和之前两篇大模型推理是一样,后面的.to(model.device)也有学习过,在深度学习中也有使用过。是把编码后的张量也放到和模型一样的设备上(GPU/CPU),否则会报错。

6.模型生成答案

# 调用模型生成回复 output_sequences = model.generate( inputs["input_ids"], max_length=2000, max_new_tokens=300, # 限制生成的新 token 数量 temperature=0.01, # 控制生成文本的随机性(值越小越确定) top_p=0.9, # 核采样参数 attention_mask=inputs.attention_mask, )

和之前是一样的。这里我们 把max_new_tokens设置的很大,会在输出结果中看到,模型还对所给的结果进行解释。但是依旧没有说完,是因为字数达到限制了

model.generate():这是模型开始工作的核心函数,根据我们的输入,一个token一个token的预测接下来可能出现的token(其实token的意思就是最小的切分单元,就像一个字对人类来说是最小的切分单元一样,我们读文章可以说成逐字阅读,模型就是逐token)。

inputs.input_ids:把翻译好的问题传给模型。

max_new_tokens:这是限制模型生成的token数(可以理解为写作文限制字数),这里是不能超过512

其他参数可以参考大模型前两篇文章

7.解码与输出

# 解码生成的文本 generated_reply = tokenizer.decode(output_sequences[0], skip_special_tokens=True) print(generated_reply)

8.运行结果

9.改进

可以把这个字数限制设置小一点,max_new_tokens=5

此外,还可以让结果更简单,在上面的修改基础上把最后print(generated_reply)修改为

answer = generated_reply[len(full_input_text):].strip() # 只取新生成的部分 print(f"模型判断:{answer}")

把我们的提示词部分给切掉,解决生成结果比较厚重,直接给出答案。

运行结果:

http://www.jsqmd.com/news/529508/

相关文章:

  • 如何快速实现Android应用的多选功能:MultiSelectSpinner终极解决方案指南
  • 三步掌握洛雪音乐音源:开源工具解锁高效音乐资源获取新姿势
  • 无缝整合滴答清单与Obsidian:效率提升与工作流优化的开源解决方案
  • 3步解锁Obsidian演示新范式:让研究者告别PPT焦虑
  • AI审核赋能的IACheck:坡道坡度、宽度及无障碍通行检测报告如何更真实反映“可达性”
  • 3分钟探索ZIP加密恢复:bkcrack实战解决方案
  • 紧急预警:Python 3.15默认禁用多解释器隔离!3行代码规避子解释器崩溃风险(含CVE-2024-XXXX补丁级配置)
  • 基于三相整流器直接功率(DPC)控制的无锁相环电压控制在Matlab/Simulink中的复现
  • 如何快速配置中国科学技术大学Beamer模板:面向新手的完整指南
  • 3步实现Axure RP全界面汉化:设计师实用本地化指南
  • Calibre中文路径乱码修复:终极解决方案让电子书管理更简单
  • OpenAI 创始人盛赞 Rust,却遭开发者反驳:Go 才是大模型眼里的“香饽饽”!
  • 基于人工智能的智能客服系统:从技术选型到毕业设计实战
  • uniapp 自定义 tabbar 切换闪烁问题优化:原生隐藏与组件占位方案
  • RimSort完全指南:免费开源的边缘世界模组管理器终极教程
  • Unitree Go2机器人ROS2 SDK架构深度解析与性能优化指南
  • 基于Maxwell设计的750W内转子伺服电机:14极12槽优化方案与成熟生产案例
  • RAG系统核心之意图识别与意图树实现全解析
  • 网易云音乐 Node.js API 服务深度技术指南
  • PDF补丁丁终极指南:免费高效的PDF文档处理完整解决方案
  • TSL2561光照传感器驱动开发:ARM Cortex-M嵌入式实现
  • DSMR P1协议嵌入式解析库:轻量高效电表数据处理方案
  • Bazzite游戏系统终极问题解决指南:10个常见故障与快速修复方案
  • 15-C#.Net-编程思想(POP-OOP-AOP-DDD)-学习笔记
  • 哈希冲突的解决之道:深入理解哈希表底层原理
  • Z-Image-Turbo-辉夜巫女高级参数详解:从操作系统视角理解批处理与并发推理
  • 锐捷交换机console密码忘了?5分钟搞定RG-N18000-X密码恢复(附详细截图)
  • TradingAgents-CN智能决策系统:基于协同架构的AI金融分析平台
  • APKMirror:开源Android应用分发平台的客户端实现与技术解析
  • 从Spring Cloud到MCP网关的平滑迁移路径(附可落地的4阶段灰度方案与性能衰减预警阈值表)