首页 > 其他分享 >开源模型应用落地-chatglm3-6b模型小试-入门篇(二)

开源模型应用落地-chatglm3-6b模型小试-入门篇(二)

时间:2024-04-07 19:33:36浏览次数:20  
标签:6B 模型 ChatGLM3 6b system 对话 小试 top

   一、前言

     刚开始接触AI时,您可能会感到困惑,因为面对众多开源模型的选择,不知道应该选择哪个模型,也不知道如何调用最基本的模型。但是不用担心,我将陪伴您一起逐步入门,解决这些问题。

     在信息时代,我们可以轻松地通过互联网获取大量的理论知识和概念。然而,仅仅掌握理论知识并不能真正帮助我们成长和进步。实践是将理论知识转化为实际技能和经验的关键。

    本章将学习如何在低成本下,使用transformer设置chatglm3-6b模型参数/System Prompt/历史对话

    qwen模型教程入口:

开源模型应用落地-qwen模型小试-入门篇(二)-CSDN博客

    baichuan模型教程入口:

开源模型应用落地-baichuan2模型小试-入门篇(二)-CSDN博客


二、术语

2.1. ChatGLM3

    是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:

  1. 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,* ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能*。
  2. 更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt 格式 ,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
  3. 更全面的开源序列: 除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM3-6B-Base 、长文本对话模型 ChatGLM3-6B-32K 和进一步强化了对于长文本理解能力的 ChatGLM3-6B-128K。以上所有权重对学术研究完全开放 ,在填写 问卷 进行登记后亦允许免费商业使用

2.2. system prompt(系统提示)

    是指在生成对话或文本的任务中,为了引导模型产生合适的响应或输出,对模型进行输入的开头部分或系统提供的指令。系统提示通常包含一些关键信息,如对话的背景、任务的要求或期望的回答风格等,以帮助模型理解上下文并生成相关的响应。通过精心设计和调整系统提示,可以引导模型产生更准确、连贯且符合预期的输出。

2.3. temperature(温度)

    是用于控制生成模型输出的多样性和随机性的一个参数。当温度较高时,模型会更加随机地选择输出,使得生成结果更加多样化和创造性,但可能会牺牲一些准确性和一致性。相反,当温度较低时,模型会更加确定性地选择输出,使得生成结果更加集中和可控。较低的温度值会使概率分布更尖峰,使得高概率的词或标记更容易被选中。

2.4. top_p

    是一种用于控制生成模型输出的参数。在生成文本或对话的任务中,模型通常会输出一个概率分布,表示每个可能的词或标记的概率。top_p参数用于指定一个概率的阈值,模型将从概率累积最高的词开始逐步选择,直到累积概率超过阈值为止。通过设置top_p参数,我们可以控制生成模型输出的多样性和可控性。较小的top_p值会限制模型选择的候选词的数量,使得模型的输出更加集中和可控。较大的top_p值会增加模型选择的候选词的数量,使得模型的输出更加多样化和创造性。

2.5. repetition_penalty

    是一种用于控制生成模型输出中重复内容的参数。在生成文本或对话的任务中,模型有时候可能会倾向于产生重复的词语、短语或句子,导致生成结果的质量下降或显得不够自然。为了解决这个问题,可以使用重复惩罚机制。重复惩罚参数可以调整模型对已经生成过的内容的偏好程度。较高的重复惩罚值会使模型更加抑制生成已经出现过的内容,以鼓励生成更多新颖的内容。较低的重复惩罚值则会相对宽容,允许模型生成一定程度的重复内容。

2.6. history

    "历史上下文"是指在处理当前文本或对话时,与之前的文本或对话相关的信息和语境。历史上下文包括了之前的句子、段落或对话中的内容,以及前文中提到的实体、事件和语义关系等。它提供了理解当前文本的重要背景信息,帮助我们更准确地解释和推断文本的含义。处理历史上下文时,模型需要能够捕捉并记忆之前的信息,并将其与当前文本进行关联,以产生有意义的输出。


