| --- |
| license: cc-by-4.0 |
| tags: [audio-classification, vocal-bursts, non-verbal, voiceclap, multi-label] |
| pretty_name: VocalBurst Classifier (multi-label) |
| --- |
| |
| # VocalBurst Classifier — multi-label |
|
|
| A **presence classifier** for non-speech **vocal bursts** (laughs, sighs, gasps, coughs, groans, throat |
| sounds, …) over the **82-class** LAION VocalBurst taxonomy + `no_burst`. **Multi-label** (independent |
| sigmoid per class) — a clip can contain several bursts. Works on pure bursts and bursts embedded in speech. |
|
|
| ## Architecture |
| `laion/voiceclap-commercial` (768-d, frozen) → **MLP 2048-wide × 4 deep** (LayerNorm+GELU+dropout) → 83 sigmoids. ~14.4M trainable params. |
|
|
| ## Training |
| - **Positives:** Gemini-confirmed single bursts (DACVAE, 82 classes) + **real speech-with-bursts** (gemini_pro_25, multi-label). |
| - **Negatives / speech carriers:** Emilia clips filtered burst-free by `laion/vocalburst-locator`. |
| - **~97k samples**: pure bursts + composites (burst + speech carriers + a 2nd burst) + 25% overlays (burst mixed over speech) + neg+neg. The speech carriers carry no label, so the head must localise the burst, not memorise audio. Balanced (≤1000/class); 50 epochs, AdamW, BCE with per-class pos-weight, best-mAP checkpoint. |
|
|
| > **v2 (current):** retrained with **9,000 multilingual burst-free negatives** (FLEURS: Chinese, Hindi, Bengali, Arabic, Persian, Urdu, Tamil, Telugu, Vietnamese, Thai, Indonesian, Japanese, Korean, Swahili, Yoruba, Zulu, Turkish, Russian) — fixes hallucinated bursts on non-European speech. |
|
|
| ## Results (Gemini-mixed validation) |
| | metric | fine (82) | coarse (16 families) | |
| |---|---|---| |
| | macro mAP | 0.39 | **0.64** | |
| | top-1 exact | 49% | – | |
| | a true label in top-3 | 77% | – | |
| Best when you take the **top-1** prediction (which the two-stage combo demo uses). Much stronger at the coarse "which family of sound" level than the exact fine subtype. |
|
|
| ## How it works |
| Two stages: a **frozen** `laion/voiceclap-commercial` audio encoder turns a clip into a **768-d embedding** |
| (`encode_waveform`, auto-downloaded — the repo needs no extra setup), then this small trained **MLP head** |
| maps it to **83 outputs = 82 VocalBurst classes + `no_burst`** (taxonomy: [LAION-AI/voice-taxonomies · vocalburst](https://github.com/LAION-AI/voice-taxonomies/tree/main/vocalburst)). |
| A **no-burst gate**: if `P(no_burst) ≥ 0.5` the clip is declared burst-free (no false alarm); otherwise the top classes are returned. Clips are truncated to the first 30 s (the encoder's window). |
| |
| ## Usage |
| ```python |
| from inference import VocalBurstClassifier |
| clf = VocalBurstClassifier("laion/vocalburst-classifier-multilabel") # HF repo id, or a local checkout dir |
| print(clf.predict("clip.wav")) # -> {no_burst, p_no_burst, top1, predictions:[(class,prob)], group} |
| ``` |
| |
| ## Files |
| `model.pt` (MLP weights) · `config.json` (arch) · `classes.json` (83 labels, index order) · |
| `class_to_group.json` (fine→16 coarse families) · `inference.py` · `example.py` · `requirements.txt`. |
| |
| ## Interactive demos (audio + predictions) |
| - Multi-label predictions vs ground truth: https://projects.laion.ai/procedural-voice-captions/vocalburst-predictions/ |
| - Single-burst classifier: https://projects.laion.ai/procedural-voice-captions/vocalburst-single/ |
| - Two-stage detect→classify combo: https://projects.laion.ai/procedural-voice-captions/vocalburst-combo/ |
| - On MOSS character voices: https://projects.laion.ai/procedural-voice-captions/vocalburst-character/ |
| |
| Training data + embeddings: [laion/vocalburst-classification](https://huggingface.co/datasets/laion/vocalburst-classification). |
| Embedder: [laion/voiceclap-commercial](https://huggingface.co/laion/voiceclap-commercial). License: CC-BY-4.0. |
| |