CoolFace
Datasetpublic

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.

sourceHugging Facecc-by-nc-sa-4.0updated 20d agoView on Hugging Face
2likes252downloads
Dataset Card

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

Dataset AttributeInformation
utterances22,940
audio22.12 hours, 16 kHz mono
median utterance3.36 s (range 0.64 to 14.40 s)
intent labels21
slot types / spans26 / 23,841
utterances with no slot6,765 (29%), by design
splitsone train split

Each text was spoken twice, by two versions of the same TTS model. Both are released, marked in the tts_system column.

`tts_system`UtterancesHoursKey
voxcpm_base11,87110.38stock VoxCPM
voxcpm_lora_ft11,06911.74VoxCPM after LoRA fine-tuning on ~2.8 h of SLURP-TN training speech
total22,94022.12

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

[image]

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: the train split, 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. Its file_name column names the WAV each row would occupy under data/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:

python
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

python
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:

python
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

columndescription
idunique utterance id: synth_<mode>_<intent>_<batch>_<index>, with a trailing _ft for the LoRA-fine-tuned system
audiosynthesized speech, 16 kHz mono
textTunisian Derja transcript
annotatedthe same transcript with inline SLURP-TN slot markup
intentintent label, one of 21
slotsJSON string: a list of {"label": ..., "value": ...}
generation_modecoverage, paraphrase, or distractor
generator_modelthe LLM that wrote the utterance
tts_systemvoxcpm_base or voxcpm_lora_ft
durationseconds

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.4

The markup in annotated follows SLURP-TN: a slot opens with <label> and closes with a bare >. Stripping the markup returns text exactly.

Generation modes

`generation_mode`utteranceshourspurpose
coverage17,89717.35fresh utterances for an intent, with newly invented slot values; rare intents got a larger quota
distractor3,3573.06slot-free utterances for slot-bearing intents, to hold slot precision up
paraphrase1,6861.71dialectal rephrasings of a real training utterance, with slot labels and values frozen
total22,94022.12

Slot values in coverage rows are new, never copied from the training split, so the set also tests robustness to unseen values.

Label inventory

intentutterancesintentutterances
general_greet2,445email_query1,173
email_addcontact2,079news_query1,093
general_joke1,967email_sendemail1,058
alarm_query1,958weather_query1,038
alarm_remove1,824quirky350
takeaway_query1,695query336
takeaway_order1,538sendemail285
email_querycontact1,400greet121
alarm_set1,174joke98
general_quirky1,174addcontact74
querycontact60
total22,940

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.

slotspansslotspansslotspans
date4,774time2,695person2,151
relation1,742personal_info1,586timeofday1,421
food_type1,408order_type1,204place_name1,079
joke_type956business_name883event_name880
business_type707weather_descriptor547email_address376
news_topic375media_type284house_place199
alarm_type129email_folder127meal_type112
general_frequency92list_name84transport_type14
personal12app_name4total23,841

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_system column
  • —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

bibtex
@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:

bibtex
@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"
}