龙潭湖网站建设,网站制作设计机构,网站群管理,阳江房产网0662目录 1.导入语加载模型 2.构建多轮对话的上下文 3.加入当前问题并拼接 4.编码输入 5.模型推理#xff08;生成回复#xff09; 6.解码与输出 7.结果 上篇文章中文本分类是单轮对话#xff0c;这次是多轮对话#xff0c;但本质上的框架是没有改变的。 1.导入语加载模…目录1.导入语加载模型2.构建多轮对话的上下文3.加入当前问题并拼接4.编码输入5.模型推理生成回复6.解码与输出7.结果上篇文章中文本分类是单轮对话这次是多轮对话但本质上的框架是没有改变的。1.导入语加载模型from transformers import AutoModelForCausalLM, AutoTokenizer model_name_or_path rD:\learn\damodel\Qwen2.5-1.5B-Instruct tokenizer AutoTokenizer.from_pretrained(model_name_or_path) model AutoModelForCausalLM.from_pretrained(model_name_or_path)关于导入库和加载在上一篇文本分类中已经介绍过。2.构建多轮对话的上下文# 假设的历史输入信息多轮对话 history_inputs [我是用户你是系统请根据下面的句子来回答我。 用户你好请问今天天气怎么样, 系统今天是晴天气温20到25度。, 用户那明天呢, 系统明天是晴天气温22到25度。]上篇文章我们构建的是单轮对话这里我们定一个history_inputs列表用来放字符串。其中字符串中就包括对系统指令和对话示例。一整段用字符串是为了后面我们拼接方便。3.加入当前问题并拼接# 当前轮次的输入信息 current_input 用户那后天的天气呢 # 将历史输入和当前输入连接成一个长字符串 full_input_text \n.join(history_inputs [current_input]) # 字符串的组合current_input这里是用户想问的新问题。这里我们还遵循了前面的格式。这里把上面内容和新用户新问的问题这两个字符串拼接一起赋给full_input_text。现在full_input_text的内容就是4.编码输入# 编码整个输入序列 inputs tokenizer(full_input_text, return_tensorspt)分词器把提示字符串翻译为模型能理解的数字IDinput_ids并生成对应的注意力掩码attention_mask。5.模型推理生成回复# 调用模型生成回复 output_sequences model.generate( inputs[input_ids], max_length300, max_new_tokens30, # 限制生成的新 token 数量 temperature0.1, # 控制生成文本的随机性值越小越确定 top_p0.9, # 核采样参数 attention_maskinputs.attention_mask )max_length和max_new_tokens都是限制字数的。其中max_new_tokens是模型说的字数也就是生成回答的字数。而max_length意思是总字数用户说的模型生成的一共字数。temperaturetop_p是控制生成策略。temperature模型在生成回答的时候都是一个token一个token的生成每一次token的筛选都有很多个token等着被选择这些待选的token都有对应的概率有比较高的0.9概率也有比较低的0.1概率等等。模型不是直接就选择概率比较高的token毕竟那些概率小的token也占有概率也在模型的候选区域里。temperature这个参数值的设置就是控制模型选择token的值越小模型就会优先选择概率越高的token。值大模型就乱选。top_p限制候选范围只从累计概率达 90% 的词里选排除了那些极低概率的“噪音词”。待选的token根据概率从大到小排列当top_p0.9的时候就表示选择前90%概率中选择。eg所有候选词[“数学”:98分, “英语”:1分, “语文”:0.9分, “历史”:0.05分, “地理”:0.03分, ...] 累计概率从高到低98% 1% 0.9% 99.9% 已经超过 90% 所以候选范围 [“数学”, “英语”, “语文”]6.解码与输出# 解码生成的文本 generated_text tokenizer.decode(output_sequences[0], skip_special_tokensTrue) print(generated_text)7.结果通过在提示词中提供几个“例子”让模型模仿这些例子的格式和逻辑来完成新的对话。与之前用模板做单轮分类的代码相比这段代码展示的是多轮对话生成。一个用模板包装单条输入一个用示例构建完整对话流体现了transformers库在不同任务上的灵活性。上篇文章中我们只是做了一个ai分类器是判别式的任务在选项里选择这次而是一个对话助手属于生成式任务创造新的合理的句子比之前分类难度是要高一些。