QCRI/Aslema-Synth-TN
Aslema-Synth-TN Aslema-Synth-TN is a fully synthetic Tunisian Derja corpus for spoken language understanding: speech annotated for intent and for slot filling. It was built for NADI 2026 Shared Task 5 to cover the intents and slots that are rare or absent in the real SLURP-TN training split, and it is the augmentation set behind the Aslema system, which ranked 1st in slot filling on the official test set. No human was recorded for this dataset. An LLM wrote the utterance text, a… See the full description on the dataset page: https://huggingface.co/datasets/QCRI/Aslema-Synth-TN.
Aslema-Synth-TN
Aslema-Synth-TN is a fully synthetic Tunisian Derja corpus for spoken language understanding: speech annotated for intent and for slot filling. It was built for NADI 2026 Shared Task 5 to cover the intents and slots that are rare or absent in the real SLURP-TN training split, and it is the augmentation set behind the Aslema system, which ranked 1st in slot filling on the official test set.
No human was recorded for this dataset. An LLM wrote the utterance text, a rule filter and a panel of LLM judges cut it down, and a text-to-speech model spoke it.
At a glance
Each text was spoken twice, by two versions of the same TTS model. Both are released, marked in the tts_system column.
The two systems saw the same text and the same reference-voice pool, so the pair supports a direct comparison of TTS fine-tuning as an augmentation choice. The counts differ because each system's output was filtered independently.
Counts in the figure are rounded, and its two per-system numbers are clip counts before the acoustic filter. The released counts are in the table above.
Development pipeline
The above figure summarizes the pipeline used to construct this dataset, from seed utterance selection to final audio rule-based filtering.
Repository contents
data/train-*.parquet: thetrainsplit, 12 shards (2.4 GB), with embedded audio the Hugging Face viewer can play.data/metadata.csv: the same rows as a flat table, no audio bytes. Itsfile_namecolumn names the WAV each row would occupy underdata/audio/.build_release.py: the script that produced both from the pipeline's working directory, including the anonymization steps.
Loose WAV files are not stored here. 22,940 small LFS objects would make the repo slow to clone for no extra information, since every byte is already in the parquet. Write them out locally in one pass:
import soundfile as sf, pathlib
from datasets import load_dataset
out = pathlib.Path("data/audio"); out.mkdir(parents=True, exist_ok=True)
for row in load_dataset("<your-username>/Aslema-Synth-TN", split="train"):
sf.write(out / f"{row['id']}.wav", row["audio"]["array"], 16000)Quick start
from datasets import load_dataset
ds = load_dataset("<your-username>/Aslema-Synth-TN", split="train")
print(ds[0]["intent"], ds[0]["text"])
print(ds[0]["audio"]["sampling_rate"], ds[0]["audio"]["array"].shape)To read only the labels, without downloading 2.4 GB of audio:
from huggingface_hub import hf_hub_download
import pandas as pd
path = hf_hub_download(
repo_id="<your-username>/Aslema-Synth-TN",
repo_type="dataset",
filename="data/metadata.csv",
)
print(pd.read_csv(path).head())Schema
data/metadata.csv carries the same columns plus file_name, and drops audio. One row, as it appears there:
file_name,id,text,annotated,intent,slots,generation_mode,generator_model,tts_system,duration
data/audio/synth_cov_addcontact_0_000.wav,synth_cov_addcontact_0_000,بلاهي حط النيمرو هذا في الريبيرتوار,بلاهي حط النيمرو هذا في <list_name> الريبيرتوار >,addcontact,"[{""label"": ""list_name"", ""value"": ""الريبيرتوار""}]",coverage,gemini-3.1-pro-preview,voxcpm_base,2.4The markup in annotated follows SLURP-TN: a slot opens with <label> and closes with a bare >. Stripping the markup returns text exactly.
Generation modes
Slot values in coverage rows are new, never copied from the training split, so the set also tests robustness to unseen values.
Label inventory
The label set is the shared task's own, which is why both general_greet and a bare greet appear. They are distinct labels in SLURP-TN, not a normalization error here.
Intended use
Recommended:
- augmenting low-resource Tunisian Derja SLU training sets. Mixing all 22,940 rows with the 2,677 real SLURP-TN training utterances gives the 25,617-utterance training set used by the Aslema system
- studying LLM-plus-TTS synthetic augmentation for spoken language understanding
- comparing stock against task-fine-tuned TTS, using the
tts_systemcolumn - robustness work on unseen slot values and rare intents
Not recommended:
- as an evaluation benchmark. This is augmentation data and its labels came from models, not humans; evaluate on the real SLURP-TN devtest or the shared task's official test set instead
- speaker identification or biometric profiling
- re-identifying, impersonating, or further cloning the voices underlying the audio
- any deployment where a synthetic annotation error would carry a safety cost
Ethics and limitations
The reference clips used for voice cloning come from the train split of the publicly released `Elyadata/SLURP-TN` corpus, the same corpus the shared task's real training data comes from. No audio recorded outside that public corpus was used, and the mapping from a synthetic clip back to the recording it was cloned from is deliberately not part of this release. Nothing here identifies the machines, accounts, or file paths used to produce it.
An LLM wrote every utterance from a label name and training-split few-shot examples, and was never shown personal data. Slot values are therefore invented entities: names, contact-list names, and email-like strings that fill the SLURP-TN slot schema. As a precaution, any string matching an email address or a run of seven or more digits was replaced before release with contact@example.com and 0000000 respectively; 363 email placeholders remain in the text. No other free-text scrubbing was applied.
Known limits:
- No human annotator ever validated a label. The filter is three automatic voters, and its error rate on this data is unmeasured.
- Synthesized speech lacks the prosody, disfluency, and channel variation of real spontaneous speech, so a model trained on this alone underperforms one trained on the mix. The paper reports both.
- Voice diversity is bounded by the 152-utterance reference pool.
- The intent distribution is deliberately flatter than the real one and reflects no natural prior over user requests.
- Tunisian Derja code-switches with French; the transcripts keep the Latin-script French tokens as generated.
License
Released under CC BY-NC-SA 4.0.
On lineage: the upstream Elyadata/SLURP-TN corpus, whose train split provided the voice-cloning references, declares no license on its dataset card. These terms cover the synthetic material produced here and grant no rights over that upstream corpus.
Citation
@inproceedings{shafiq2026aslema,
title = "Aslema at {NADI} 2026: Data Augmentation for Intent Recognition and Slot Filling",
author = "Shafiq, Tajwaar and Bhatti, Hunzalah Hassan and
Alam, Firoj and Chowdhury, Shammur Absar",
booktitle = "Proceedings of the Fourth Arabic Natural Language Processing Conference (ArabicNLP 2026)",
year = "2026",
address = "Budapest, Hungary",
publisher = "Association for Computational Linguistics"
}Please also cite the corpus the references and labels derive from, and the TTS model:
@article{elleuch2026slurptn,
title = "{SLURP-TN}: Resource for {T}unisian Dialect Spoken Language Understanding",
author = "Elleuch, Haroun and Mdhaffar, Salima and Est{\`e}ve, Yannick and Bougares, Fethi",
journal = "arXiv preprint arXiv:2603.21940",
year = "2026",
url = "https://arxiv.org/abs/2603.21940"
}
@article{zhou2026voxcpm2,
title = "{V}ox{CPM}2 Technical Report",
author = "Zhou, Yixuan and Zeng, Guoyang and Liu, Xin and others",
journal = "arXiv preprint arXiv:2606.06928",
year = "2026",
url = "https://arxiv.org/abs/2606.06928"
}