中文
本页内容

数据处理

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"
    }
  }
}

备注