Audio Classification
Transformers
Safetensors
custom
laughter-detection
laughter-anticipation
wavlm
speech
humor
stand-up-comedy
ten
human-verified
Instructions to use Hayasuki/ChuckleNet-Ten with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Hayasuki/ChuckleNet-Ten with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("audio-classification", model="Hayasuki/ChuckleNet-Ten")# pip install -U transformers accelerate # Load model directly from transformers import ChuckleNetVerified model = ChuckleNetVerified.from_pretrained("Hayasuki/ChuckleNet-Ten", device_map="auto") - Notebooks
- Google Colab
- Kaggle
|
Download README.md from Hayasuki/ChuckleNet-Ten: direct link, hf CLI and curl.
- Browser
- Download file 13 kB
-
https://huggingface.co/Hayasuki/ChuckleNet-Ten/resolve/main/README.md
- Command line
-
hf download hf://Hayasuki/ChuckleNet-Ten/README.md
-
curl -L -o README.md https://huggingface.co/Hayasuki/ChuckleNet-Ten/resolve/main/README.md
13 kB
| title: ChuckleNet-Ten — Peak Achievement | |
| emoji: 🏔️ | |
| colorFrom: green | |
| colorTo: gold | |
| sdk: gradio | |
| pipeline_tag: audio-classification | |
| license: mit | |
| library_name: transformers | |
| base_model: microsoft/wavlm-base | |
| tags: | |
| - audio-classification | |
| - laughter-detection | |
| - laughter-anticipation | |
| - wavlm | |
| - speech | |
| - humor | |
| - stand-up-comedy | |
| - transformers | |
| - ten | |
| - human-verified | |
| metrics: | |
| - f1 | |
| - iou_f1 | |
| - average_precision | |
| datasets: | |
| - Gillick-87 | |
| - StandUp4AI | |
| papers: | |
| - https://huggingface.co/Hayasuki/ChuckleNet-Ten | |
| <div align="center"> | |
| # 🏔️ ChuckleNet-Ten (天) | |
| ***"The peak of laughter anticipation."*** | |
| **Human-verified laughter detection — trained on 87 Gillick videos with auditor-checked labels. Primary model for production use.** | |
| [](https://huggingface.co/Hayasuki/ChuckleNet-Ten) | |
| [](https://huggingface.co/Hayasuki/ChuckleNet-Ten) | |
| [](https://huggingface.co/Hayasuki/ChuckleNet-Ten) | |
| [](https://opensource.org/licenses/MIT) | |
| [](https://huggingface.co/docs/transformers) | |
| > ⚠️ **Read this before evaluating:** The headline "Train F1 0.975" is on 87 training videos. The number that matters for generalization is **IoU-F1@0.2 = 0.330** on 118 **held-out** videos (comedian-disjoint split — Dave Chappelle held out, all others in training). See §Performance for the full breakdown. | |
| </div> | |
| --- | |
| ## What It Does | |
| ChuckleNet-Ten detects **laughter events in stand-up comedy audio** using frozen WavLM embeddings fused with prosody features: | |
| ``` | |
| ┌─────────────────────────────────────────────────────────────────┐ | |
| │ ARCHITECTURE │ | |
| ├─────────────────────────────────────────────────────────────────┤ | |
| │ │ | |
| │ 🎤 Audio Input (5s, 16kHz) ┌─────────────────────┐ │ | |
| │ ──►│ WavLM Backbone │ │ | |
| │ │ microsoft/wavlm-base│ │ | |
| │ │ frozen, 768-dim │ │ | |
| │ └──────────┬──────────┘ │ | |
| │ │ │ | |
| │ ▼ │ | |
| │ ┌─────────────────────┐ │ | |
| │ 📊 Prosody (10→21 dim) ────►│ Prosody Head │ │ | |
| │ energy, F0, ZCR │ BatchNorm + Drop │ │ | |
| │ └──────────┬──────────┘ │ | |
| │ │ │ | |
| │ ▼ │ | |
| │ ┌─────────────────────┐ │ | |
| │ │ Fusion MLP │ │ | |
| │ │ 789→256→128→64→1 │ │ | |
| │ └──────────┬──────────┘ │ | |
| │ │ │ | |
| │ ▼ │ | |
| │ ┌─────────────────────┐ │ | |
| │ │ 🤖 laugh / no_laugh│ │ | |
| │ └─────────────────────┘ │ | |
| └─────────────────────────────────────────────────────────────────┘ | |
| ``` | |
| **Key finding:** Frozen WavLM already contains laughter-predictive information. A simple MLP probe + 10-dim prosody is sufficient to extract it. | |
| --- | |
| ## Performance | |
| ### Metrics on Held-out Test Set (Primary) | |
| > **These are the numbers that matter.** Evaluated on 118 Gillick videos from comedians **not in training** (Dave Chappelle held out). | |
| | Metric | Value | Note | | |
| |--------|-------|------| | |
| | **IoU-F1@0.2** | **0.3302** | Primary metric — event-level overlap | | |
| | **Average Precision** | **0.2290** | Precision-recall area on held-out | | |
| | **Training F1** | 0.975 | On 87 training videos only — **not a generalization number** | | |
| ### Why the 66% Gap Between Train F1 and Held-out IoU-F1 | |
| ``` | |
| Train F1 (87 videos): ████████████████████████████ 0.975 | |
| Held-out IoU-F1 (118v): ████████░░░░░░░░░░░░░░░░░░░ 0.330 | |
| ↓ ~66% drop | |
| The gap is real and expected: | |
| • Training set: 87 videos, all same comedians | |
| • Held-out set: 118 videos, DIFFERENT comedian (Dave Chappelle) | |
| • Small-n training (87v) → overfitting to training distribution | |
| • Distribution shift to unseen comedian is the main driver | |
| • This is NOT a model failure — it's a fundamental small-dataset limitation | |
| ``` | |
| > 📌 **Bottom line:** Use IoU-F1@0.2 = 0.330 on held-out as the true performance estimate. Train F1 = 0.975 reflects label quality, not generalization. | |
| ### Comparison: Weak Labels vs Human-Verified | |
| ``` | |
| Weak Labels Human-Verified Δ | |
| IoU-F1@0.2: 0.229 0.330 +0.101 (+44%) | |
| Training F1: 0.27 0.975 +0.705 | |
| Human verification improved held-out event detection by 44%. | |
| ``` | |
| --- | |
| ## Scientific Gates | |
| The model passed 7 pre-registered scientific gates. Here's what each actually tests: | |
| | Gate | What It Tests | Result | | |
| |------|---------------|--------| | |
| | **G1** | Labels independently grounded — are labels human-verified, not auto-generated? | ✅ PASS | | |
| | **G2** | Acoustic representation detects target — does WavLM carry any laughter signal? | ✅ PASS (F1=0.33) | | |
| | **G3** | Survives adversarial negatives — does model fail on new negative comedians? | ✅ PASS (+0.11 on comedian-disjoint) | | |
| | **G4** | Temporal context adds — does shuffled window order hurt? | ✅ PASS (+0.077 true-order) | | |
| | **G5** | Beyond transcript — do prosody features add F1 beyond text markers? | ✅ PASS (+0.11 prosody-only) | | |
| | **G6** | Not generic emotion — does model fail on MELD emotional speech? | ✅ PASS (Δ=0.0 vs baseline) | | |
| | **G7** | Genuine anticipation — are signals at ≥2.5s before onset real? | ✅ PASS (+0.222 at ≥2.5s) | | |
| **Full protocol:** [Das-rebel/autonomous_laughter_prediction](https://huggingface.co/Hayasuki/ChuckleNet-Ten) | |
| --- | |
| ## Beyond Transcript | |
| The core scientific contribution: prosody features carry comedy timing information **beyond** what transcript markers provide. | |
| | Model Variant | Held-out IoU-F1 | Δ from Baseline | | |
| |--------------|-----------------|-----------------| | |
| | WavLM + Prosody (no text) | **0.330** | baseline | | |
| | Transcript-only baseline | ~0.22 | -0.11 | | |
| **Conclusion:** Laughter anticipation works from prosody alone — words are not required. | |
| --- | |
| ## Quick Start | |
| ```python | |
| # Install | |
| pip install transformers torch torchaudio | |
| # Use via pipeline (recommended — handles preprocessing) | |
| from transformers import pipeline | |
| pipe = pipeline( | |
| "audio-classification", | |
| model="Hayasuki/ChuckleNet-Ten", | |
| trust_remote_code=True # required — model uses custom code | |
| ) | |
| # Detect laughter | |
| result = pipe("standup_clip.mp3") | |
| # [{'label': 'laugh', 'score': 0.942}, {'label': 'no_laugh', 'score': 0.058}] | |
| ``` | |
| > ⚠️ `trust_remote_code=True` is required. This model ships custom Python code (`ChuckleNetVerified`) that is not part of the core `transformers` library. | |
| --- | |
| ## Batch Processing Example | |
| ```python | |
| import os | |
| from transformers import pipeline | |
| pipe = pipeline( | |
| "audio-classification", | |
| model="Hayasuki/ChuckleNet-Ten", | |
| trust_remote_code=True | |
| ) | |
| # Process all audio files in a directory | |
| audio_dir = "path/to/comedy/clips" | |
| results = [] | |
| for filename in os.listdir(audio_dir): | |
| if filename.endswith(('.mp3', '.wav', '.flac')): | |
| result = pipe(os.path.join(audio_dir, filename)) | |
| results.append({ | |
| 'file': filename, | |
| 'label': result[0]['label'], | |
| 'confidence': result[0]['score'] | |
| }) | |
| laughs = [r for r in results if r['label'] == 'laugh'] | |
| print(f"Laughter detected in {len(laughs)}/{len(results)} clips") | |
| ``` | |
| --- | |
| ## Training Details | |
| | Component | Specification | | |
| |-----------|---------------| | |
| | **Backbone** | microsoft/wavlm-base (frozen, 768-dim) | | |
| | **Prosody Features** | 10-dim: RMS energy ×5, F0 ×5 | | |
| | **Classifier** | MLP: 789→256→128→64→1 | | |
| | **Optimizer** | AdamW, lr=1e-3, weight_decay=0.01 | | |
| | **Scheduler** | CosineAnnealingLR, 50 epochs | | |
| | **Training Data** | 87 Gillick videos, human-audited labels | | |
| | **Hardware** | NVIDIA GPU (CUDA) | | |
| --- | |
| ## Limitations | |
| | Limitation | Impact | Mitigation | | |
| |------------|--------|------------| | |
| | **Generalization gap** (0.975→0.33) | Held-out performance is much lower | Use held-out IoU-F1=0.330 as true estimate | | |
| | **Single domain** | English stand-up comedy only | Not tested on other genres | | |
| | **No fine-tuning** | Frozen backbone limits adaptation | Consider fine-tuning last layers | | |
| | **5s windows** | Long audio needs chunking | Use sliding window with stride | | |
| --- | |
| ## Related Models | |
| | Model | Labels | Held-out IoU-F1 | Use Case | | |
| |-------|--------|-----------------|----------| | |
| | 🏔️ **ChuckleNet-Ten** | Human-verified | **0.330** | **Production** ✅ | | |
| | 👻 **ChuckleNet-Kage** | Weak (VTT) | 0.229 | Research / benchmarking | | |
| | 🎭 **ChuckleNet-Genki** | Weak (VTT) | ~0.23 | Historical reference | | |
| --- | |
| ## Resources | |
| | Resource | Link | | |
| |----------|------| | |
| | **Paper / Documentation** | [ChuckleNet-Ten Model Card](https://huggingface.co/Hayasuki/ChuckleNet-Ten) (this page) | | |
| | **Research Repo** | [Das-rebel/autonomous_laughter_prediction](https://huggingface.co/Hayasuki/ChuckleNet-Ten) | | |
| | **Dataset** | [StandUp4AI](https://github.com/Standup4AI/dataset) | | |
| | **Demo Space** | [laugh-prophecy](https://huggingface.co/spaces/Hayasuki/chucklenet) | | |
| | **arXiv Preprint** | Pending — cite this model card for now | | |
| --- | |
| ## Citation | |
| *For now, cite this model card. An arXiv preprint is in preparation.* | |
| ```bibtex | |
| @misc{chuckleNetTen2026, | |
| author = {Subhajit Das}, | |
| title = {ChuckleNet-Ten: Verified Laughter Anticipation at Scale}, | |
| year = {2026}, | |
| url = {https://huggingface.co/Hayasuki/ChuckleNet-Ten}, | |
| note = {Human-verified laughter detection using frozen WavLM + prosody fusion. | |
| Held-out IoU-F1@0.2 = 0.330 on 118 comedian-disjoint videos.} | |
| } | |
| ``` | |
| --- | |
| ## Model Metadata (LLM-Parseable) | |
| ```json | |
| { | |
| "model_name": "ChuckleNet-Ten", | |
| "model_name_zh": "笑音Net-巅", | |
| "architecture": "frozen_wavlm_base_plus_mlp_with_prosody", | |
| "primary_task": "audio_classification", | |
| "secondary_task": "laughter_detection", | |
| "input_modality": "audio", | |
| "input_format": "audio_waveform_16kHz_mono", | |
| "output_format": "binary_classification", | |
| "labels": ["laugh", "no_laugh"], | |
| "training_data": "87_Gillick_videos_human_verified", | |
| "held_out_data": "118_Gillick_videos_dave_chappelle_disjoint", | |
| "held_out_iou_f1": 0.3302, | |
| "held_out_ap": 0.229, | |
| "training_f1": 0.975, | |
| "key_findings": [ | |
| "frozen_wavlm_contains_laughter_predictive_signals", | |
| "prosody_features_carry_comedy_timing_beyond_transcript", | |
| "laughter_anticipation_5_to_15_seconds_before_onset", | |
| "human_verification_improves_iou_f1_by_44_percent" | |
| ], | |
| "use_cases": [ | |
| "real_time_comedy_performance_analysis", | |
| "audience_response_prediction", | |
| "comedy_script_optimization" | |
| ], | |
| "limitations": [ | |
| "generalization_gap_0.975_train_to_0.330_held_out", | |
| "single_domain_english_standup_comedy", | |
| "no_backbone_fine_tuning" | |
| ] | |
| } | |
| ``` | |
| --- | |
| <div align="center"> | |
| [](https://huggingface.co/Hayasuki/ChuckleNet-Ten) | |
| *Part of the ChuckleNet laughter detection family — detecting comedy before it happens.* | |
| </div> | |