1. 导入库
from mindnlp.transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import gradio as gr
import mdtex2html
mindnlp.transformers
:这是一个与自然语言处理(NLP)相关的库。具体导入的类有:AutoModelForSeq2SeqLM
:自动序列到序列语言模型类,用于加载预训练模型。AutoTokenizer
:自动分词器类,用于加载预训练模型的分词器。
gradio
:一个用于快速搭建机器学习模型Web界面的库。mdtex2html
:一个将Markdown格式的文本转换为HTML格式的库。
2. 加载预训练模型和分词器
model = AutoModelForSeq2SeqLM.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope").half()
model.set_train(False)
tokenizer = AutoTokenizer.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope")
-
加载模型:
model = AutoModelForSeq2SeqLM.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope").half()
from_pretrained
:从预训练模型中加载模型,这里使用的是ZhipuAI/ChatGLM-6B
模型。mirror="modelscope"
:指定下载模型的镜像源为modelscope
。.half()
:将模型参数转换为半精度(float16),可以减少显存使用,提高推理速度。
-
设置模型为评估模式:
model.set_train(False)
set_train(False)
:将模型设置为评估模式,而不是训练模式,这样可以关闭dropout层,并提高推理的稳定性。
-
加载分词器:
tokenizer = AutoTokenizer.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope")
- 同样使用
from_pretrained
方法从ZhipuAI/ChatGLM-6B
模型加载对应的分词器。
- 同样使用
好的,让我们继续解析这段代码的其余部分。
代码解析
3. 定义输入和历史记录
prompt = '你好'
history = []
prompt
:这是给模型的输入提示,这里是一个简单的中文问候语 “你好”。history
:这是一个空列表,用来存储对话的历史记录。在对话系统中,历史记录用于保持对话的上下文。
4. 生成回复
response, _ = model.chat(tokenizer, prompt, history=history, max_length=20)
model.chat
:这个方法使用加载的模型生成对话回复。tokenizer
:用于将文本输入转化为模型可以理解的形式,并将模型输出转化为人类可读的文本。prompt
:模型生成回复时的输入提示。history
:对话历史记录,帮助模型理解上下文,这里是一个空列表,表示没有之前的对话。max_length=20
:生成回复的最大长度,最多生成20个标记(tokens)。
response
:模型生成的回复文本。_
:通常表示一个不需要使用的变量,在这里可能是模型生成回复时的其他信息,比如生成的标记的概率等,但我们并不关心这些信息。
5. 输出回复
response
- 输出模型生成的回复。