大模型的常用指令格式 --> ShareGPT 和 Alpaca (以 llama-factory 里的设置为例)

  1. ShareGPT 格式
    提出背景:ShareGPT 格式起初来自于用户在社交平台上分享与聊天模型的对话记录,这些记录涵盖了丰富的多轮对话内容。研究者们意识到,这类真实的对话数据可以帮助模型更好地学习多轮对话的上下文保持、回应生成等能力。因此,ShareGPT 格式逐渐被用于多轮对话的指令微调。
    目标:帮助模型理解复杂的多轮交互,提升模型的对话连贯性、上下文一致性和信息检索能力。
    主要应用:ShareGPT 格式应用于需要模拟自然对话流的场景,例如聊天机器人、客服问答、陪伴式 AI 助手等。其设计结构支持用户与助手之间交替对话的记录,适合训练多轮对话模型。
  2. Alpaca 格式
    提出背景:Alpaca 格式由斯坦福大学的研究人员在 2023 年提出,他们旨在通过一种低成本的方式对大型语言模型进行指令微调。Alpaca 项目使用 OpenAI 的 GPT-3.5 模型生成了大量指令数据,并采用简化的格式——instruction、input 和 output 字段——来表述单轮任务。这个结构化的指令-响应格式使模型可以专注于对特定任务的理解。
    目标:Alpaca 格式的设计重点在于让模型理解明确的任务指令,以便模型在接到特定任务时能生成更精确的响应。
    主要应用:Alpaca 格式被广泛应用于以任务为导向的指令微调任务中,尤其适合单轮任务(如总结、翻译、问答等),并不依赖多轮对话上下文,结构简洁且任务导向清晰。
    总结
    ShareGPT:适用于多轮对话微调,背景是对多轮自然对话数据的需求。
    Alpaca:适用于单轮指令微调,背景是低成本的指令微调需求,通过简单的指令-响应结构实现任务定向训练。

dataset_info.json 包含了所有经过处理的 本地数据集 和 在线数据集。如果使用本地数据集, 务必在 dataset_info.json 中添加对应数据集及其内容的定义

目前支持 Alpaca 格式 和 ShareGPT 的格式

1.Alpaca

针对不同任务,数据集格式要求如下:

  • 指令监督微调
  • 预训练
  • 偏好训练
  • KTO
  • 多模态

