LLM模型的generate和chat函数区别

news/2024/12/20 0:25:17/

  在 Hugging Face 的 transformers 库中,GPT(Generative Pre-trained Transformer)类的模型有两个常用的生成文本的方法:generatechat。这两个方法在使用上有一些区别。通常公司发布的 LLM 模型会有一个基础版本,还会有一个 Chat 版本。比如,Qwen-7B(基础版本)和 Qwen-7B-Chat(Chat 版本)。

generate_strong_2">1. generate 方法

  • generate 方法是模型的原生方法,用于生成文本。
  • 通常用于批量生成文本数据,可以根据特定的输入和条件生成一组文本。
  • 使用时需要传递一些参数,如 max_length(生成文本的最大长度)、num_beams(束搜索的数量,用于增强生成的多样性)等。
from transformers import GPT2LMHeadModel, GPT2Tokenizermodel_name = "gpt2"
model = GPT2LMHeadModel.from_pretrained(model_name)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)input_text = "Once upon a time,"
generated_text = model.generate(tokenizer.encode(input_text, return_tensors="pt"), max_length=50, num_beams=5)[0]
print(tokenizer.decode(generated_text, skip_special_tokens=True))

chat_strong_20">2. chat 方法

  • chat 方法是一个高级的便捷方法,通常用于模拟对话。
  • 提供了更简单的用户交互方式,以模拟对话流程,尤其在聊天式应用中更为方便。
  • 它内部调用了 generate 方法,但提供了更加简化的输入输出接口。
from transformers import GPT2LMHeadModel, GPT2Tokenizermodel_name = "gpt2"
model = GPT2LMHeadModel.from_pretrained(model_name)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)chat_history = [{'role':'system', 'content':'You are a helpful assistant.'},{'role':'user', 'content':'Who won the world series in 2020?'},{'role':'assistant', 'content':'The Los Angeles Dodgers won the World Series in 2020.'},
]user_input = "Who won the Super Bowl in 2021?"
chat_history.append({'role':'user', 'content':user_input})# 使用 chat 方法进行对话
response = model.chat(chat_history)
print(response)

  总体来说,generate 方法更加灵活,适用于更多的生成任务,而 chat 方法则提供了更高级别、更易于使用的接口,适用于聊天式应用中。选择使用哪个方法通常取决于你的具体需求和使用场景。


http://www.ppmy.cn/news/1556513.html

相关文章

实名应用分发平台的详细分析

实名的应用分发平台是指那些要求开发者或应用程序提供者进行真实身份信息认证的应用程序分发平台。这种认证机制通常是为了确保平台上的应用程序来源可靠、内容合法,并保护用户的权益和安全。以下是对实名应用分发平台的详细分析: 一、背景与目的 背景…

【ORACLE】一个允许关键字作为别名所引起的语法歧义场景

前言 最近在看SQL语法解析器,发现了antlr4提供的PlSql语法树存在一个BUG,然后我顺着这个BUG,构造了一条SQL,在ORACLE执行,如下 然后神奇的事情出现了,这个查询竟然没有返回行!t1表左关联t2&…

Windows如何安装go环境,离线安装beego

一、安装go 1、下载go All releases - The Go Programming Language 通过网盘分享的文件:分享的文件 链接: https://pan.baidu.com/s/1MCbo3k3otSoVdmIR4mpPiQ 提取码: hxgf 下载amd64.zip文件,然后解压到指定的路径 2、配置环境变量 需要新建两个环境…

【ArcGIS】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

第一章、以问题导入的方式,深入掌握原理基础【理论篇】 1、R语言入门: (1)安装R及集成开发环境(IDE);(2)R语言基础语法与数据结构,包括:程序包安…

canal详解及demo

提示:如何保证Redis中的数据与数据库中的数据一致性?数据同步canal的介绍和demo、大型企业如何实现mysql到redis的同步?使用binlog实时更新redis缓存、canal的接入教程、win下canal的服务器端、canal客户端的创建、连接、测试教程、数据同步方…

idea | maven项目标红解决方案 | 强制刷新所有依赖

场景:父pom多模块,新增时,依赖正常,但是application.yml看起来没被springboot识别,试过rebuild、重开idea清除缓存,重新maven面板reload all maven projects, 试过pom文件的依赖先移除再重新粘贴导入进来&a…

在 Linux 下,将 shell 脚本打包成二进制程序

在 Linux 下,将 shell 脚本打包成二进制程序并不是一个直接的过程,因为 shell 脚本本质上是文本文件,由 shell 解释器执行。不过,你可以使用几种方法来实现类似的目的: ### 1. 使用 shc 工具 shc 是一个可以将 shell…

用python实现滑雪小游戏,附源码

一个简单的基于文本的滑雪小游戏示例代码,在这个游戏中玩家控制一个滑雪者在有障碍物的雪道上滑行,尽量避开障碍物并获取更高的分数。 ● Skier类表示滑雪者,有位置属性和移动、转向方法。 ● Obstacle类表示障碍物,有位置属…