CoolFace
Datasetpublic

m0rtyddd/clario-synthetic-diary

Clario Synthetic Symptom Diary 411 (diary, structured_entities) pairs distilled from Orphanet rare-disease ↔ phenotype annotations and the Human Phenotype Ontology (HPO) using gpt-oss:20b (Apache-2.0) as the teacher model. Each example pairs a short colloquial diary entry written in a patient's voice with the structured list of medical entities that should be extracted from it (HPO-canonical names + IDs). The dataset is the training corpus for m0rtyddd/clario-gemma4-e4b-lora-v2… See the full description on the dataset page: https://huggingface.co/datasets/m0rtyddd/clario-synthetic-diary.

sourceHugging Facecc-by-4.0updated 4mo agoView on Hugging Face
0likes14downloads
Dataset Card

Clario Synthetic Symptom Diary

411 (diary, structured_entities) pairs distilled from Orphanet rare-disease ↔ phenotype annotations and the Human Phenotype Ontology (HPO) using gpt-oss:20b (Apache-2.0) as the teacher model. Each example pairs a short colloquial diary entry written in a patient's voice with the structured list of medical entities that should be extracted from it (HPO-canonical names + IDs).

The dataset is the training corpus for `m0rtyddd/clario-gemma4-e4b-lora-v2`, a LoRA adapter on Gemma 4 E4B for diary → HPO-entity extraction.

Splits

SplitExamplesFileHeld out by
train343train.jsonl—
validation68val.jsonldisease — 651 Orphanet disorders never appear in train
smoke train23smoke_train.jsonlquick sanity-check subset
smoke validation8smoke_val.jsonlquick sanity-check subset

The disease-held-out split matters: it tests whether a model trained on one set of diseases can extract phenotypes correctly when the same phenotypes appear in the context of a novel disease's narrative.

Schema (JSONL, one example per line)

json
{
  "diary": "Morning was hot, and I woke up with a pins and needles feeling all over my left arm. The doctor mentioned a weird blood vessel network in my brain that might be causing headaches. I also feel pressure in my eyes and my vision is blurry sometimes, like my eyes are stuck in a fog.",
  "target": {
    "entities": [
      {
        "name_colloquial": "pins and needles feeling",
        "name_canonical": "Paresthesia",
        "hpo_id": "HP:0003401",
        "type": "symptom"
      },
      {
        "name_colloquial": "weird blood vessel network",
        "name_canonical": "Arteriovenous malformation",
        "hpo_id": "HP:0100026",
        "type": "symptom"
      },
      {
        "name_colloquial": "pressure in my eyes",
        "name_canonical": "Glaucoma",
        "hpo_id": "HP:0000501",
        "type": "symptom"
      }
    ]
  },
  "source_disease": "ORPHA:2875"
}

Fields

  • —`diary` (string) — short English diary entry in patient voice. Roughly 2-5 sentences, colloquial register, may include mood / context.
  • —`target.entities` (list) — gold extraction target.
  • —name_colloquial (string) — substring as it appears in the diary.
  • —name_canonical (string) — HPO canonical phenotype name.
  • —hpo_id (string) — HP:NNNNNNN. Resolvable in the HPO ontology; for downstream use, prefer deterministic lookup from `name_canonical` over consuming this field as-is.
  • —type (enum) — one of symptom, lab_marker, med, trigger, behavior.
  • —`source_disease` (string) — Orphanet identifier of the disease that seeded this diary entry, e.g. ORPHA:2875.

Statistics

Value
Total examples411
Avg entities per example2.93
Unique HPO terms covered~1.5k (of ~17k in HPO)
Unique source diseases~411 (one per example, then split by disease for val)
Entity typessymptom (majority), lab_marker, med, trigger, behavior
LanguageEnglish

How it was built

  1. 1.Seed. Sample (disease, phenotype-set) tuples from Orphanet en_product4.xml (2026-05-13 snapshot), one tuple per example.
  2. 2.Prompt the teacher. gpt-oss:20b (Apache-2.0, via Ollama) is given the disease's HPO phenotype set and asked to write a short plausible diary entry in patient voice plus the corresponding structured extraction target.
  3. 3.Post-process. Canonical names are checked against the HPO synonym index built from hp.obo. Entries that fail JSON validity or whose canonical names cannot resolve to an HPO ID are discarded.
  4. 4.Disease-held-out split. ~80 % / 20 % split by disease: every disease ID appears in exactly one of train or val.

Build scripts are in the upstream Clario repo (scripts/build_synth.py, scripts/eval.py).

Intended use

  • —Training and evaluating symptom-extraction models that map colloquial patient text to HPO-canonical entities.
  • —Building synonym-aware matchers and evaluation harnesses for clinical NLP.
  • —Educational use in NLP / clinical-informatics courses.

Limitations

  • —Synthetic, not clinical. Both diaries and extraction targets are produced by an LLM teacher seeded from public ontologies. A manual golden set on real patient diaries remains the right next measurement gate.
  • —English only.
  • —Coverage is partial. ~1.5k of the ~17k HPO terms appear in the data, biased toward Orphanet-listed rare-disease phenotypes. Common primary-care symptoms may be underrepresented.
  • —HPO ID quality. IDs were validated to resolve in the ontology at build time, but downstream consumers should re-derive IDs from name_canonical to be safe against teacher errors.

Licence and attribution

Released under CC-BY-4.0, propagating the licence chain of the upstream sources:

  • —HPO (Human Phenotype Ontology) — CC-BY-4.0. Köhler S. et al. (2021) The Human Phenotype Ontology in 2021. Nucleic Acids Research, 49(D1):D1207–D1217. <https://hpo.jax.org/>
  • —Orphanet rare-disease ↔ phenotype annotations (en_product4.xml, 2026-05-13 snapshot) — free for academic and commercial use with attribution. Orphadata: Free access products on rare diseases and orphan drugs. INSERM 1978. <https://www.orphadata.com/>
  • —Teacher: gpt-oss:20b (Apache-2.0).

Cite as:

bibtex
@misc{okulov2026clario_synthetic_diary,
  title  = {{Clario} Synthetic Symptom Diary},
  author = {Okulov, Maksim},
  year   = {2026},
  howpublished = {\url{https://huggingface.co/datasets/m0rtyddd/clario-synthetic-diary}}
}