11# 自定义数据集
22
3- 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任务。
3+ 自定义数据集的接入方法有三种,对预处理函数的控制能力逐渐加强,但接入难度逐步增加。例如,方案一最为方便,但对预处理函数的控制能力最弱,需要预先对数据集进行转换,传入特定格式的数据集:
4+ 1 . 【推荐】直接使用命令行传参的方式接入,即` --dataset <dataset_path1> <dataset_path2> ` 。这将使用AutoPreprocessor将数据集转换为标准格式(支持4种数据集格式,具体查看下面对AutoPreprocessor的介绍)。你可以使用` --columns ` 进行列名转换。支持传入csv、json、jsonl、txt、文件夹(例如git clone开源数据集)。该方案不需要修改dataset_info.json,适合刚接触ms-swift的用户,下面两种方案适合对ms-swift进行拓展的开发者。
5+ 2 . 添加数据集到` dataset_info.json ` 中,可以参考ms-swift内置的[ dataset_info.json] ( https://github.com/modelscope/ms-swift/blob/main/swift/llm/dataset/data/dataset_info.json ) 。该方案也将使用AutoPreprocessor将数据集转换为标准格式。dataset_info.json为数据集元信息的list,每一项元信息必填ms_dataset_id/hf_dataset_id/dataset_path中的一项,通过` columns ` 字段进行列名转换。添加到` dataset_info.json ` 或者注册的数据集在运行[ run_dataset_info.py] ( https://github.com/modelscope/ms-swift/blob/main/scripts/utils/run_dataset_info.py ) 时将自动产生[ 支持的数据集文档] ( https://swift.readthedocs.io/zh-cn/latest/Instruction/%E6%94%AF%E6%8C%81%E7%9A%84%E6%A8%A1%E5%9E%8B%E5%92%8C%E6%95%B0%E6%8D%AE%E9%9B%86.html ) 。此外,你可以采用外接` dataset_info.json ` 的方式,使用` --custom_dataset_info xxx.json ` 解析json文件(方便pip install而非git clone的用户)。
6+ 3 . 手动注册数据集,具有最灵活的预处理函数定制能力,支持使用函数对数据集进行预处理,但难度较高。可以参考[ 内置数据集] ( https://github.com/modelscope/ms-swift/blob/main/swift/llm/dataset/dataset/llm.py ) 或者[ examples] ( https://github.com/modelscope/swift/blob/main/examples/custom ) 中的样例。你可以通过指定` --custom_register_path xxx.py ` 解析外置注册内容(方便pip install而非git clone的用户)。
7+ - 方案一和二在实现中借助了方案三,只是注册的过程为自动发生。
48
5- ms-swift中存在三种核心预处理器:` MessagesPreprocessor ` 、` AlpacaPreprocessor ` 、` ResponsePreprocessor ` 。MessagesPreprocessor用于将类messages和sharegpt格式的数据集转换为标准格式,AlpacaPreprocessor则转换alpaca格式的数据集,ResponsePreprocessor则转换类query/response格式的数据集。` AutoPreprocessor ` 则可以自动选择合适的Preprocessor进行处理。通常情况下` AutoPreprocessor ` 能覆盖90%以上的情况。
9+ 以下将对` AutoPreprocessor ` 可以处理的数据集格式进行介绍:
10+
11+ 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任务。
12+
13+ ms-swift中存在三种核心预处理器:` MessagesPreprocessor ` 、` AlpacaPreprocessor ` 、` ResponsePreprocessor ` 。MessagesPreprocessor用于将类messages和sharegpt格式的数据集转换为标准格式,AlpacaPreprocessor则转换alpaca格式的数据集,ResponsePreprocessor则转换类query/response格式的数据集。` AutoPreprocessor ` 则自动选择合适的预处理进行处理。
614
715以下四种格式在` AutoPreprocessor ` 处理下都会转换成ms-swift标准格式中的messages字段:
816
9- messages格式:
17+ messages格式(标准格式) :
1018``` jsonl
1119{"messages" : [{"role" : " system" , "content" : " <system>" }, {"role" : " user" , "content" : " <query1>" }, {"role" : " assistant" , "content" : " <response1>" }, {"role" : " user" , "content" : " <query2>" }, {"role" : " assistant" , "content" : " <response2>" }]}
1220```
@@ -26,15 +34,9 @@ query-response格式:
2634{"system" : " <system>" , "query" : " <query2>" , "response" : " <response2>" , "history" : [[" <query1>" , " <response1>" ]]}
2735```
2836
29- 自定义数据集的接入方法有三种,对预处理函数的控制能力逐渐加强:
30- 1 . 【推荐】直接使用` --dataset <dataset_id_or_path> ` 接入,使用AutoPreprocessor。支持csv、json、jsonl、txt、文件夹。
31- 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文件。
32- 3 . 手动注册数据集,具有最灵活的预处理函数定制能力,但难度较高。可以参考[ examples] ( https://github.com/modelscope/swift/blob/main/examples/custom ) 中的样例,通过指定` --custom_register_path xxx.py ` 解析注册内容。
33-
37+ ## 标准数据集格式
3438
35- ## 推荐数据集格式
36-
37- 以下给出ms-swift的推荐数据集格式,其中system字段是可选的,默认使用template中定义的` default_system ` 。
39+ 以下给出ms-swift的标准数据集格式,其中system字段是可选的,默认使用template中定义的` default_system ` 。之前介绍的4种数据集格式也可以被AutoPreprocessor处理成标准数据集格式。
3840
3941### 预训练
4042
@@ -84,7 +86,7 @@ query-response格式:
8486
8587### 多模态
8688
87- 对于多模态数据集,和上述任务的格式相同。区别在于增加了` images ` , ` videos ` , ` audios ` 几个key,分别代表多模态资源 ,` <image> ` ` <video> ` ` <audio> ` 标签代表了插入图片/视频/音频的位置。下面给出的四条示例分别展示了纯文本,以及包含图像、视频和音频数据的数据格式。
89+ 对于多模态数据集,和上述任务的格式相同。区别在于增加了` images ` , ` videos ` , ` audios ` 几个key,分别代表多模态资源的url或者path(推荐使用绝对路径) ,` <image> ` ` <video> ` ` <audio> ` 标签代表了插入图片/视频/音频的位置,ms-swift支持多图片/视频/音频的情况 。下面给出的四条示例分别展示了纯文本,以及包含图像、视频和音频数据的数据格式。
8890
8991预训练:
9092```
@@ -101,7 +103,8 @@ query-response格式:
101103{"messages" : [{"role" : " user" , "content" : " <audio>语音说了什么" }, {"role" : " assistant" , "content" : " 今天天气真好呀" }], "audios" : [" /xxx/x.mp3" ]}
102104{"messages" : [{"role" : " system" , "content" : " 你是个有用无害的助手" }, {"role" : " user" , "content" : " <image>图片中是什么,<video>视频中是什么" }, {"role" : " assistant" , "content" : " 图片中是一个大象,视频中是一只小狗在草地上奔跑" }], "images" : [" /xxx/x.jpg" ], "videos" : [" /xxx/x.mp4" ]}
103105```
104- RLHF的数据格式可以参考纯文本大模型的格式。
106+
107+ 多模态模型的RLHF和序列分类的数据格式可以参考纯文本大模型的格式。
105108
106109#### grounding
107110
@@ -114,8 +117,8 @@ RLHF的数据格式可以参考纯文本大模型的格式。
114117{"messages" : [{"role" : " system" , "content" : " You are a helpful assistant." }, {"role" : " user" , "content" : " <image>帮我打开谷歌浏览器" }, {"role" : " assistant" , "content" : " Action: click(start_box='<|box_start|>(246,113)<|box_end|>')" }], "images" : [" /xxx/x.jpg" ]}
115118```
116119使用这种类型的数据需要注意:
117- - 不同模型grounding任务的特殊字符和数据集格式不同
118- - 不同模型对bbox是否归一化的处理不同。例如:qwen2.5-vl使用绝对坐标,而qwen2-vl、internvl2.5需要对bbox的坐标进行千分位坐标归一化
120+ - 不同模型grounding任务的特殊字符和数据集格式不同。
121+ - 不同模型对bbox是否归一化的处理不同。例如:qwen2.5-vl使用绝对坐标,而qwen2-vl、internvl2.5需要对bbox的坐标进行千分位坐标归一化。
119122
1201232 . 使用SWIFT的grounding数据格式:
121124
@@ -124,12 +127,11 @@ RLHF的数据格式可以参考纯文本大模型的格式。
124127{"messages" : [{"role" : " system" , "content" : " You are a helpful assistant." }, {"role" : " user" , "content" : " <image>找到图像中的<ref-object>" }, {"role" : " assistant" , "content" : " <bbox><bbox>" }], "images" : [" /xxx/x.jpg" ], "objects" : {"ref" : [" 羊" ], "bbox" : [[90.9 , 160.8 , 135 , 212.8 ], [360.9 , 480.8 , 495 , 532.8 ]]}}
125128{"messages" : [{"role" : " system" , "content" : " You are a helpful assistant." }, {"role" : " user" , "content" : " <image>帮我打开谷歌浏览器" }, {"role" : " assistant" , "content" : " Action: click(start_box='<bbox>')" }], "images" : [" /xxx/x.jpg" ], "objects" : {"ref" : [], "bbox" : [[615 , 226 ]]}}
126129```
127-
128- 该格式比通用格式多了objects字段,该字段包含的字段有:
129- - ref:用于替换` <ref-object> `
130- - bbox:用于替换` <bbox> `
131- - bbox_type: 可选项为'real','norm1'。默认为'real',即bbox为真实bbox值。若是'norm1',则bbox已经归一化为0~ 1
132- - image_id: 该参数只有当bbox_type为'real'时生效。代表bbox对应的图片是第几张,用于缩放bbox。索引从0开始,默认全为第0张
130+ 该格式将自动转换数据集格式为对应模型的grounding任务格式,且选择对应模型的bbox归一化方式。该格式比通用格式多了objects字段,该字段包含的字段有:
131+ - ref:用于替换` <ref-object> ` 。
132+ - bbox:用于替换` <bbox> ` 。
133+ - bbox_type: 可选项为'real','norm1'。默认为'real',即bbox为真实bbox值。若是'norm1',则bbox已经归一化为0~ 1。
134+ - image_id: 该参数只有当bbox_type为'real'时生效。代表bbox对应的图片是第几张,用于缩放bbox。索引从0开始,默认全为第0张。
133135
134136### 文生图格式
135137
@@ -139,4 +141,67 @@ RLHF的数据格式可以参考纯文本大模型的格式。
139141
140142### Agent格式
141143
142- Agent格式请参考[ Agent文档] ( ../Instruction/智能体的支持.md ) .
144+ Agent格式请参考[ Agent文档] ( ../Instruction/智能体的支持.md ) 。
145+
146+
147+ ## dataset_info.json
148+
149+ 可以参考ms-swift内置的[ dataset_info.json] ( https://github.com/modelscope/ms-swift/blob/main/swift/llm/dataset/data/dataset_info.json ) 。该方案使用AutoPreprocessor预处理函数将数据集转换为标准格式。dataset_info.json文件中包含了数据集元信息的list,以下为一些例子:
150+
151+ ``` json
152+ [
153+ {
154+ "ms_dataset_id" : " xxx/xxx"
155+ },
156+ {
157+ "dataset_path" : " <dataset_path>"
158+ },
159+ {
160+ "ms_dataset_id" : " <dataset_id>" ,
161+ "subsets" : [" v1" ],
162+ "split" : [" train" , " validation" ],
163+ "columns" : {
164+ "input" : " query" ,
165+ "output" : " response"
166+ }
167+ },
168+ {
169+ "ms_dataset_id" : " <dataset_id>" ,
170+ "hf_dataset_id" : " <hf_dataset_id>" ,
171+ "subsets" : [{
172+ "subset" : " subset1" ,
173+ "columns" : {
174+ "problem" : " query" ,
175+ "content" : " response"
176+ }
177+ },
178+ {
179+ "subset" : " subset2" ,
180+ "columns" : {
181+ "messages" : " _" ,
182+ "new_messages" : " messages"
183+ }
184+ }]
185+ }
186+ ]
187+ ```
188+
189+ 支持以下参数:
190+ - ms_dataset_id: 参考DatasetMeta参数。
191+ - hf_dataset_id: 参考DatasetMeta参数。
192+ - dataset_path: 参考DatasetMeta参数。
193+ - subsets: 参考DatasetMeta参数。
194+ - split: 参考DatasetMeta参数。
195+ - columns: 在数据集进行预处理前,对数据集进行列名转换。
196+
197+
198+ ## 数据集注册
199+
200+ register_dataset会在` DATASET_MAPPING ` 中注册数据集,调用函数` register_dataset(dataset_meta) ` 即可完成数据集注册,其中dataset_meta将存储模型的元信息。DatasetMeta的参数列表如下:
201+ - ms_dataset_id: ModelScope的dataset_id,默认为None。
202+ - hf_dataset_id: HuggingFace的dataset_id,默认为None。
203+ - dataset_path: dataset的本地路径(推荐使用绝对路径)。
204+ - subsets: 子数据集的名字列表或者` SubsetDataset ` 对象的列表,默认为` ['default'] ` 。(只有dataset_id或者dataset_dir(git clone开源数据集)有子数据集和split的概念)。
205+ - split: 默认为` ['train'] ` 。
206+ - preprocess_func: 预处理函数或可调用对象,默认为` AutoPreprocessor() ` 。该预处理函数接口为传入` HfDataset ` ,并返回满足标准格式的` HfDataset ` 。
207+ - load_function: 默认为` DatasetLoader.load ` 。若需要自定义载入函数,则该载入函数需返回满足标准格式的` HfDataset ` ,这将抛弃ms-swift的数据集载入机制,提供给用户最大的自由度。通常该参数不需要进行修改。
0 commit comments