Logo Lanfrica

kibaraki/data-augmentation-for-low-resource-asr

Domain:

natural language processing

Record type:

software
Creator:
kib
Host:
Self-contained data augmentation for low-resource ASR # data-augmentation-for-low-resource-asr ## Paper Standard data augmentation methods like SpecAugment have limited benefit in extremely low-resource settings. Furthermore, low-resource languages suffer from a lack of large text corpora or unlabeled/labeled audio to draw from. To address this limitation, we investigate two simple generation-based augmentation methods: Tag-Based and Random Replacement. Tag-Based Replacement uses only annotations commonly produced as part of the language documentation process, whereas Random Replacement does not use any linguistic information at all. Experiments on four extremely low-resource languages reveal a synergistic effect: while individual modification-based augmentations like SpecAugment yield marginal or inconsistent gains, combining them with generation-based augmentation reduces WER by an average of 4.7% absolute (10.0% relative), peaking at 8.0% (13.5% relative) reduction for Nashta. Crucially, maximizing variation proves more effective than preserving syntactic coherence. ## TL;DR Data augmentation for ASR in low-resource languages, using only the training data. ## Data - Vatlongos | (CC BY-NC-ND 3.0) - Nashta | (CC BY-NC 2.5) - Shinekhen Buryat | (CC BY-SA 4.0), dataset and models on Hugging Face - Kakabe | (CC BY-NC-ND 3.0) - LibriSpeech (English) | (CC BY 4.0) ## Code - `finetune_wav2vec2.py`: fine-tuning the models - `pipeline.py`: evaluating the models - `data_processing/` - `adjust_cols.py`: adjust columns in TTS-generated csv to columns matching training data csv - `combine_splits.py`: combine different splits into one csv - `create_vocab.py`: given all annotated data (before making splits), generate `vocab.json` of all phonemes/characters - `extract_crop_kakabe.py`: example of `extract_crop.py` to extract transcription from XML file - `sample.py`: sample the TTS-generated data, to maintain 1:1 ratio of synthetic to original data - `train_split.py`: given all annotated data, make train/val/test splits - `data_ …