refactor: 重构数据管道模块

This commit is contained in:
2026-03-20 21:36:37 +08:00
parent 7045de9c32
commit 3fb2326115
20 changed files with 739 additions and 345 deletions
+162 -47
View File
@@ -1,59 +1,174 @@
## KHAOSZ-dataset
# DataPipeline
用于训练KHAOSZ数据集
### 项目结构
用于训练KHAOSZ模型的数据集处理工具
``` bash
.
│ .gitignore
│ dump_pt_file.py
│ dump_sft_file.py
README.md
run.py
│ tokenizer.json
├───modules
tokenizer.py
│ └───utils.py
├───pre_train
│ chinese-c4.py
│ chinese-cosmopedia.py
│ english-fineweb.py
│ english-wiki.py
├───reforce_learning
│ dpp_chinese_dpo_pairs.py
└───supervised_finetuning
sft_belle.py
sft_chinese_instruct.py
sft_coder.py
sft_magpie-pro-300k.py
sft_small_talk.py
## 项目结构
```
khaosz_dataset/
├── modules/ # 核心模块
├── tokenizer.py # BPE Tokenizer
└── datapipeline/ # 数据管道模块
│ ├── pipeline.py # 主数据管道
│ ├── processors.py # 数据处理器(策略模式)
│ ├── io.py # 文件IO操作
├── packing.py # 序列打包
└── text.py # 文本规范化
├── tokenizer.json # Tokenizer配置
└── pyproject.toml # 项目依赖
```
## 架构设计
### 数据集特性
- 支持多语言混合训练(中/英文)
- 包含以下预训练数据源:
- Chinese-C4
- Chinese-Cosmopedia
- English-Fineweb
- English-Wiki
- 支持监督微调数据集:
- Ling-Coder-SFT
- Chinese-Instruct
- BelleGroup
- Magpie-Pro-300K
本项目采用模块化设计,应用了多种设计模式:
### 设计模式
1. **策略模式** - 不同类型的数据处理器(PT/SFT/DPO)
2. **工厂模式** - 处理器工厂统一创建实例
3. **模板方法模式** - 数据管道流程标准化
### 核心组件
#### DataPipeline(数据管道)
主数据管道,负责数据集的分块处理、格式转换和存储。
```python
from modules.datapipeline import DataPipeline
pipeline = DataPipeline(output_dir="./dataset")
pipeline.process_dataset(
dataset_dict=dataset,
output_subdir="my-data"
)
```
#### ProcessorFactory(处理器工厂)
创建不同类型的数据处理器。
```python
from modules.datapipeline import ProcessorFactory
from modules.tokenizer import BpeTokenizer
tokenizer = BpeTokenizer("tokenizer.json")
# 创建预训练处理器
processor = ProcessorFactory.create("pt", tokenizer)
# 创建SFT处理器
processor = ProcessorFactory.create("sft", tokenizer)
```
#### TextNormalizer(文本规范化)
文本预处理和规范化。
```python
from modules.datapipeline import TextNormalizer
normalizer = TextNormalizer()
normalized_text = normalizer.normalize(text)
```
## 使用说明
### 安装依赖
### 使用说明
1. 安装依赖:
```bash
pip install datasets tokenizers tqdm torch
pip install datasets tokenizers tqdm torch h5py
```
运行数据处理:
### 运行数据处理
运行所有数据处理脚本:
```bash
python run.py
```
运行特定脚本:
```bash
# 预训练数据处理
python pre_train/english-wiki.py
# SFT数据处理
python supervised_finetuning/sft_belle.py
# DPO数据处理
python reforce_learning/dpp_chinese_dpo_pairs.py
```
### 自定义数据处理
#### 1. 基础数据处理
```python
from datasets import load_dataset
from modules.datapipeline import DataPipeline
# 加载数据集
dataset = load_dataset("your-dataset")
# 创建管道
pipeline = DataPipeline()
# 处理数据
pipeline.process_dataset(
dataset_dict=dataset,
output_subdir="output-dir",
process_func=lambda x: {"text": x["content"]}
)
```
#### 2. 自定义处理器
```python
from modules.datapipeline.processors import BaseProcessor
from modules.datapipeline import ProcessorFactory
class MyProcessor(BaseProcessor):
def __init__(self, tokenizer):
self.tokenizer = tokenizer
def process(self, input_dict: dict) -> dict:
# 自定义处理逻辑
return {"processed": data}
@property
def output_keys(self) -> list:
return ["processed"]
# 注册处理器
ProcessorFactory.register("my_type", MyProcessor)
```
#### 3. 文本规范化
```python
from modules.datapipeline import TextNormalizer
# 使用默认规则
normalizer = TextNormalizer()
text = normalizer.normalize(text)
# 自定义规则
custom_rules = {"旧词": "新词"}
normalizer = TextNormalizer(custom_rules)
```
## 数据输出格式
### JSONL格式
每个数据块保存为JSONL文件:
```
{"text": "训练文本内容..."}
{"query": "问题", "response": "答案"}
```
### H5格式
打包后的张量数据保存为HDF5格式,支持高效加载:
```python
from modules.datapipeline import IOHandler
# 加载H5数据
data = IOHandler.load_h5("./cached_data")
```