当前位置: 首页 > news >正文

【大模型】大模型指令微调的“Prompt”模板

文章目录

  • 一、微调数据集格式
  • 二、常用的指令监督微调模板
    • 2.1 指令跟随格式(Alpaca)
    • 2.2 多轮对话格式(ShareGPT)
    • 2.3 其他形式
    • 2.4 常见模板
  • 参考资料

一、微调数据集格式

在进行大模型微调的过程中,我们会发现“Prompt”格式太多。不同的模型对应不同的微调数据集,不同数据集的指令数据形式有所不同。

  • yahma / alpaca-cleaned :这是斯坦福大学发布的原始 alpaca 数据集的清理版本,包含有约52K条数据。数据集主页:https://huggingface.co/datasets/yahma/alpaca-cleaned
    在这里插入图片描述

  • Open-Orca / OpenOrca
    在这里插入图片描述

二、常用的指令监督微调模板

指令监督微调(Instruct Tuning) 通过让模型学习详细的指令以及对应的回答来优化模型在特定指令下的表现。

目前常见微调数据集的格式包括以下几种:

  • 指令跟随格式:以Alpaca为代表
  • 多轮对话格式:以ShareGPT为代表
  • 其他辅助格式:文本数据等

2.1 指令跟随格式(Alpaca)

指令跟随形式是指用户输入指令,模型按照指令的要求输出结果的格式。这种形式的数据集通常采用json文件格式存储,典型的如Alpaca-52k数据集。Alpaca-52k是一个开源的遵循指令的,最初用来微调LLaMA模型以得到Alpaca-7B模型的数据集,包含了52k条指令数据。

Alpaca的格式有两类,一类是instruction/output格式,另一类是 instruction / input / output 格式。各列的含义如下:

  • instruction:对应的内容为人类指令
  • input:对应的内容为人类输入
  • output:对应的内容为模型回答。

数据样例来自:https://github.com/hiyouga/LLaMA-Factory/blob/main/data/alpaca_zh_demo.json/#L42

(1)instruction / output 格式

  {"instruction": "用“黎明”、“天空”和“广阔”这三个词组成一个句子。","output": "随着黎明的到来,天空逐渐明亮,一片广阔的视野展现在眼前。"}

(2) instruction / input / output 格式

  {"instruction": "计算这些物品的总费用。 ","input": "输入:汽车 - $3000,衣服 - $100,书 - $20。","output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"}

在进行指令监督微调时, instruction 列对应的内容会与 input 列对应的内容拼接后作为最终的人类输入,即人类输入为 instruction\ninput。而 output 列对应的内容为模型回答。

然而,由于生成Alpaca数据集的 self-instruct 技术得到的数据集本身存在一些瑕疵,因此数据集需要进一步清洗和改进,例如 alpaca-cleanedalpaca-gpt4 都是基于原始数据集清洗后的数据集。此外还有中文翻译版本。这些数据集通常包含几万个指令对,文件大小约为40MB左右的json格式文件。

2.2 多轮对话格式(ShareGPT)

多轮对话形式是指用户和模型之间以对话的形式进行,模型将通过与用户进行多轮的交互最终来达到用户的需求。典型的如训练Vicuna模型所使用的 ShareGPT 数据集。

ShareGPT本身是一个与ChatGPT(GPT-4)模型的聊天记录分享平台,它托管了大量由用户挑选的对话数据集,这些聊天记录通常展示的是聊天机器人自然流畅、具有创意的回答。Vicuna模型通过收集该平台的数据,其训练出来的模型具有较好的多轮对话能力。

相比 alpaca 格式的数据集, sharegpt 格式支持 更多 的角色种类,例如 humangptobservationfunction 等等。它们构成一个对象列表呈现在 conversations 列中。 下面是 sharegpt 格式的一个例子:

{"conversations": [{"from": "human","value": "你好,我出生于1990年5月15日。你能告诉我我今天几岁了吗?"},{"from": "function_call","value": "{\"name\": \"calculate_age\", \"arguments\": {\"birthdate\": \"1990-05-15\"}}"},{"from": "observation","value": "{\"age\": 31}"},{"from": "gpt","value": "根据我的计算,你今天31岁了。"}],"tools": "[{\"name\": \"calculate_age\", \"description\": \"根据出生日期计算年龄\", \"parameters\": {\"type\": \"object\", \"properties\": {\"birthdate\": {\"type\": \"string\", \"description\": \"出生日期以YYYY-MM-DD格式表示\"}}, \"required\": [\"birthdate\"]}}]"
}

