开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

 一、前言

    Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念,特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习,模型可以更好地处理未知的情况和新任务,减少对大量标注数据的依赖,提高模型的适应性和灵活性。这对于推动人工智能在现实世界中的应用具有重要意义,尤其是在面对数据稀缺、标注成本高昂或需要快速适应新环境的场景下。


二、术语

2.1. Zero-shot

    在零样本学习中,模型可以从未见过的类别中进行推理或分类。这意味着模型可以使用在其他类别上学到的知识来推广到新的类别,而无需在新类别上进行训练。

2.2. One-shot

    在单样本学习中,模型根据非常有限的样本进行学习。通常情况下,模型只能从每个类别中获得一个样本,并且需要从这个样本中学习如何进行分类。

2.3. Few-shot

    在少样本学习中,模型可以通过很少的样本进行学习,并且能够推广到新的类别。虽然少样本学习的定义没有具体的样本数量限制,但通常指的是模型只能从每个类别中获得很少的样本(例如,几个或几十个)。


三、前置条件

3.1. windows or linux操作系统均可

3.2. 下载chatglm3-6b模型

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

从魔搭下载:魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/fileshttps://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.Zero-Shot

# -*-  coding = utf-8 -*-
from transformers import AutoTokenizer, AutoModelForCausalLM
import time
import tracebackmodelPath = "/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 = hismessages.append({"role": "user", "content": user})messages.append({"role": "assistant", 'metadata': '', "content": assistant})try:for response in model.stream_chat(tokenizer,message, messages,  max_length=2048, top_p=0.9, temperature=0.45, repetition_penalty=1.1,do_sample=True):_answer,_history = responseyield _answerexcept Exception:traceback.print_exc()def loadTokenizer():tokenizer = AutoTokenizer.from_pretrained(modelPath, use_fast=False, trust_remote_code=True)return tokenizerdef loadModel():model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="auto",  trust_remote_code=True).cuda()model = model.eval()# print(model)return modelif __name__ == '__main__':model = loadModel()tokenizer = loadTokenizer()start_time = time.time()message = '''
我希望你根据关系列表从给定的输入中抽取所有可能的关系三元组,并以JSON字符串[{'head':'', 'relation':'', 'tail':''}, ]的格式回答,relation可从列表['父母', '子女', '祖孙', '配偶']中选取,注意不需要返回不相关的内容。
给定输入:2023年,张三和王五结婚生了个女儿,叫王雨菲'''system = '你是一个人工智能助手,很擅长帮助人类回答问题'history = Noneresponse = chat(model, tokenizer, message,history,system)for answer in response:print(answer)end_time = time.time()print("执行耗时: {:.2f}秒".format(end_time - start_time))

调用结果:

4.2.One-Shot

# -*-  coding = utf-8 -*-
from transformers import AutoTokenizer, AutoModelForCausalLM
import time
import tracebackmodelPath = "/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 = hismessages.append({"role": "user", "content": user})messages.append({"role": "assistant", 'metadata': '', "content": assistant})try:for response in model.stream_chat(tokenizer,message, messages,  max_length=2048, top_p=0.9, temperature=0.45, repetition_penalty=1.1,do_sample=True):_answer,_history = responseyield _answerexcept Exception:traceback.print_exc()def loadTokenizer():tokenizer = AutoTokenizer.from_pretrained(modelPath, use_fast=False, trust_remote_code=True)return tokenizerdef loadModel():model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="auto",  trust_remote_code=True).cuda()model = model.eval()# print(model)return modelif __name__ == '__main__':model = loadModel()tokenizer = loadTokenizer()start_time = time.time()message = '''
我希望你根据关系列表从给定的输入中抽取所有可能的关系三元组,并以JSON字符串[{'head':'', 'relation':'', 'tail':''}, ]的格式回答,relation可从列表['父母', '子女', '祖孙', '配偶']中选取,注意不需要返回不相关的内容。
你可以参照以下示例:示例输入:在三十年前的一个风雨交加的夜晚,张三生了个儿子李四。示例输出:{"head": "张三","relation": "父子","tail": "李四"}。
给定输入:2023年,张三和王五结婚生了个女儿,叫王雨菲'''system = '你是一个人工智能助手,很擅长帮助人类回答问题'history = Noneresponse = chat(model, tokenizer, message,history,system)for answer in response:print(answer)end_time = time.time()print("执行耗时: {:.2f}秒".format(end_time - start_time))

调用结果:

4.3.Few-Shot

# -*-  coding = utf-8 -*-
from transformers import AutoTokenizer, AutoModelForCausalLM
import time
import tracebackmodelPath = "/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 = hismessages.append({"role": "user", "content": user})messages.append({"role": "assistant", 'metadata': '', "content": assistant})try:for response in model.stream_chat(tokenizer,message, messages,  max_length=2048, top_p=0.9, temperature=0.45, repetition_penalty=1.1,do_sample=True):_answer,_history = responseyield _answerexcept Exception:traceback.print_exc()def loadTokenizer():tokenizer = AutoTokenizer.from_pretrained(modelPath, use_fast=False, trust_remote_code=True)return tokenizerdef loadModel():model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="auto",  trust_remote_code=True).cuda()model = model.eval()# print(model)return modelif __name__ == '__main__':model = loadModel()tokenizer = loadTokenizer()start_time = time.time()message = '''
我希望你根据关系列表从给定的输入中抽取所有可能的关系三元组,并以JSON字符串[{'head':'', 'relation':'', 'tail':''}, ]的格式回答,relation可从列表['父母', '子女', '祖孙', '配偶']中选取,注意不需要返回不相关的内容。
你可以参照以下示例:示例输入1:在三十年前的一个风雨交加的夜晚,张三生了个儿子李四。示例输出1:{"head": "张三","relation": "父子","tail": "李四"}。示例输入2:小明和小李上个月结婚了。示例输出2:{"head": "小明","relation": "配偶","tail": "小李"}。
给定输入:2023年,张三和王五结婚生了个女儿,叫王雨菲'''system = '你是一个人工智能助手,很擅长帮助人类回答问题'history = Noneresponse = chat(model, tokenizer, message,history,system)for answer in response:print(answer)end_time = time.time()print("执行耗时: {:.2f}秒".format(end_time - start_time))


五、附带说明

5.1.测试结果

    ChatGLM3-6B模型规模相对较小,在关系抽取测试任务中表现一般,在同样的模型参数和测试数据下,QWen1.5-7B-Chat的表现会更加优异,在Zero-Shot场景下,也有较好的表现。具体测试情况如下:

Zero-Shot:基本能识别出关系三元组,同时返回较多无效内容

One-Shot:能准确识别出关系三元组,且无返回无效内容

Few-Shot:能准确识别出关系三元组,且无返回无效内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/614942.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带函数的多代理 AutoGen - 使用代码示例分步

目录 一、说明二、AutoGen 的本质:可对话和可定制的代理2.1 简化任务自动化和人机交互2.2 赋能动态对话 三、分步代码示例3.1 第 1 步:安装必要的库3.2 第 2 步:设置 API 终端节点3.3 第 3 步:导入库并设置配置3.4 第 4 步&#…

JavaScript函数式编程

函数式编程 课程介绍 为什么要学习函数编程以及什么是函数式编程函数式编程的特性(纯函数、柯里化、函数组合等)函数式编程的应用场景函数式编程库Lodash 为什么要学习函数式编程 函数式编程是非常古老的一个概念,早于第一台计算机的诞生, 函数式编程…

c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 1. 游戏背景 贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅…

如何做好软件平台的全生命周期管理?

一、为何需生命周期管理 做好软件平台的全生命周期管理至关重要,主要原因如下: 确保软件质量: 全生命周期管理涵盖了从需求分析、设计、开发、测试、部署、运行维护到废弃的全过程,通过有效的管理可以确保每个阶段的质量控制&…

Linux-docker安装数据库redis

1.拉取redis镜像 docker pull redis # 下载最新的redis版本 docker pull redis:版本号 # 下载指定的redis版本ps:我这是已经下载最新版本的redis 2.查看redis镜像 docker images3.创建挂在路径并授权 mkdir -p /usr/local/redis/data mkdir -p /usr/local…

【贡献者列表】如何为你的文档添加贡献者头像

相关pr: https://github.com/ant-design/ant-design-web3/pull/790 源码仓库: https://github.com/thinkasany/contributors-list 使用代码 npm i github-contributors-lists使用效果 实现原理 通过 github api https://api.github.com/repos/${owner}/${repo…

C/C++内存泄漏及检测

“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用…

RCTKG:针对用户的罕见病临床试验知识图谱

RCTKG:针对用户的罕见病临床试验知识图谱 提出背景构建方法RCTKG 介绍 提出背景 RCTKG 论文:https://ebooks.iospress.nl/doi/10.3233/SHTI230934 RCTKG 平台:http://54.205.155.56:7474/browser/ 罕见病检索平台:PubCaseFinde…

如何在极狐GitLab 使用Docker 仓库功能

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…

C# Solidworks二次开发:Pack And Go相关API详解(第二讲)

大家好,今天要介绍的是和打包相关的API,之前讲过一篇文章是关于打包时候的注意事项,这里就不再介绍了,有需要的家人可以访问前一个文章: C# Solidworks二次开发:Pack and Go打包时需要注意的地方&#xff…

设计模式代码实战-抽象工厂模式

1、问题描述 小明家新开了两个工厂用来生产家具,一个生产现代风格的沙发和椅子,一个生产古典风格的沙发和椅子,现在工厂收到了一笔订单,请你帮他设计一个系统,描述订单需要生产家具的信息。 输入试例: 3 …

lv_micropython to download and building

想要在ESP32-C3使用Micropython开发GUI,所以需要编译lv_micropython,当前github上的版本是9.1.0。 一、开发环境 因为编译lv_micropython需要在linux系统下,但是我的电脑是windows系统,所以我在windows系统上安装了VMware虚拟机&…