This directory contains tools and scripts for processing various question-answering datasets for training and evaluation in the AgentRL project.
The data processing workflow consists of four main steps:
- Dataset Download: Download and preprocess raw datasets
- Dataset Merging: Merge multiple modified datasets into a single Lance dataset
- Quality Assessment: Perform quality assessment on merged datasets, adding quality metrics
- Data Filtering: Filter data based on quality assessment results and split into train/validation/test sets
Downloads and standardizes multiple question-answering datasets, converting them to a unified format.
Usage:
python download_datasets.py \
--cache_dir {the path to cache raw dir} \
--save_dir {the path to save modified datasets} \
--num_proc {number of processes} \
--dataset {dataset names or 'all'}Parameter Description:
--cache_dir: Directory to cache raw datasets--save_dir: Directory to save modified datasets--num_proc: Number of processes for download processing (default: 8)--dataset: Dataset(s) to process - supports specifying single or multiple datasets (e.g., simple_qa natural_questions), or use 'all' to process all datasets (default: all)--http_proxy: (Optional) HTTP proxy address
Supported Datasets:
- simple_qa
- natural_questions
- trivia_qa
- hotpot_qa
- wiki_multihop
- bamboogle
- musique
- pop_qa
Merges multiple modified datasets into a single Lance dataset.
Usage:
python merge_datasets.py \
--modified_data_base_dir {path to modified dataset} \
--merged_data_dir {path to merged dataset} \
--max_sample_per_split 1000Parameter Description:
--modified_data_base_dir: Directory containing modified datasets--merged_data_dir: Directory to save merged Lance dataset--max_sample_per_split: (Optional) Maximum number of samples per split
Performs quality assessment on merged Lance datasets, adding quality metrics such as objectivity and temporal stability.
Usage:
python quality_assess_datasets.py \
--merged_data_dir {path to merged dataset} \
--assessed_data_dir {path to assessed dataset} \
--save_interval 1000 \
--num_proc 48 \
--batch_size 128Parameter Description:
--merged_data_dir: Directory containing merged Lance dataset--assessed_data_dir: Directory to save assessed dataset (Lance format)--save_interval: Number of samples per shard save (default: 1000)--num_proc: Number of inference processes (default: 48)--batch_size: Number of samples per batch (default: 128)--max_samples: (Optional) Maximum number of samples to assess, for testing
Filters datasets based on quality assessment results and splits them into train/validation/test sets according to specified ratios.
Usage:
python filter_datasets.py \
--assessed_data_dir {path to assessed dataset} \
--filtered_data_dir {path to filtered dataset} \
--objectivity_threshold 1 \
--temporal_stability_threshold 1 \
--train_ratio 0.8 \
--val_ratio 0.1 \
--test_ratio 0.1Parameter Description:
--assessed_data_dir: Directory containing assessed dataset--filtered_data_dir: Directory to save filtered dataset--objectivity_threshold: Objectivity score threshold (0-1, default: 1)--temporal_stability_threshold: Temporal stability score threshold (0-1, default: 1)--train_ratio: Training set ratio (default: 0.8)--val_ratio: Validation set ratio (default: 0.1)--test_ratio: Test set ratio (default: 0.1)--seed: Random seed (default: 42)
Execute the following steps in order:
# Step 1: Download and preprocess datasets
python download_datasets.py \
--cache_dir {path to cached raw dataset} \
--save_dir {path to modified dataset} \
--num_proc 8 \
--dataset all
# Step 2: Merge datasets
python merge_datasets.py \
--modified_data_base_dir {path to modified dataset} \
--merged_data_dir {path to merged dataset}
# Step 3: Assess dataset quality
python quality_assess_datasets.py \
--merged_data_dir {path to merged dataset} \
--assessed_data_dir {path to assessed dataset}
# Step 4: Filter datasets and split into train/validation/test sets
python filter_datasets.py \
--assessed_data_dir {path to assessed dataset} \
--filtered_data_dir {path to filtered dataset} \
--objectivity_threshold 0.8 \
--temporal_stability_threshold 0.8If some steps are already completed, you can execute specific steps individually:
# Download specific datasets only
python download_datasets.py \
--cache_dir {path to cached raw dataset} \
--save_dir {path to modified dataset} \
--dataset simple_qa natural_questions
# Merge datasets only (if modified datasets already exist)
python merge_datasets.py \
--modified_data_base_dir {path to modified dataset} \
--merged_data_dir {path to merged dataset}
# Assess quality only (if merged dataset already exists)
python quality_assess_datasets.py \
--merged_data_dir {path to merged dataset} \
--assessed_data_dir {path to assessed dataset}
# Filter data only (if assessed dataset already exists)
python filter_datasets.py \
--assessed_data_dir {path to assessed dataset} \
--filtered_data_dir {path to filtered dataset}Data quality assessment includes the following dimensions:
- Objectivity: Evaluates the objectivity level of questions and answers
- Temporal Stability: Evaluates the stability of question answers over time
Each sample is assigned a score between 0-1, where 1 indicates the highest quality.
- Separation of Concerns: Each script focuses on a single function
- Modularity: Each step can be run and debugged independently
- Efficiency Improvement: Can skip completed steps
- Flexible Configuration: Different steps can use different parameter configurations
- Reusability: Each component can be reused in other scenarios
- Quality Control: Supports multi-dimensional quality assessment and precise filtering
data/
├── download_datasets.py # Dataset download script
├── merge_datasets.py # Dataset merge script
├── quality_assess_datasets.py # Quality assessment script
├── filter_datasets.py # Dataset filtering script
├── data_processing/
│ ├── downloader/ # Downloader modules
│ ├── dataset_merger.py # Dataset merger class
│ ├── quality_assessor.py # Quality assessor class
│ ├── filter.py # Data filter class
│ ├── prompt.py # Assessment prompts
│ └── utils.py # Utility functions
└── README.md # This document