数据处理
openMind内置dataset_info.json配置文件,含有魔乐社区在线数据集。在线数据集配置格式为:
json
"dataset": {
"hub_url": "repo_id"
}
其中:
dataset: 数据集名称。repo_id: 魔乐社区数据集的仓库地址。
openMind目前仅支持Alpaca和ShareGpt两种数据格式,默认数据集格式为Alpaca,如果是ShareGPT格式,需要在配置文件中指定formatting字段。示例如下:
json
"dataset": {
"hub_url": "repo_id",
"formatting": "sharegpt"
}
Alpaca数据集
Alpaca数据集格式要求如下:
json
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"system": "系统提示词(选填)",
"history": [
["第一轮指令(选填)", "第一轮回答(选填)"],
["第二轮指令(选填)", "第二轮回答(选填)"]
]
}
]
其中,
instruction: 用户给出的指令或问题,是必须提供的信息。input: 可选的额外输入信息,可以为空,用于提供给定指令的上下文或具体例子。output: 模型根据指令和输入产生的响应,是必须提供的信息。system: 可选的系统提示,用来为整个对话设定场景或提供指导原则。history: 一个列表,包含之前轮次的对话记录,每一对都是用户消息和模型回复。这有助于保持对话的一致性和连贯性。
下面提供Alpaca单轮对话和多轮对话的示例。
单轮对话:
json
[
{
"instruction": "解释一下什么是人工智能。",
"input": "",
"output": "人工智能(Artificial Intelligence, AI)是指由人制造出来的具有一定智能的系统,能够理解和学习人类的行为,并且能够执行任务、解决问题以及适应新环境。它通常包括机器学习、自然语言处理、计算机视觉等技术领域。",
"system": "你是一位专业的AI讲师。"
}
]
多轮对话:
json
[
{
"instruction": "明天杭州的天气是什么?",
"input": "",
"output": "明天杭州的天气显示是多云,气温大约在5到13摄氏度之间。",
"system": "你是一位气象专家。",
"history": [
["今天杭州的天气是什么?", "今天杭州的天气是阴天,气温大约在6到13摄氏度之间。"]
]
},
{
"instruction": "那后天呢?",
"input": "",
"output": "后天杭州是晴天,气温预计在6到14摄氏度左右。",
"system": "你是一位气象专家。",
"history": [
["今天杭州的天气是什么?", "今天杭州的天气是阴天,气温大约在6到13摄氏度之间。"],
["明天杭州的天气是什么?", "明天杭州的天气显示是多云,气温大约在5到13摄氏度之间。"]
]
}
]
ShareGPT数据集
ShareGPT数据集格式要求如下:
json
[
{
"conversations": [
{
"from": "human(必填)",
"value": "人类指令(必填)"
},
{
"from": "function_call(选填)",
"value": "工具参数(选填)"
},
{
"from": "observation(选填)",
"value": "工具结果(选填)"
},
{
"from": "gpt(必填)",
"value": "模型回答(必填)"
}
],
"system": "系统提示词(选填)",
"tools": "工具描述(选填)"
}
]
其中:
conversations: 包含一系列对话对象,每个对象都由发言者(from)和发言内容(value)组成。from可以是人类、机器或是外部请求等,都可以自定义。system: 可选,系统提示或者说是prompt、角色设定等。类似于alpaca格式中的system字段。tools: 描述功能信息(尤其是外部请求的描述),这些工具可能被模型用来执行某些任务或获取更多信息。
下面是ShareGPT的数据集示例:
json
{
"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\"]}}]"
}
自定义数据集
当用户需要使用本地数据集,或者自定义的数据集时,用户可以在微调yaml脚本中指定custom_dataset_info参数,传入自定义数据集配置文件custom_dataset_info.json的绝对路径,该文件名用户可自定义。
Alpaca数据集配置模板
对于Alpaca数据集,在配置文件中的描述应为:
json
{
"dataset": {
"file_name(必填)": "dataset.json",
"local_path(必填)": "xxx",
"split(选填)": "train",
"num_samples(选填)": xxx,
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"system": "system",
"tools": "tools",
"history": "history"
}
}
}
其中,
local_path: 本地数据集的绝对路径split: 要使用的数据集拆分名称,支持"train"和"test"配置。num_samples: 数据集的长度限制,int类型。
ShareGPT数据集配置模板
对于ShareGPT数据集,在配置文件中的描述应为:
json
{
"dataset": {
"file_name(必填)": "dataset.json",
"local_path(必填)": "xxx",
"split(选填)": "train",
"num_samples(选填)": xxx,
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"system": "system",
"tools": "tools"
}
}
}
备注