三、前置条件

3.1. windows操作系统

3.2. 下载chatglm3-6b模型

从huggingface下载:https://huggingface.co/THUDM/chatglm3-6b/tree/main

从魔搭下载:魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/filesicon-default.png?t=N7T8https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files

 3.3. 创建虚拟环境&安装依赖

conda create --name chatglm3 python=3.10
conda activate chatglm3
pip install protobuf transformers==4.30.2 cpm_kernels torch>=2.0 sentencepiece accelerate

四、技术实现

4.1. 设置system prompt

# 方法一:

    设置role为system的message 

{"role": "system", "content": content}

调用结果:

#方法二:

    采用取巧的方式,在首轮对话中,先提示模型要扮演的角色或对话的风格等等的设定。需要注意,当多轮对话之后,如果历史对话的长度超过上下文的限制长度,则会出现遗忘的情况。

调用结果:

4.2. 设置模型参数

# 在stream_chat方法中设置

stream_chat(tokenizer,message, messages,  max_length=512, top_p=0.1, temperature=0.1, repetition_penalty=1.1,do_sample=True)

max_length=512, top_p=0.1, temperature=0.1, repetition_penalty=1.1,do_sample=True

调用结果:

max_length=512, top_p=0.9, temperature=0.9, repetition_penalty=1.1,do_sample=True

调用结果:

4.3. 设置历史上下文

核心代码:

 for his in history:
    user,assistant = his
    messages.append({"role": "user", "content": user})
    messages.append({"role": "assistant", 'metadata': '', "content": assistant})

调用结果:

User:我家是广东省会吗? Assistant:你家在广州。


五、附带说明

5.1. 模型参数设置

ChatGLM3-6B模型不同于QWen1.5-7B-ChatBaichuan2-7B-Chat,不能在generation_config.json文件或加载模型时设置,说明如下:

 # 在模型目录下的generation_config.json文件中调整参数

文件内容:

# 在模型加载时调整参数

5.2. 完整代码

# -*-  coding = utf-8 -*-
from transformers import AutoTokenizer, AutoModelForCausalLM
import time
import traceback

modelPath = "E:\\model\\chatglm3-6b"

def chat(model, tokenizer, message, history, system):
    messages = []
    if system is not None:
        messages.append({"role": "system", "content": system})

    if history is not None:
        for his in history:
            user,assistant = his
            messages.append({"role": "user", "content": user})
            messages.append({"role": "assistant", 'metadata': '', "content": assistant})

    try:
        for response in model.stream_chat(tokenizer,message, messages,  max_length=512, top_p=0.9, temperature=0.9, repetition_penalty=1.1,do_sample=True):
            _answer,_history = response
            yield _answer

    except Exception:
        traceback.print_exc()

def loadTokenizer():
    tokenizer = AutoTokenizer.from_pretrained(modelPath, use_fast=False, trust_remote_code=True)
    return tokenizer


def loadModel():
    model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="auto",  trust_remote_code=True).eval()
    print(model)
    return model


if __name__ == '__main__':
    model = loadModel()
    tokenizer = loadTokenizer()

    start_time = time.time()

    message = "我家有什么好玩?"
    history = [('hi,你好', '你好!有什么我可以帮助你的吗?'), ('我家在广州,很好玩哦', '广州是一个美丽的城市,有很多有趣的地方可以去。'), ]
    system = "你是一个人工智能助手,擅长解决人类的问题"

    response = chat(model, tokenizer, message,history,system)
    for answer in response:
        print(answer)

    end_time = time.time()
    print("执行耗时: {:.2f}秒".format(end_time - start_time))

标签:6B,模型,ChatGLM3,6b,system,对话,小试,top
From: https://blog.csdn.net/qq839019311/article/details/137242757

