Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| prepare_data.py | |
| Downloads datasets from HuggingFace and converts to JOY format. | |
| Runs once during Docker build. | |
| """ | |
| import json | |
| import os | |
| import sys | |
| OUTPUT = "data/master_data.jsonl" | |
| os.makedirs("data", exist_ok=True) | |
| total = 0 | |
| def write(f, inp, out): | |
| global total | |
| inp = inp.strip().replace('"', "'") | |
| out = out.strip().replace('"', "'") | |
| if len(inp) < 3 or len(out) < 3: return | |
| if len(inp) > 2000 or len(out) > 2000: return | |
| # remove newlines | |
| inp = inp.replace('\n', ' ').replace('\r', '') | |
| out = out.replace('\n', ' ').replace('\r', '') | |
| f.write(f'{{"input":"{inp}","output":"{out}"}}\n') | |
| total += 1 | |
| if total % 10000 == 0: | |
| print(f"[DATA] Written {total} examples...", flush=True) | |
| print("[DATA] Starting dataset preparation...", flush=True) | |
| with open(OUTPUT, "w") as f: | |
| # ββ Dataset 1: Alpaca (52K instruction following) ββ | |
| try: | |
| print("[DATA] Downloading alpaca dataset...", flush=True) | |
| from datasets import load_dataset | |
| ds = load_dataset("tatsu-lab/alpaca", split="train") | |
| for row in ds: | |
| inp = row.get("instruction", "") | |
| ctx = row.get("input", "") | |
| out = row.get("output", "") | |
| if ctx: inp = f"{inp} {ctx}" | |
| write(f, inp, out) | |
| print(f"[DATA] Alpaca done. Total: {total}", flush=True) | |
| except Exception as e: | |
| print(f"[DATA] Alpaca failed: {e}", flush=True) | |
| # ββ Dataset 2: Dolly 15K ββ | |
| try: | |
| print("[DATA] Downloading dolly dataset...", flush=True) | |
| ds = load_dataset("databricks/databricks-dolly-15k", split="train") | |
| for row in ds: | |
| inp = row.get("instruction", "") | |
| ctx = row.get("context", "") | |
| out = row.get("response", "") | |
| if ctx: inp = f"{inp} Context: {ctx}" | |
| write(f, inp, out) | |
| print(f"[DATA] Dolly done. Total: {total}", flush=True) | |
| except Exception as e: | |
| print(f"[DATA] Dolly failed: {e}", flush=True) | |
| # ββ Dataset 3: OpenAssistant ββ | |
| try: | |
| print("[DATA] Downloading OpenAssistant...", flush=True) | |
| ds = load_dataset("OpenAssistant/oasst1", split="train") | |
| # pair prompts with responses | |
| messages = {} | |
| for row in ds: | |
| mid = row.get("message_id") | |
| pid = row.get("parent_id") | |
| role = row.get("role") | |
| text = row.get("text", "") | |
| messages[mid] = {"role": role, "text": text, "parent": pid} | |
| for mid, msg in messages.items(): | |
| if msg["role"] == "assistant" and msg["parent"]: | |
| parent = messages.get(msg["parent"]) | |
| if parent and parent["role"] == "prompter": | |
| write(f, parent["text"], msg["text"]) | |
| print(f"[DATA] OA done. Total: {total}", flush=True) | |
| except Exception as e: | |
| print(f"[DATA] OA failed: {e}", flush=True) | |
| # ββ Dataset 4: Natural Questions ββ | |
| try: | |
| print("[DATA] Downloading NQ...", flush=True) | |
| ds = load_dataset("nq-open", split="train") | |
| for row in ds: | |
| q = row.get("question", "") | |
| a = row.get("answer", []) | |
| if a and isinstance(a, list): a = a[0] | |
| if isinstance(a, str): write(f, q, a) | |
| print(f"[DATA] NQ done. Total: {total}", flush=True) | |
| except Exception as e: | |
| print(f"[DATA] NQ failed: {e}", flush=True) | |
| # ββ Dataset 5: SciQ ββ | |
| try: | |
| print("[DATA] Downloading SciQ...", flush=True) | |
| ds = load_dataset("allenai/sciq", split="train") | |
| for row in ds: | |
| q = row.get("question", "") | |
| a = row.get("correct_answer", "") | |
| sup = row.get("support", "") | |
| if sup: out = f"{a}. {sup}" | |
| else: out = a | |
| write(f, q, out) | |
| print(f"[DATA] SciQ done. Total: {total}", flush=True) | |
| except Exception as e: | |
| print(f"[DATA] SciQ failed: {e}", flush=True) | |
| # ββ Dataset 6: TriviaQA ββ | |
| try: | |
| print("[DATA] Downloading TriviaQA...", flush=True) | |
| ds = load_dataset("trivia_qa", "rc.nocontext", split="train") | |
| for row in ds: | |
| q = row.get("question", "") | |
| a = row.get("answer", {}) | |
| if isinstance(a, dict): | |
| aliases = a.get("aliases", []) | |
| if aliases: a = aliases[0] | |
| else: a = a.get("value", "") | |
| if isinstance(a, str): write(f, q, a) | |
| print(f"[DATA] TriviaQA done. Total: {total}", flush=True) | |
| except Exception as e: | |
| print(f"[DATA] TriviaQA failed: {e}", flush=True) | |
| # ββ Dataset 7: CommonsenseQA ββ | |
| try: | |
| print("[DATA] Downloading CommonsenseQA...", flush=True) | |
| ds = load_dataset("tau/commonsense_qa", split="train") | |
| for row in ds: | |
| q = row.get("question", "") | |
| ans_key = row.get("answerKey", "") | |
| choices = row.get("choices", {}) | |
| labels = choices.get("label", []) | |
| texts = choices.get("text", []) | |
| for label, text in zip(labels, texts): | |
| if label == ans_key: | |
| write(f, q, text) | |
| break | |
| print(f"[DATA] CommonsenseQA done. Total: {total}", flush=True) | |
| except Exception as e: | |
| print(f"[DATA] CommonsenseQA failed: {e}", flush=True) | |
| print(f"\n[DATA] β Preparation complete!", flush=True) | |
| print(f"[DATA] Total examples: {total}", flush=True) | |
| print(f"[DATA] Output: {OUTPUT}", flush=True) | |