注意其中 human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置。

[{"conversations": [{"from": "human","value": "人类指令"},{"from": "function_call","value": "工具参数"},{"from": "observation","value": "工具结果"},{"from": "gpt","value": "模型回答"}],"system": "系统提示词(选填)","tools": "工具描述(选填)"}
]

2.3 其他形式

除了上述提到的数据格式,还有一些数据格式不易转化为对话形式,例如纯文本文档。另外,还有一些针对特定用途的数据集,例如文本总结数据集以及根据纯文本生成对话的数据集,如RefGPT文章提到的方案。根据文本的不同功能,它们还包括调用API的格式和调用数据库语言的格式等。

当然,除非以纯文本的形式存在,否则这些格式都可以转换为指令跟随或多轮对话的格式。 下面给出两个具体的示例:

  • 纯文本数据集
    大语言模型通过学习未被标记的文本进行预训练,从而学习语言的表征。通常,预训练数据集从互联网上获得,因为互联网上提供了大量的不同领域的文本信息,有助于提升模型的泛化能力。 预训练数据集文本描述格式如下:
[{"text": "document"},{"text": "document"}
]

在预训练时,只有 text 列中的 内容 (即document)会用于模型学习。

  • 偏好数据集
    偏好数据集用于奖励模型训练、DPO 训练和 ORPO 训练。对于系统指令和人类输入,偏好数据集给出了一个更优的回答和一个更差的回答。偏好数据集需要在 chosen 列中提供更优的回答,并在 rejected 列中提供更差的回答。
    基于 Alpaca 的偏好数据集,在一轮问答中其格式如下:
[{"instruction": "人类指令(必填)","input": "人类输入(选填)","chosen": "优质回答(必填)","rejected": "劣质回答(必填)"}
] 

2.4 常见模板

参考博客:[NLP]LLM—大模型指令微调中的“Prompt”

参考资料

  • [NLP]LLM—大模型指令微调中的“Prompt”
  • LLaMA Factory-数据处理
http://www.lryc.cn/news/418093.html

相关文章:

  • Spring的设计模式----工厂模式及对象代理
  • 【算法】浅析广度优先搜索算法
  • 分布式时序数据库TimeLyre 9.2发布:原生多模态、高性能计算、极速时序回放分析
  • PMP考试题库每日五题+答案解析
  • 机器学习用python还是R,哪个更好?
  • 【数据结构】mapset详解
  • 数据结构(邓俊辉)学习笔记】词典 02—— 散列函数
  • Python学习(1):使用Python的Dask库实现并行计算
  • 数据结构 - 哈希表
  • 电商选品这几点没做好,等于放弃80%的流量!
  • 【教程】最新可用!Docker国内镜像源列表
  • 使用RabbitMQ在Spring Boot入门实现简单的消息的发送与接收
  • 基于物联网的水质监测系统设计与实现:React前端、Node.js后端与TCP/IP协议的云平台集成(代码示例)
  • Vcpkg安装指定版本包或自定义安装包
  • 【C++深度探索】红黑树实现Set与Map的封装
  • 终于有人把客户成功讲明白了
  • [新械专栏] 肾动脉射频消融仪及一次性使用网状肾动脉射频消融导管获批上市
  • leetcode-119-杨辉三角II
  • 【第八节】python正则表达式
  • 三大浏览器Google Chrome、Edge、Firefox内存占用对比
  • 【wiki知识库】08.添加用户登录功能--后端SpringBoot部分
  • vue中nextTick的作用
  • 计算机网络面试-核心概念-问题理解
  • go语言创建协程
  • RabbitMQ之基于注解声明队列交换机:使用@RabbitListener实现消息监听
  • 【grafana 】mac端grafana配置的文件 grafana.ini 及login
  • 程序员如何在人工智能时代保持核心竞争力
  • 回溯排列+棋盘问题篇--代码随想录算法训练营第二十三天| 46.全排列,47.全排列 II,51. N皇后,37. 解数独
  • ESXI加入VMware现有集群提示常规性错误
  • 数字噪音计(声级计)【AR814数字噪音计】