NLP实践——Llama-2 多轮对话prompt构建
NLP实践——Llama-2 多轮对话prompt构建
- 1. 问题提出
- 2. prompt的正确形式
- 3. 效果测试
- 4. 结尾
1. 问题提出
最近,META开源了Llama-2模型,受到了广泛的关注和好评,然而,在官方给的使用说明中,并没有对使用方法进行特别细节的介绍,尤其是对于对话任务,这就给我们在使用时带来了很多困扰。
以ChatGLM为例,在执行多轮对话时,需要将历史信息拼接到输入中,以供模型在生成时计算历史token与当前query之间的交互(self-attn):
# ChatGLM中对话prompt的产生:prompt = ""for i, (old_query, response) in enumerate(history_input):prompt += "[Round {}]\n问:{}\n答:{}\n".format(i, old_query, response)prompt += "[Round {}]\n问:{}\n答:".format(len(history_input), query_input)
所以可以很自然的想到,如果使用Llama-2模型进行对话,应该也有这样一套模板,与训练过程中的对话形式相匹配。
于是经过简单的搜索后,在reddit论坛找到了Llama-2官方所提供的说明:
https://www.reddit.com/r/LocalLLaMA/comments/155po2p/get_llama_2_prompt_format_right/
2. prompt的正确形式
根据官方账号给出的说明,在对话时,用户所提供的prompt应当满足以下形式:
<s>[INST] <<SYS>>
{{ system_prompt }}
<</SYS>>{{ user_message }} [/INST]
其中,<s>,<\s>,<<SYS>>,<</SYS>>,[INST],以及[/INST]是特殊token,标记着prompt中各个部分的构成。
{{ system_prompt }}部分是整个对话中的通用前缀,一般用来给模型提供一个身份,作为对话的大背景。
{{ user_message }}部分是用户所提供的信息,可以理解为多轮对话中其中一轮对话的内容。
并且,其给出了一个样例:
<s>[INST] <<SYS>>
You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.
<</SYS>>There's a llama in my garden 😱 What should I do? [/INST]
然而,这个简单的样例并不能很好的反映多轮对话的场景,因为它只描述了用户怎样提供第一轮输入,对于几个特殊token如何使用,也没有很好的说明。
幸运的是,在评论区有用户@Evening_Ad6637给出了更加完整的样例以供我们参考:
假设输入是以下形式的对话:
<s>[INST] <<SYS>>You are are a helpful... bla bla.. assistant<</SYS>>Hi there! [/INST] Hello! How can I help you today? </s><s>[INST] What is a neutron star? [/INST] A neutron star is a ... </s><s> [INST] Okay cool, thank you! [/INST]
那么当这个整体作为prompt输入给模型去进行generate时,模型的输出应该是类似于You're welcome! 之类的话。
更详细的解释一下:
-
- 每一组
<s>和</s>之间是一个相对完整的单元,可以理解为一个对话轮次(如果直接给一个文本作为输入,也可以看到模型的输入结果分别是以这两个BOS和EOS token作为结尾的)。
- 每一组
-
[INST]和[/INST]用于区分在当前这一轮的对话(历史)中,用户输入的部分与模型返回的部分。位于[INST]之后,/[INST]之前的文本,是用户在这一轮次对话中所输入的query,而/[INST]之后的文本,是模型针对这一query所作出的回答。
-
- 在对话中的第一组单元,可以提供整个对话的背景信息,并以
<<SYS>>和<</SYS>>作为特殊标记,位于它们之间的,是对话的背景信息。
- 在对话中的第一组单元,可以提供整个对话的背景信息,并以
-
- 需要额外注意,有些特殊标记与文本之间是有空格的,容易遗漏。
3. 效果测试
为了验证prompt是否有效,我们做一个简单的实验,场景是询问动物相关的问题。
(1)首先假设Llama-2模型是一个动物学家,以此作为背景:
You are a zoologist, you will answer my questions about animals.
(2)然后提供一轮对话历史:
- What is an elephant?
- Ah, an excellent question! Elephants are fascinating creatures, and I'm happy to share my knowledge with you.\nAn elephant is a large, intelligent, and social mammal that belongs to the family Elephantidae.
(3)接下来,提供新一轮对话的query
How much does it weigh?
注意,在这里我回避了使用elephant这个词,而是直接用it进行指代。
(4)完整的prompt
根据前文所述的prompt格式,可以将当前轮次输入给模型进行generate的完整prompt构造如下:
text = """<s>[INST] <<SYS>>
You are a zoologist, you will answer my questions about animals.
<</SYS>>What is an elephant? [/INST] Ah, an excellent question! Elephants are fascinating creatures, and I'm happy to share my knowledge with you.\nAn elephant is a large, intelligent, and social mammal that belongs to the family Elephantidae.</s><s>[INST] How much does it weigh? [/INST]"""
(5)返回结果
经过generate(生成参数为:{“max_length”: 4096, “num_beams”: 3, “temperature”: 0.9})并解码之后,模型生成结果为:
"<s><s> [INST] <<SYS>>\nYou are a zoologist, you will answer my questions about animals. \n<</SYS>>\n\nWhat is an elephant? [/INST] Ah, an excellent question! Elephants are fascinating creatures, and I'm happy to share my knowledge with you.\nAn elephant is a large, intelligent, and social mammal that belongs to the family Elephantidae.</s><s> [INST] How much does it weigh? [/INST] Great question! The weight of an elephant can vary depending on the species and the individual animal. Here are the average weights for the two main species of elephants:\n* African elephants: Males typically weigh between 5,000 to 14,000 pounds (2,268 to 6,350 kilograms), while females weigh between 4,000 to 9,000 pounds (1,814 to 4,082 kilograms).\n* Asian elephants: Males typically weigh between 3,000 to 6,000 pounds (1,361 to 2,722 kilograms), while females weigh between 2,000 to 3,000 pounds (907 to 1,361 kilograms).\nIt's worth noting that these are just averages, and individual elephants can vary significantly in weight depending on various factors such as age, sex, and nutrition.</s>"
可以看到对话的效果还是不错的,可以比较好的回答出当前轮次关于大象体重的问题。
4. 结尾
本文介绍了如何构建Llama多轮对话的prompt,以适应模型的训练过程中的结构。如果需要搭建一个对话工具,还需要进行一些其他额外的工作,例如对模型生成结果进行截断、对中间kv进行缓存等。
chat与stream_chat的实现可以参考chatGLM的写法:
https://huggingface.co/THUDM/chatglm2-6b/blob/main/modeling_chatglm.py
如何在对话过程中进行显存控制,可以参考我之前的这一篇博客:
https://blog.csdn.net/weixin_44826203/article/details/130401177
此外,还有关于特殊token的一点小疑问,我实验过程中所使用的Llama-2-7b-chat-hf模型,只将<s>和<\s>列为了特殊token,而<<SYS>>,<</SYS>>,[INST],以及[/INST]都只是普通字符,在tokenize的时候会被切分开,不知道是我用错了模型还是什么其他的原因,希望官方在后续能够提供更加详细的说明介绍。
如果本文对你的学习和工作有所帮助的话,记得点一个免费的赞。转载请注明出处。
相关文章:
NLP实践——Llama-2 多轮对话prompt构建
NLP实践——Llama-2 多轮对话prompt构建 1. 问题提出2. prompt的正确形式3. 效果测试4. 结尾 1. 问题提出 最近,META开源了Llama-2模型,受到了广泛的关注和好评,然而,在官方给的使用说明中,并没有对使用方法进行特别细…...
《TCP IP网络编程》第十四章
第 14 章 多播与广播 14.1 多播 多播(Multicast)方式的数据传输是基于 UDP 完成的。因此 ,与 UDP 服务器端/客户端的实现方式非常接近。区别在于,UDP 数据传输以单一目标进行,而多播数据同时传递到加入(注…...
网络基础-认识每层的设备和每层的特点用途
目录 网络层次常见设备各层介绍数据链路层网络层传输层应用层 网络层次 常见设备 各层介绍 数据链路层 有了MAC地址。数据链路层工作在局域网中的,以帧为单位进行传输和处理数据。 网络层 网络层有了IP。不同的网络通过路由器连接成为互联网 路由器的功能: …...
【Linux操作系统】深入解析Linux定时任务调度机制-cronat指令
在Linux操作系统中,定时任务调度是一项重要的功能,它可以让用户在指定的时间或周期性地执行特定的任务。这种机制使得用户能够自动化地执行一些重复性工作,提高工作效率。本文将详细介绍Linux定时任务调度的原理、常用指令和代码示例…...
动手学深度学习(一)预备知识
目录 一、数据操作 1. N维数组样例 2. 访问元素 3. 基础函数 (1) 创建一个行向量 (2)通过张量的shape属性来访问张量的形状和元素总数 (3)reshape()函数 (4)创建全0、全1、…...
item_get-KS-获取商品详情
一、接口参数说明: item_get-根据ID取商品详情 ,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/ks/item_get 名称类型必须描述keyString是调用key(http://o0b.cn/…...
[华为OD] 最小传输时延(dijkstra算法)
明天就要面试了我也太紧张了吧 但是终于找到了一个比较好理解的dijkstra的python解法,让我快点把它背下来!!!! 文章目录 题目dijkstra算法的python实现python解答dfs解法dijkstra解法 题目 先把题目放出来 某通信网络…...
问道管理:总资产大于总市值好吗?
在财政领域,总财物和总市值是两个非常重要的指标。总财物是指公司所有的财物,包括固定财物、流动财物、无形财物等,而总市值则是指公司股票在商场上的总价值。当总财物大于总市值时,这是否是一个好的信号呢?咱们将从多…...
IBM Spectrum LSF (“LSF“ ,简称为负载共享设施) 用户案例
IBM Spectrum LSF (“LSF” ,简称为负载共享设施) 用户案例 IBM Spectrum LSF (“LSF” ,简称为负载共享设施) 软件是业界领先的企业级软件。 LSF 在现有异构 IT 资源之间分配工作,以创建共享,可扩展且容错的基础架构,…...
Pytorch深度学习-----神经网络之非线性激活的使用(ReLu、Sigmoid)
系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Co…...
Gis入门,使用起止点和两个控制点生成三阶贝塞尔曲线(共四个控制点,线段转曲线)
前言 本章讲解如何在gis地图中使用起止点和两个控制点(总共四个控制点)生成三阶贝塞尔曲线。 二阶贝塞尔曲线请参考上一章《Gis入门,如何根据起止点和一个控制点计算二阶贝塞尔曲线(共三个控制点)》 贝塞尔曲线(Bezier curve)介绍 贝塞尔曲线(Bezier curve)是一种…...
Web-7-深入理解Cookie与Session:实现用户跟踪和数据存储
深入理解Cookie与Session:实现用户跟踪和数据存储 今日目标 1.掌握客户端会话跟踪技术Cookie 2.掌握服务端会话跟踪技术Sesssion 1.会话跟踪技术介绍 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断…...
Springboot设置Https
1、修改配置文件application.yml,并将*.jks放到resource目录下。 server:port: 8080ssl:key-store: classpath:*.jkskey-store-password: *key-store-type: JKSenabled: truekey-alias: boe.com.cn2、添加http转https的配置 Configuration public class TomcatCon…...
Windows 使用 Linux 子系统,轻轻松松安装多个linux
Windows Subsystem for Linux WSL 简称WSL,是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机&#…...
中级课程——弱口令(认证崩溃)
文章目录 什么是弱口令密码生成器分类暴力破解万能密码测试环境工具 什么是弱口令 密码生成器 分类 暴力破解 万能密码 or true --测试环境 工具 九头蛇,超级弱口令爆破工具,bp,...
web自动化测试进阶篇05 ——— 界面交互场景测试
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...
NICE-SLAM: Neural Implicit Scalable Encoding for SLAM论文阅读
论文信息 标题:NICE-SLAM: Neural Implicit Scalable Encoding for SLAM 作者:Zihan Zhu, Songyou Peng,Viktor Larsson — Zhejiang University 来源:CVPR 代码:https://pengsongyou.github.io/nice-slam…...
cmake 配置Visual studio的调试命令
配置代码如截图: set_property(TARGET ${TARGET_NAME} PROPERTY VS_DEBUGGER_COMMAND "./consoleTest.exe") set_property(TARGET ${TARGET_NAME} PROPERTY VS_DEBUGGER_COMMAND_ARGUMENTS "./config/labelDriver.cfg") set_propert…...
MPDIoU: A Loss for Efficient and Accurate Bounding BoxRegression--论文学习笔记
超越GIoU/DIoU/CIoU/EIoU MPDIoU让YOLOv7和YOLACT双双涨点 目标检测上的指标对比: 论文地址: [2307.07662] MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression (arxiv.org) 摘要 边界框回归(Bounding Box Regression&am…...
【Uniapp 的APP热更新】
Uniapp 的APP热更新功能依赖于其打包工具 HBuilder,具体步骤如下: 1. 在 HBuilder 中构建并打包出应用程序 具体步骤: 1.点击发行,点击制作wgt包 2.根据需求修改文件储存路径和其他配置,点击确定 3.等待打包完成&a…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...