1.指令监督微调

  1. 样例如下

    在这里插入图片描述

  2. 解释

    1. instruction 对应的内容是人类指令

    2. input 对应内容是人类输入

    3. output 对应内容是模型回答

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

    4. 如果指定 system 列,对应内容将被作为系统提示词

    5. history 列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意,在指令监督微调时,历史消息中的回答内容也会被用于模型学习

  3. 最终指令微调的格式要求如下

    [{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","system": "系统提示词(选填)","history": [["第一轮指令(选填)", "第一轮回答(选填)"],["第二轮指令(选填)", "第二轮回答(选填)"]]}
    ]
    
    • 样例如下

      [{"instruction": "今天的天气怎么样?","input": "","output": "今天的天气不错,是晴天。","history": [["今天会下雨吗?","今天不会下雨,是个好天气。"],["今天适合出去玩吗?","非常适合,空气质量很好。"]]}
      ]
      
  4. 对于上述的数据,dataset_info.json 的数据集描述应为

    "数据集名称": {"file_name": "data.json","columns": {"prompt": "instruction","query": "input","response": "output","system": "system","history": "history"}
    }
    

2.预训练数据

  1. 样例如下

    在这里插入图片描述

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

    [{"text": "document"},{"text": "document"}
    ]
    
  3. 在预训练的时候,只有 text 列中的内容(document)会用于模型学习

  4. 对于上述数据,dataset_info.json 的数据集描述为

    "数据集名称": {"file_name": "data.json","columns": {"prompt": "text"}
    }
    

3.偏好数据集

偏好数据集用于奖励模型训练、DPO训练 和 ORPO 训练。对于系统指令和人类输入,偏好数据集给出了一个更优的回答和一个更差的回答。

一些研究 表明通过让模型学习“什么更好”可以使得模型更加迎合人类的需求。 甚至可以使得参数相对较少的模型的表现优于参数更多的模型。

  1. 偏好数据集需要在 chosen 列中提供更优的回答,并在 rejected 中提供更差的回答,在一轮问答中,格式如下

    [{"instruction": "人类指令(必填)","input": "人类输入(选填)","chosen": "优质回答(必填)","rejected": "劣质回答(必填)"}
    ]
    
  2. dataset_info.json 的数据集描述为:

    "数据集名称": {"file_name": "data.json","ranking": true,"columns": {"prompt": "instruction","query": "input","chosen": "chosen","rejected": "rejected"}
    }
    

DPO(Direct Preference Optimization)和 ORPO(Off-Policy Preference Optimization)是两种用于偏好优化的训练方法,主要用于提升语言模型对用户偏好的响应能力。它们在强化学习(RLHF, Reinforcement Learning with Human Feedback)框架下使用。

1. DPO(Direct Preference Optimization):

  • 目标: 直接通过用户反馈优化模型输出的偏好,使模型更加符合用户的选择。
  • 方法: 不使用强化学习的奖励建模,而是直接在训练数据中根据人类偏好来优化。通过给定两种生成结果,用户给出偏好,模型学习去优化自己生成更符合偏好的结果。
  • 优点: 不依赖复杂的奖励函数设计,直接根据人类偏好进行优化,训练过程简单且高效。
  • 适用场景: 适合场景是有明确的偏好数据并且希望快速迭代和调整模型的偏好输出。

2. ORPO(Off-Policy Preference Optimization):

  • 目标: 在偏离当前策略的数据上,使用偏好信息优化模型,使其在长期上更加符合用户的期望。
  • 方法: 利用“离线”策略的偏好反馈,通过基于强化学习的优化手段来调整模型。 ORPO 使用先前收集的数据进行优化,而不需要像 DPO 那样直接使用偏好进行梯度优化。它与 DPO 不同的是,模型可以在已经采集好的数据上进行偏好训练,不需要实时获取偏好反馈。
  • 优点: 更适合在大规模历史数据上进行训练,训练更为稳健,可以更好地处理复杂的偏好优化问题。
  • 适用场景: 适合有大量历史偏好数据的情况,尤其是难以获取实时偏好反馈的场景。

两者主要区别在于:

  • DPO 是一种直接基于偏好梯度进行优化的策略,而 ORPO 通过强化学习的方式,在离线数据上进行优化。

4.KTO 数据集

KTO 数据集与偏好数据集类似,但不同于给出一个更优的回答和一个更差的回答,KTO 数据集对每一轮问答只给出一个 true/false 的 label。除了 instruction 以及 input 组成的人类最终输入和模型回答 output,KTO 数据集还需要一个额外的 kto_tag 列(true/false) 来表示人类反馈

  1. 一轮问答中的格式如下

    [{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","kto_tag": "人类反馈 [true/false](必填)"}
    ]
    
  2. dataset_info.json

    "数据集名称": {"file_name": "data.json","columns": {"prompt": "instruction","query": "input","response": "output","kto_tag": "kto_tag"}
    }
    

KTO 在这里指的是 “Knowledge Transfer Optimization”(知识迁移优化)相关的数据集。它用于优化模型在知识迁移过程中的能力,特别是在人机交互场景中,评估模型生成的答案是否符合人类的预期。

主要内容:

KTO 数据集不仅包含模型的生成结果,还包括人类的反馈,用来优化模型的响应能力。这种数据集设计类似于偏好优化数据集(Preference Optimization),但区别在于,KTO 不是让人类对两种回答进行排序,而是对每一轮问答通过 true/false 的标签直接评估模型的回答是否合格。

数据集结构:

  • Instruction: 人类的指令或提问。
  • Input: 人类最终的输入内容。
  • Output: 模型生成的回答。
  • kto_tag: 人类反馈(true/false),用于标注该模型的回答是否符合预期。

应用场景:

KTO 数据集特别适合用于模型优化,尤其是在模型需要从训练数据中学习如何更好地回应人类问题时。通过这种数据集,模型能够更高效地识别正确的反馈模式,从而提升在实际应用中的表现。这类数据集常用于大语言模型的强化学习阶段,用来替代复杂的奖励建模过程。

5.多模态数据集

多模态数据集需要额外添加一个 images 列,包含输入图像的路径。目前仅支持单张图像输入。

[{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","images": ["图像路径(必填)"]}
]

dataset_info.json 描述为

"数据集名称": {"file_name": "data.json","columns": {"prompt": "instruction","query": "input","response": "output","images": "images"}
}

2.ShareGPT 格式

Note:

  • ShareGPT 格式中的 KTO数据集(样例)和多模态数据集(样例) 与 Alpaca 格式的类似。
  • 预训练数据集不支持 ShareGPT 格式。

1.指令监督微调数据集

与 alpaca 格式相比,sharegpt 格式支持更多的角色种类,如 human、gpt、observation、function 等。他们构成一个对象列表呈现在 conversations 列中。

样例如下:

{"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\"]}}]"
}

Note:
human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置

dataset_info.json 描述为

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","columns": {"messages": "conversations","system": "system","tools": "tools"}
}

2.偏好数据集

与 alpaca 类似

{"conversations": [{"from": "human","value": "老虎会吃哪一个,草还是树叶?"}],"chosen": {"from": "gpt","value": "我很高兴能帮助你解答问题!不过,我必须指出,这个问题本身可能没有意义。老虎是食肉动物,通常不吃草或树叶。它们的饮食主要包括大型有蹄动物、小型哺乳动物和鸟类。\n\n如果你提出这个问题是出于好奇或有特定原因,我很乐意帮助你找到更多关于老虎饮食习惯的信息,或者建议资源让你更多了解这些壮丽的生物。请告诉我如何进一步协助你!"},"rejected": {"from": "gpt","value": "一只老虎是食肉动物,这意味着它的饮食主要是肉类。老虎主要猎捕和吃其他动物,如鹿和野猪。它们不会选择吃草或树叶,因为这些不是它们自然饮食的一部分。"}
}

格式如下

[{"conversations": [{"from": "human","value": "人类指令"},{"from": "gpt","value": "模型回答"},{"from": "human","value": "人类指令"}],"chosen": {"from": "gpt","value": "优质回答"},"rejected": {"from": "gpt","value": "劣质回答"}}
]

dataset_info.json 的描述为

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","ranking": true,"columns": {"messages": "conversations","chosen": "chosen","rejected": "rejected"}
}

3.OpenAI 格式

OpenAI 格式仅仅是 sharegpt 格式的一种特殊情况,其中第一条消息可能是系统提示词

[{"messages": [{"role": "system","content": "系统提示词(选填)"},{"role": "user","content": "人类指令"},{"role": "assistant","content": "模型回答"}]}
]

dataset_info.json

"数据集名称": {"file_name": "data.json","formatting": "sharegpt","columns": {"messages": "messages"},"tags": {"role_tag": "role","content_tag": "content","user_tag": "user","assistant_tag": "assistant","system_tag": "system"}
}

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

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

相关文章

5G时代已来:我们该如何迎接超高速网络?

内容概要 随着5G技术的普及,我们的生活似乎变得更加“科幻”了。想象一下,未来的智能家居将不仅仅是能够听你说“开灯”;它们可能会主动询问你今天心情如何,甚至会推荐你一杯“维他命C芒果榨汁”,帮助你抵御夏天的炎热…

Unity SRP学习笔记(二)

Unity SRP学习笔记(二) 主要参考: https://catlikecoding.com/unity/tutorials/custom-srp/ https://docs.unity.cn/cn/2022.3/ScriptReference/index.html 中文教程部分参考(可选): https://tuncle.blog/c…

【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期

目录 1. start() (1) start() 的性质 (2) start() 和 Thread类 的关系 2. 终止一个线程 (1)通过共享的标记结束线程 1. 通过共享的标记结束线程 2. 关于 lamda 表达式的“变量捕获” (2) 调用interrupt()方法 1. isInterrupted() 2. currentThread() …

粤荣学校与亲邻家政达成合作,创造双向人才输送机制

原标题:超过大学生月薪!粤荣学校与亲邻家政达成合作,创造双向人才输送机制,解决中年人就业难题! 广州市白云区粤荣职业培训学校余智强校长与广州亲邻家政服务有限公司朱利生经理于2024年11月8日下午共同签署了一份重要…

【MacOS实操】如何基于SSH连接远程linux服务器

MacOS上远程连接linux服务器,可以使用ssh命令pem秘钥文件连接。 一、准备pem秘钥文件 如果已经有pem文件,则跳过这一步。如果手上有ppk文件,那么需要先转换为pem文件。 macOS 的默认 SSH 客户端不支持 PPK 格式,你需要将 PPK 文…

parseInt 是一个内置的 JavaScript 函数,用于将字符串转换为整数。

parseInt(options.checkNumber, 10) 中的 10 表示将字符串转换为十进制整数。 解释 parseInt 函数: parseInt 是一个内置的 JavaScript 函数,用于将字符串转换为整数。它有两个参数: 第一个参数是要转换的字符串。第二个参数是转换时使用的基…

鸿蒙ArkTS中的布局容器组件(Scroll、List、Tabs)

1、Scroll组件 Scroll组件是一个可滚动的容器组件,用于在子组件的布局尺寸超过父组件尺寸时提供滚动功能。它允许在其内部容纳超过自身显示区域的内容,并通过滚动机制来查看全部内容。这对于显示大量信息(如长列表、长篇文本或大型图像等&…

ElasticSearch备考 -- Manage the index lifecycle (ILM)

一、题目 在集群中,数据首先分布在data_hot节点,rollover 设置max_age:3d, max_docs:5,max_size:50gb, 优先级为100。 max_age:15s, forcemarge 段合并,数据迁移到data_warm节点, 副本数为0,优先级为50 max_age:30s, 数…

信息安全工程师(81)网络安全测评质量管理与标准

一、网络安全测评质量管理 遵循标准和流程 网络安全测评应严格遵循国家相关标准和流程,确保测评工作的规范性和一致性。这些标准和流程通常包括测评方法、测评步骤、测评指标等,为测评工作提供明确的指导和依据。 选择合格的测评团队 测评团队应具备相关…

使用 Python 构建代理池并测试其有效性

前言 在本篇文章中,我们将介绍如何通过 Python 脚本来构建一个代理池,并且对这些代理的有效性进行测试。整个流程涵盖了从网站抓取代理信息、存储这些信息以及异步地测试代理的有效性。这个脚本可以用作网络爬虫或其他需要使用代理服务器的应用的基础工具。 目标网站 一、…

设计者模式之策略模式

前言 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都写在对象中,将会使对象变得异常复杂;而且有时候支持不频繁使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算…

tomcat 开启远程debug模式

1.修改位置 CATALINA_OPTS"-Xdebug -Xrunjdwp:transportdt_socket,address*:8000,servery,suspendn"2.修改环境变量的方式 apache-tomcat-9.0.86/bin/setenv.sh export JAVA_HOME/opt/jdk1.8.0_171 export CATALINA_HOME/opt/apache-tomcat-9.0.86 export JAVA_OP…

AI辅助论文写作的利弊

人工智能的时代,AI从自动驾驶到智能家居,慢慢的都成为了我们生活中的一部分。可当AI被放到学术研究领域,特别是撰写论文这一问题上时,却出现了大量的争议,认为AI撰写论文会削弱该有的批判性思维能力。那不用AI撰写论文…

vue3+less使用主题定制(多主题定制)可切换主题

假如要使用两套主题:蓝色、红色 例如: 首先确保自己的vue3项目有less,这边不多做接入解释 1、在src目录下建一个styles文件夹,在syles文件夹下面新建两个less文件:theme.less和variables.less; theme.le…

后端Node学习项目-项目基础搭建

前言 各位好,我是前端SkyRain。最近为了响应公司号召,开始对后端知识的学习,作为纯粹小白,记录下每一步的操作流程。 项目仓库:https://gitee.com/sky-rain-drht/drht-node 因为写了文档,代码里注释不是很…

Maven(六)mvn 命令将 jar 包推送到 远程/本地仓库

目录 一、deploy - 推送到远程仓库1.1 命令语法:1.2 执行结果:1.3 可能遇到的问题问题1:with status code 401问题2:with status code 405问题3:Cannot deploy artifact from the local repository 二、install - 推送…

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…

Axure设计之三级联动选择器教程(中继器)

使用Axure设计三级联动选择器&#xff08;如省市区选择器&#xff09;时&#xff0c;可以利用中继器的数据存储和动态交互功能来实现。下面介绍中继器三级联动选择器设计的教程&#xff1a; 一、效果展示&#xff1a; 1、在三级联动选择器中&#xff0c;首先选择省份&#xff…

使用Docker-Compose安装redis,rabbitmq,nacos,mysql,nginx,tomcat,portainer组件教程

因为开发经常会用到一些组件&#xff0c;又不想在本地启动&#xff0c;所以买了个服务器&#xff0c;然后将这些组件都安装到服务器上以便开发使用。下面就记录下使用docker-compose安装组件的教程以及一些需要注意的地方。 关于docker和docker-compose的安装在另一篇博客中有…

安装PyG

PyG安装 官方链接 Installation — pytorch_geometric documentation (pytorch-geometric.readthedocs.io) 安装步骤&#xff1a; 步骤一&#xff1a;安装Anaconda和CUDA 安装Anaconda-CSDN博客安装CUDA-CSDN博客 步骤二&#xff1a;查看支持的Python版本 步骤三&#xf…