常用的对话指令微调数据集有:
ShareGPT 风格微调数据集下载可以基于网页直接下载,也可以基于命令行下载,比如:
cd dataset/
wget https://huggingface.co/datasets/shibing624/roleplay-zh-sharegpt-gpt4-data/resolve/main/sharegpt_formatted_data-evol-gpt4.jsonl
cd ..ShareGPT 格式支持更多的角色种类,例如 human、gpt、observation、function_call等等。它们构成一个对象列表呈现在conversations列中。
ShareGPT风格示例:
[
{
"conversations": [
{
"from": "human",
"value": "人类指令"
},
{
"from": "function_call",
"value": "工具参数"
},
{
"from": "observation",
"value": "工具结果"
},
{
"from": "gpt",
"value": "模型回答"
}
],
"system": "系统提示词(选填)",
"tools": "工具描述(选填)"
}
]ShareGPT格式数据预处理脚本:
source /usr/local/Ascend/cann/set_env.sh # 修改为实际安装的Toolkit包路径
mkdir ./finetune_dataset
python ./preprocess_data.py \
--input ./dataset/sharegpt_formatted_data-evol-gpt4.jsonl \
--tokenizer-name-or-path ./model_from_hf/llama-2-7b-hf/ \
--output-prefix ./finetune_dataset/sharegpt \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF \
--handler-name SharegptStyleInstructionHandler \
--prompt-type llama2 # <-- 需要填入模型模板
# --map-keys '{"messages":"conversations", "tags":{"role_tag": "from","content_tag": "value","user_tag": "human","assistant_tag": "gpt","system_tag": "system", "observation_tag":"observation", "function_tag":"function_call"}}' # 默认值,可不传【--prompt-type】
用于指定模型模板,能够让base模型微调后能具备更好的对话能力。prompt-type的可选项可以在templates文件内查看。
【--map-keys】
--map-keys参数用于配置字段映射来使用数据集。默认值为
'{"messages":"conversations", "tags":{"role_tag": "from","content_tag": "value","user_tag": "human","assistant_tag": "gpt","system_tag": "system", "observation_tag":"observation", "function_tag":"function_call"}}'
其中key值"messages"、"tags"代表数据集列映射后的属性,在代码中是固定的,不应改变。value值中"conversations"对应数据集的列名、"from"对应角色标志、"human"、"gpt"、"system"、"observation"、"function_call"对应角色种类、"value"对应具体内容标志。
以OpenAI格式为例,OpenAI 格式是 sharegpt 格式的一种特殊情况,其中第一条消息可能是系统提示词。
OpenAI格式示例:
[
{
"messages": [
{
"role": "system",
"content": "系统提示词(选填)"
},
{
"role": "user",
"content": "人类指令"
},
{
"role": "assistant",
"content": "模型回答"
}
]
}
]OpenAI格式数据预处理脚本:
source /usr/local/Ascend/cann/set_env.sh # 修改为实际安装的Toolkit包路径
mkdir ./finetune_dataset
python ./preprocess_data.py \
--input ./dataset/xxx.json \
--tokenizer-name-or-path ./model_from_hf/llama-2-7b-hf/ \
--output-prefix ./finetune_dataset/openai \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF \
--handler-name SharegptStyleInstructionHandler \
--prompt-type llama2 \
--map-keys '{"messages":"messages", "tags":{"role_tag": "role","content_tag": "content","user_tag": "user","assistant_tag": "assistant","system_tag": "system"}}'【--handler-name】
微调数据预处理ShareGPT风格数据集时,应指定为SharegptStyleInstructionHandler,并根据--map-keys参数提取对应数据的列。
示例1:
--map-keys '{"messages":"chat"}'则会提取数据集里的"chat"列,其中"tags"属性包含角色格式和内容格式,做为默认值隐式存在,角色格式可以为:"from": "human"、"from": "gpt"、"from": "observation"、"from": "function_call",内容格式为"value": "具体内容"
示例2:
--map-keys '{"messages":"messages", "tags":{"role_tag": "role","content_tag": "content","user_tag": "user","assistant_tag": "assistant"}}'则会提取数据集里的"messages"列,其中角色格式可以为:"role": "user"、"role": "assistant",内容格式为"content": "具体内容"
MindSpeed-LLM微调数据集处理脚本命名风格及启动方法为:
# mcore
# 命名及启动:examples/mcore/model_name/data_convert_xxx_instruction.sh
bash examples/mcore/llama2/data_convert_llama2_instruction.sh指令微调数据集处理结果如下:
./finetune_dataset/openai_packed_attention_mask_document.bin
./finetune_dataset/openai_packed_attention_mask_document.idx
./finetune_dataset/openai_packed_input_ids_document.bin
./finetune_dataset/openai_packed_input_ids_document.idx
./finetune_dataset/openai_packed_labels_document.bin
./finetune_dataset/openai_packed_labels_document.idx微调时,数据集路径输入 ./finetune_dataset/openai 即可