diff --git "a/docs/source/Customization/\346\226\260\345\242\236\346\250\241\345\236\213.md" "b/docs/source/Customization/\346\226\260\345\242\236\346\250\241\345\236\213.md" deleted file mode 100644 index 0493c34e2e..0000000000 --- "a/docs/source/Customization/\346\226\260\345\242\236\346\250\241\345\236\213.md" +++ /dev/null @@ -1,14 +0,0 @@ -# 新增模型 - -一般建议直接使用--model来指定模型id,配合--model_type和--template使用,例如: - -```shell -swift sft --model my-model --model_type llama --template chatml --dataset xxx -``` - -如果需要新增model_type和template请给我们提交issue,如果您阅读了我们的源代码,也可以在llm/template和llm/model中添加新的类型。 - - -## 模型注册 - -请参考[examples](https://github.com/modelscope/swift/blob/main/examples/custom/model.py)中示例代码. 你可以通过指定`--custom_register_path xxx.py`对注册的内容进行解析. diff --git "a/docs/source/Customization/\346\226\260\345\242\236\346\225\260\346\215\256\351\233\206.md" "b/docs/source/Customization/\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\351\233\206.md" similarity index 59% rename from "docs/source/Customization/\346\226\260\345\242\236\346\225\260\346\215\256\351\233\206.md" rename to "docs/source/Customization/\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\351\233\206.md" index 3128259246..941f7f4f64 100644 --- "a/docs/source/Customization/\346\226\260\345\242\236\346\225\260\346\215\256\351\233\206.md" +++ "b/docs/source/Customization/\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\351\233\206.md" @@ -1,8 +1,42 @@ -# 新增数据集 +# 自定义数据集 -## 本地数据集 +ms-swift的标准格式数据集可接受的keys包括: 'messages'、'rejected_response'、'label'、'images'、'videos'、'audios'、'tools'和'objects'。其中'messages'是必需的key,'rejected_response'用于DPO等RLHF训练,'label'用于KTO训练,'images'、'videos'、'audios'用于存储多模态数据的路径或者url,'tools' 用于Agent任务,'objects'用于grounding任务。 -### 预训练格式 +ms-swift中存在三种核心预处理器:`MessagesPreprocessor`、`AlpacaPreprocessor`、`ResponsePreprocessor`。MessagesPreprocessor用于将类messages和sharegpt格式的数据集转换为标准格式,AlpacaPreprocessor则转换alpaca格式的数据集,ResponsePreprocessor则转换类query/response格式的数据集。`AutoPreprocessor`则可以自动选择合适的Preprocessor进行处理。通常情况下`AutoPreprocessor`能覆盖90%以上的情况。 + +以下四种格式在`AutoPreprocessor`处理下都会转换成ms-swift标准格式中的messages字段: + +messages格式: +```jsonl +{"messages": [{"role": "system", "content": ""}, {"role": "user", "content": ""}, {"role": "assistant", "content": ""}, {"role": "user", "content": ""}, {"role": "assistant", "content": ""}]} +``` + +sharegpt格式: +```jsonl +{"system": "", "conversation": [{"human": "", "assistant": ""}, {"human": "", "assistant": ""}]} +``` + +alpaca格式: +```jsonl +{"system": "", "instruction": "", "input": "", "output": ""} +``` + +query-response格式: +```jsonl +{"system": "", "query": "", "response": "", "history": [["", ""]]} +``` + +自定义数据集的接入方法有三种,对预处理函数的控制能力逐渐加强: +1. 【推荐】直接使用`--dataset `接入,使用AutoPreprocessor。支持csv、json、jsonl、txt、文件夹。 +2. 书写dataset_info.json文件。可以参考ms-swift内置的[dataset_info.json](https://github.com/modelscope/ms-swift/blob/main/swift/llm/dataset/data/dataset_info.json)。其中ms_dataset_id/hf_dataset_id/dataset_path必填其中的一项,通过`columns`字段进行列名转换。格式转换使用AutoPreprocessor。使用`--custom_dataset_info xxx.json`解析json文件。 +3. 手动注册数据集,具有最灵活的预处理函数定制能力,但难度较高。可以参考[examples](https://github.com/modelscope/swift/blob/main/examples/custom)中的样例,通过指定`--custom_register_path xxx.py`解析注册内容。 + + +## 推荐数据集格式 + +以下给出ms-swift的推荐数据集格式: + +### 预训练 ```jsonl {"messages": [{"role": "assistant", "content": "I love music"}]} @@ -10,14 +44,14 @@ {"messages": [{"role": "assistant", "content": "西红柿鸡蛋盖饭和地三鲜盖饭哪个更权威"}]} ``` -### 微调格式 +### 监督微调 ```jsonl {"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "告诉我明天的天气"}, {"role": "assistant", "content": "明天天气晴朗"}]} {"messages": [{"role": "system", "content": "你是个有用无害的数学计算器"}, {"role": "user", "content": "1+1等于几"}, {"role": "assistant", "content": "等于2"}, {"role": "user", "content": "再加1呢"}, {"role": "assistant", "content": "等于3"}]} ``` -### 人类对齐格式 +### RLHF #### DPO/ORPO/CPO/SimPO @@ -33,16 +67,20 @@ {"messages": [{"role": "system", "content": "你是个有用无害的数学计算器"}, {"role": "user", "content": "1+1等于几"}, {"role": "assistant", "content": "等于2"}, {"role": "user", "content": "再加1呢"}, {"role": "assistant", "content": "等于3"}], "label": true} ``` -对于多模态数据集,和上述任务的格式相同。区别在于增加了`images`, `videos`, `audios`几个key,分别代表多模态资源,例如: +### 多模态 + +对于多模态数据集,和上述任务的格式相同。区别在于增加了`images`, `videos`, `audios`几个key,分别代表多模态资源: ```jsonl -{"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "图片中是什么,