相关文章

  • 软件测试最新模型
    软件测试领域随着技术的发展不断演进,新的测试模型和方法不断涌现,以适应不断变化的软件开发需求和提高测试效率。以下是一些最新的软件测试模型:###1.V模型 V模型是瀑布模型的变种,它将测试活动与开发阶段紧密对应。左侧代表开发过程,从需求分析到系统设计、详细设计、编码;右......
  • Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列
    全文链接:https://tecdat.cn/?p=33885原文出处:拓端数据部落公众号本文描述了帮助客户使用马尔可夫链蒙特卡洛(MCMC)方法通过贝叶斯方法估计基本的单变量随机波动模型,就像Kim等人(1998年)所做的那样。定义模型以及从条件后验中抽取样本的函数的代码也在Python脚本中提供。  ......
  • 评估链判定正确答案和模型答案是否一致
    fromlangchain.chainsimportRetrievalQAfromlangchain.evaluationimportQAEvalChainfromlangchain_community.document_loadersimportTextLoaderfromlangchain_community.embeddingsimportOllamaEmbeddingsfromlangchain_community.llms.ollamaimportOllam......
  • 人工智能,应该如何测试?(八)企业级智能客服测试大模型 RAG
    大模型的缺陷–幻觉接触过GPT这样的大模型产品的同学应该都知道大模型的强大之处,很多人都应该调戏过GPT,跟GPT聊很多的天。作为一个面向大众的对话机器人,GPT明显是鹤立鸡群,在世界范围内还没有看到有能跟GPT扳手腕的存在。也许很多人都认为GPT是非常强大的对话机器......
  • 评价类模型——TOPSIS(优劣解距离法) 清风建模笔记
    清风建模TOPSIS说明:优劣解距离法就是求这个数据和最优解的距离、求这个数据和最劣的距离,做比基本过程为先将原始数据矩阵统一指标类型(一般正向化处理)得到正向化的矩阵,再对正向化的矩阵进行标准化处理以消除各指标量纲的影响,并找到有限方案中的最优方案和最劣方案,然后分别......
  • 人工智能,应该如何测试?(七)大模型客服系统测试
    知识引擎我们在生活中应该多多少少接触过对话机器人,比如我们都知道很多客服其实都是机器人先档在前面回答用户问题的,有些机器人有相当程度的知识储备,比如你去买了一辆车,然后想咨询客服这辆车的保险的细节。你就会问:请问车的每年的保险费是多少钱。但很多时候不同的车型,年份......
  • 时间序列分析 #AR模型平稳性的判别
    理解AR模型的定义,能熟练写出AR模型的模型结构和特征方程的表达式;掌握AR模型平稳性判别的三种方法,即图示法、特征根法和平稳域方法。练习1、考察如下四个AR模型的平稳性:利用函数arima.sim或函数filter拟合上述四个序列的序列值,绘制时序图(以2×2的结构排列),并对图形做出解释......
  • 人工智能,应该如何测试?(四)模型全生命周期流程与测试图
    这些日子讲了很多东西,但比较乱,我这里补充一下完整的业务和测试流程。生命周期流程图根据数据闭环,我画出了上面的图,并标记了其中测试人员要参与的活动(浅蓝色)。下面我一一分析一下这些测试活动的含义。离线模型测试阶段:在模型的生命周期中,会涉及到3种数据。训练集,验证集和测......
  • 大模型存储实践:性能、成本与多云
    大模型应用领域的迅猛发展,也推动着基础技术领域持续探索和进步。文件存储服务在AI基础设施中成为不可或缺的重要部分。在过去18个月的时间里,JuiceFS 团队与MiniMax,阶跃星辰,智谱AI,面壁智能,零一万物等大模型团队展开了交流与合作,已经支持了多家客户生产环境中数千卡的训练任......
  • AI大模型探索之路:深度解析Transformer模型底层核心
    1、整体结构在Transformer之前,主要采用RNN(循环神经网络)来处理文本序列数据,当RNN将序列作为输入时,它会逐字处理句子。采用的是一种顺序化的处理,无法并行执行。另外,当此类序列太长时,模型容易忘记序列中远处位置的内容或将其与后续位置的内容混合在一起。Transformer提......