jsoul/geo-perturbation-grouping-train
GEO Gene-Perturbation Grouping — Train / Validation Supervised fine-tuning (SFT) data for teaching an LLM to read the sample metadata of a NCBI GEO gene-expression series and organize its samples into valid genetic-perturbation case/control experimental groups. This repository holds the train and validation splits. The held-out test set lives in a separate private repo: jsoul/geo-perturbation-grouping-test. What the task is Given a GEO study (its… See the full description on the dataset page: https://huggingface.co/datasets/jsoul/geo-perturbation-grouping-train.
GEO Gene-Perturbation Grouping — Train / Validation
Supervised fine-tuning (SFT) data for teaching an LLM to read the sample metadata of a NCBI GEO gene-expression series and organize its samples into valid genetic-perturbation case/control experimental groups.
This repository holds the train and validation splits. The held-out test set lives in a separate private repo: `jsoul/geo-perturbation-grouping-test`.
What the task is
Given a GEO study (its title/summary/design plus a table of samples — GSM IDs with source_name, characteristics, treatment, description, etc.), the model must return the subset of samples that form clean perturbation experiments and group them as case vs. control. A valid group requires (among other rules): human samples only, a single cell line, a single allowed perturbation method (KD, KO, or OE), exactly one wild-type target gene (valid HGNC symbol), and ≥2 controls and ≥2 cases matched on cell line, method, and time point. Studies with no clean group must return No valid groups found. The full rulebook is provided verbatim as the system prompt in every example.
Data format
Each row is a single-turn chat in the standard messages layout, plus a small metadata struct:
- `system` — a fixed 7,091-character rulebook (identical across every example) defining eligibility criteria, name-interpretation heuristics, control rules, data-type rules, exceptions, and the exact required output format.
- `user` — the study's metadata: a worked example, then the target study's title/summary/design and a per-sample table. Length varies widely (~4.7k–113k characters; median ~6.7k).
- `assistant` — the target answer. Either one or more groups in the exact format below, or the literal string
No valid groups found.
Target output format
Group <n>:
Cell line: <cell line>
Perturbation method: <KD | KO | OE>
Target gene: <HGNC symbol>
Control: <comma-separated GSM IDs>
Case: <comma-separated GSM IDs>Example (GSE62175, two groups):
Group 1:
Cell line: HEK293
Perturbation method: KD
Target gene: MAML1
Control: GSM1520991,GSM1520992
Case: GSM1520993,GSM1520994
Group 2:
Cell line: HEK293
Perturbation method: OE
Target gene: MAML1
Control: GSM1520985,GSM1520986,GSM1520987
Case: GSM1520988,GSM1520989,GSM1520990Splits & statistics
Accessions are disjoint across train, validation, and the external test set — no study appears in more than one split.
Perturbation-method distribution (per group, train / validation):
Groups per example range from 0 (no valid groups) up to 8; the large majority of positive examples contain 1–2 groups.
Usage
from datasets import load_dataset
ds = load_dataset("jsoul/geo-perturbation-grouping-train") # requires a token; private
train, val = ds["train"], ds["validation"]
row = train[0]
system = row["messages"][0]["content"]
user = row["messages"][1]["content"]
target = row["messages"][2]["content"]
print(row["metadata"]["accession"])The messages format plugs directly into chat-template SFT trainers (TRL SFTTrainer, Unsloth, Axolotl, etc.).
Licensing & provenance
Derived from publicly available metadata in NCBI GEO. The assistant targets are curated annotations produced for this project. Underlying GEO records are subject to NCBI's usage policies; individual studies retain their own attributions. Distributed here privately for research use — not an official NCBI product.
Citation
If you use this dataset, please cite this repository and acknowledge NCBI GEO as the metadata source.
