Skywork-OR1数据准备完全指南:如何准备和过滤数学与代码训练数据集
【免费下载链接】Skywork-OR1Unleashing the Power of Reinforcement Learning for Math and Code Reasoners项目地址: https://gitcode.com/gh_mirrors/sk/Skywork-OR1
Skywork-OR1是一个专注于强化学习的开源项目,特别针对数学和代码推理任务进行了优化。本指南将详细介绍如何为Skywork-OR1项目准备和过滤高质量的数学与代码训练数据集,帮助您充分利用该项目的强化学习能力。
为什么数据准备对Skywork-OR1至关重要
在机器学习和强化学习中,数据的质量直接影响模型的性能。Skywork-OR1作为一个专注于数学和代码推理的项目,对训练数据有更高的要求。高质量的数据集能够帮助模型学习到更有效的推理策略,从而在各种数学和代码任务中取得更好的表现。
图1: Skywork-OR1-32B与其他模型在AIME和LiveCodeBench数据集上的性能对比
从图中可以看出,Skywork-OR1在数学和代码任务上都表现出了优异的性能。这背后离不开高质量的训练数据准备工作。
数据准备的核心步骤
1. 数据集获取
Skywork-OR1项目提供了多种获取数据集的方式。最直接的方法是使用项目中提供的脚本从公开数据源下载数据。例如,在or1_scripts/data_preprocess/目录下,您可以找到download_and_filter_data_7b.py等脚本,用于下载和预处理不同规模的数据集。
# 示例代码片段来自or1_scripts/data_preprocess/download_and_filter_data_7b.py data_source = 'Skywork/Skywork-OR1-RL-Data' dataset = datasets.load_dataset(data_source)此外,项目还提供了处理特定数据集的示例,如examples/data_preprocess/gsm8k.py用于处理GSM8k数学问题数据集。
2. 数据预处理
获取原始数据后,需要进行一系列预处理步骤,以确保数据的质量和适用性。这包括:
- 数据清洗:去除噪声、重复数据和格式错误的数据
- 数据转换:将数据转换为模型可以接受的格式
- 特征提取:从原始数据中提取有用的特征
以GSM8k数据集处理为例,项目提供了专门的预处理函数:
# 示例代码片段来自examples/data_preprocess/gsm8k.py def extract_solution(solution_str): solution = re.search("#### (\\-?[0-9\\.\\,]+)", solution_str) assert solution is not None final_solution = solution.group(0) final_solution = final_solution.split('#### ')[1].replace(',', '') return final_solution这个函数从原始答案中提取出最终的数学解,为后续的模型训练做好准备。
3. 数据过滤
数据过滤是确保训练数据质量的关键步骤。Skywork-OR1项目采用了多种过滤策略,以选择最适合模型训练的数据。
在download_and_filter_data_7b.py脚本中,我们可以看到一个基于难度的过滤函数:
# 示例代码片段来自or1_scripts/data_preprocess/download_and_filter_data_7b.py def filter_fn(example): if 'extra_info' not in example or 'model_difficulty' not in example['extra_info']: return False difficulty = example['extra_info']['model_difficulty'].get('DeepSeek-R1-Distill-Qwen-7B') if difficulty is None: return False if difficulty < 1 or difficulty > 15: return False return True这个函数确保只选择难度适中的问题,既不过于简单也不过于困难,从而提高训练效率和效果。
数学与代码数据集的特殊处理
数学数据集处理
数学数据集通常包含复杂的公式和推理步骤。Skywork-OR1项目针对这一特点,设计了专门的处理流程。例如,在examples/data_preprocess/gsm8k.py中,通过添加特定的指令来引导模型进行逐步推理:
# 示例代码片段来自examples/data_preprocess/gsm8k.py instruction_following = "Let's think step by step and output the final answer after \"####\"." question = question_raw + ' ' + instruction_following这种处理方式有助于模型学习到更有效的数学推理能力。
代码数据集处理
代码数据集需要特别注意语法正确性和可执行性。Skywork-OR1项目在处理代码数据时,会进行严格的语法检查和过滤,确保训练数据中的代码片段是可执行的。
图2: Skywork-OR1-Math-7B在AIME24数据集上的多阶段训练性能变化
图中展示了模型在不同训练阶段的性能变化,可以看出经过精心准备的数据集能够显著提升模型性能。
数据集格式转换与存储
预处理和过滤完成后,需要将数据转换为适合模型训练的格式。Skywork-OR1项目主要使用Parquet格式存储数据,这种格式不仅压缩效率高,还支持高效的列存储和查询。
# 示例代码片段来自examples/data_preprocess/gsm8k.py train_dataset.to_parquet(os.path.join(local_dir, 'train.parquet')) test_dataset.to_parquet(os.path.join(local_dir, 'test.parquet'))此外,项目还支持将数据存储到HDFS,以满足大规模训练的需求:
# 示例代码片段来自or1_scripts/data_preprocess/download_and_filter_data_7b.py if hdfs_dir is not None: makedirs(hdfs_dir) copy(src=local_dir, dst=hdfs_dir)实际操作指南
准备数学数据集
使用
examples/data_preprocess/gsm8k.py脚本处理GSM8k数据集:python examples/data_preprocess/gsm8k.py --local_dir ./or1_data/gsm8k使用
or1_scripts/data_preprocess/download_and_filter_data_7b.py下载并过滤数学数据:python or1_scripts/data_preprocess/download_and_filter_data_7b.py --local_dir ./or1_data/train
准备代码数据集
类似地,可以使用项目提供的脚本处理代码数据集:
python examples/data_preprocess/hellaswag.py --local_dir ./or1_data/hellaswag或者使用综合数据下载脚本:
python or1_scripts/data_preprocess/download_and_filter_data_32b.py --local_dir ./or1_data/train_32b
图3: Skywork-OR1-32B在不同训练步骤下的性能变化
从图中可以看出,随着训练步骤的增加,模型性能逐渐提升,这进一步证明了高质量数据准备的重要性。
数据准备的最佳实践
- 数据质量优先:宁可使用少量高质量数据,也不要使用大量低质量数据
- 多样性:确保数据集涵盖各种类型的数学问题和代码任务
- 难度适中:如项目中的过滤函数所示,选择难度适中的数据
- 定期更新:随着模型的迭代,定期更新和优化训练数据
总结
数据准备是Skywork-OR1项目成功的关键步骤之一。通过本文介绍的方法,您可以为模型准备高质量的数学和代码训练数据集,从而充分发挥Skywork-OR1在强化学习方面的优势。无论您是初学者还是有经验的开发者,遵循这些步骤都能帮助您获得更好的模型性能。
记住,高质量的数据是训练出优秀模型的基础。花时间做好数据准备工作,将会在模型性能上得到显著回报。
图4: Skywork-OR1-7B系列模型在各项任务上的性能表现
【免费下载链接】Skywork-OR1Unleashing the Power of Reinforcement Learning for Math and Code Reasoners项目地址: https://gitcode.com/gh_mirrors/sk/Skywork-OR1
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考