Law_Slm / scripts /download_sample_dataset.py
Amitkumar001's picture
Upload folder using huggingface_hub
d7228c8 verified
Raw History Blame Contribute Delete
2.56 kB
"""
Dataset Downloader Utility for fetching open-source text corpora for training Small Language Models.
"""
import argparse
import os
import urllib.request
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from slm.utils.logger import get_logger
logger = get_logger("slm.scripts.download_dataset")
DATASET_URLS = {
"tinystories": {
"url": "https://raw.githubusercontent.com/roneneldan/TinyStories/main/TinyStories-valid.txt",
"filename": "tinystories_valid.txt",
"description": "Clean synthetic story corpus ideal for small language model training."
},
"wikitext2": {
"url": "https://raw.githubusercontent.com/pytorch/examples/main/word_language_model/data/wikitext-2/train.txt",
"filename": "wikitext2_train.txt",
"description": "High-quality Wikipedia text corpus (WikiText-2)."
},
"tinyshakespeare": {
"url": "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt",
"filename": "tinyshakespeare.txt",
"description": "Classic Shakespeare text corpus (1MB)."
}
}
def download_dataset(dataset_key: str, output_dir: str = "data") -> str:
"""
Downloads specified open text dataset into target directory.
"""
if dataset_key not in DATASET_URLS:
raise ValueError(f"Unknown dataset key '{dataset_key}'. Choose from: {list(DATASET_URLS.keys())}")
info = DATASET_URLS[dataset_key]
os.makedirs(output_dir, exist_ok=True)
dest_path = os.path.join(output_dir, info["filename"])
logger.info(f"Downloading {dataset_key} ({info['description']})...")
logger.info(f"Source URL: {info['url']}")
def _progress(count, block_size, total_size):
percent = int(count * block_size * 100 / max(1, total_size))
sys.stdout.write(f"\rDownloading... {percent}% complete")
sys.stdout.flush()
urllib.request.urlretrieve(info["url"], dest_path, reporthook=_progress)
print()
logger.info(f"Successfully downloaded dataset to {dest_path}")
return dest_path
def main():
parser = argparse.ArgumentParser(description="Download open text datasets for Small Language Model training.")
parser.add_argument("--name", type=str, default="wikitext2", choices=list(DATASET_URLS.keys()), help="Dataset choice")
parser.add_argument("--output_dir", type=str, default="data", help="Output folder")
args = parser.parse_args()
download_dataset(args.name, args.output_dir)
if __name__ == "__main__":
main()