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
File size: 13,004 Bytes
0e7f317 2af58cd 0e7f317 2af58cd 0e7f317 2af58cd 0e7f317 6de1c9c 2af58cd 8620c49 0e7f317 2fdc6c1 0e7f317 8620c49 2af58cd 0e7f317 8620c49 2fdc6c1 8620c49 2fdc6c1 8620c49 0e7f317 2fdc6c1 8620c49 0e7f317 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 0e7f317 2fdc6c1 0e7f317 2fdc6c1 0e7f317 2fdc6c1 6de1c9c 2fdc6c1 0e7f317 2fdc6c1 0e7f317 8620c49 2fdc6c1 8620c49 2fdc6c1 8620c49 2fdc6c1 8620c49 2fdc6c1 8620c49 2af58cd 0e7f317 2fdc6c1 8620c49 2fdc6c1 2af58cd 2fdc6c1 8620c49 2fdc6c1 2af58cd 2fdc6c1 8620c49 2fdc6c1 8620c49 2fdc6c1 8620c49 2fdc6c1 0e7f317 2fdc6c1 0e7f317 2fdc6c1 6de1c9c 2fdc6c1 0e7f317 2fdc6c1 8620c49 2fdc6c1 0e7f317 2af58cd 2fdc6c1 0e7f317 2fdc6c1 8620c49 0e7f317 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 0e7f317 2fdc6c1 0e7f317 2fdc6c1 0e7f317 2fdc6c1 8620c49 2fdc6c1 8620c49 2fdc6c1 8620c49 2fdc6c1 8620c49 2fdc6c1 8620c49 2fdc6c1 0e7f317 2af58cd 0e7f317 2af58cd 0e7f317 8620c49 2fdc6c1 0e7f317 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 2fdc6c1 6de1c9c 8620c49 0e7f317 8620c49 0e7f317 2fdc6c1 0e7f317 8620c49 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 | ---
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>
|