Twi patient symptom descriptions with fine-grained English triage tags, generated from Ghanaian health speech
# Ghana Health Symptoms
A pipeline that turns **published Twi health speech** into a **dataset of
patient-voice symptom descriptions in Twi, each tagged with one fine-grained
English phrase** naming the presenting problem.
The point is the language crossing. A patient describes what they feel in Twi, in
the words people actually use; the tag says exactly what the problem is in one
line of English, so a health worker who does not read Twi can triage, route or
search it at a glance.
```
symptom_twi Me kotodwe dompe no ano yɛ me ya na eye 'krikri' na keka me sɛ menante a.
Nnansa ni a mentumi nnante kwan ware koraa na mede ngo saa ho nso ammo me.
ipa_twi me kʰotʰodʒe dompʰe no ano jɛ me ja na eje kʰɾɪkʰɾɪ na kʰekʰa me sɛ menantʰe a ...
tag_en Three-day painful knee joint with grating sensation during walking
body_system Bones, Joints & Muscles
```
Every description is grounded: it is generated from one transcribed passage of
real Twi health speech, reusing that passage's body vocabulary and turns of
phrase, and the passage travels with it in `source_twi` so any row can be checked
against the speech it came from.
```
ghanaopendata/twi-health-asr-gemini-500hrs (57 GB, 59,291 rows)
│ 01 read ONLY the transcription column from the remote parquet shards
▼
transcriptions.csv row_id, shard, index_in_shard, transcription
│ 02 Gemini generation, up to 8 patient descriptions per passage
▼
symptoms_output.jsonl nested: passage → symptoms
│ 03 flatten
▼
symptoms_flattened.csv one row per description, + source passage
│ 04 validate ── fails the run if descriptions are not Twi, not first
│ person, or the tags are unusable for triage
▼
symptoms_clean.csv
│ 05 ghana-g2p phonemisation, native Asante Twi rules
▼
symptoms_ipa.csv + ipa_twi
│ 06 write card, push
▼
Hugging Face dataset
```
## Quick start
```bash
pip install -r requirements.txt
export GEMINI_API_KEY=... …