zeuneuski-audio / README.md
xezpeleta's picture
Upload README.md with huggingface_hub
99dd802 verified
|
Raw
History Blame Contribute Delete
2.32 kB
---
language:
- eu
tags:
- basque
- euskara
- dialect
- speech
- whisper
- audio-classification
license: apache-2.0
datasets:
- Ahotsak
- Mintzoak
metrics:
- macro_f1
pipeline_tag: audio-classification
---
# Zeuneuski Audio β€” Basque Dialect Classifier from Speech
5-class Basque dialect classifier (Western, Central, Navarrese, Navarrese-Labourdin, Souletin)
using a frozen Whisper large-v3-eu encoder + MLP classifier.
This is the speech counterpart of the [zeuneuski text classifier](https://huggingface.co/itzune/zeuneuski).
## Model variants
| Variant | Macro F1 | Trained on | Description |
|---|---|---|---|
| `whisper_dialect_merged` | 0.5193 | Full merged Ahotsak+Mintzoak (balanced 10K) | Baseline β€” mean_std_max pooling, 768-dim MLP |
| `whisper_dialect_aug` | **0.5342** | Full merged + navarrese augmentation Γ—3 | **Best overall** β€” embedding-level augmentation |
| `whisper_dialect_fusion` | 0.6175 | Ahotsak subset (21% with transcriptions) | Audio+text fusion (Whisper + fastText logits). Limited to Ahotsak data. |
## Per-class F1 (best model: whisper_dialect_aug)
| Dialect | F1 |
|---|---|
| Western | 0.70 |
| Central | 0.34 |
| Navarrese | 0.38 |
| Navarrese-Labourdin | 0.83 |
| Souletin | 0.42 |
## How it works
1. Audio (16kHz mono WAV) β†’ Whisper large-v3-eu encoder
2. Encoder hidden states β†’ mean_std_max pooling β†’ 3840-dim vector
3. 3840-dim vector β†’ 2-layer MLP (768β†’384β†’5) β†’ dialect probabilities
## Requirements
- GPU with 6+ GB VRAM (runs on CPU too, ~8-10Γ— slower)
- `transformers`, `torch`, `numpy`, `soundfile`
- Whisper model auto-downloaded from `xezpeleta/whisper-large-v3-eu`
## Usage
```python
from src.models.speech.whisper_did import load_speech_model, predict_speech
# Load model (downloads Whisper encoder automatically)
encoder, mlp, label_encoder, scaler, config = load_speech_model(
model_dir="models/speech/whisper_dialect_aug"
)
# Predict
result = predict_speech("audio.wav", encoder, mlp, label_encoder, scaler, config)
print(result["dialect"], result["confidence"])
```
## Training data
Merged Ahotsak.eus (36K segments, 78h) + Mintzoak.eus (160K segments, 181h).
Town-disjoint 80/10/10 train/val/test splits (no town appears in more than one split).
Balanced subsampling to 10K per class. 5 classes with 258.9h total audio.