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")# Load model directly from transformers import ChuckleNetVerified model = ChuckleNetVerified.from_pretrained("Hayasuki/ChuckleNet-Ten", device_map="auto") - Notebooks
- Google Colab
- Kaggle
🏔️ 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.
⚠️ 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.
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
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
# 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=Trueis required. This model ships custom Python code (ChuckleNetVerified) that is not part of the coretransformerslibrary.
Batch Processing Example
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 (this page) |
| Research Repo | Das-rebel/autonomous_laughter_prediction |
| Dataset | StandUp4AI |
| Demo Space | laugh-prophecy |
| arXiv Preprint | Pending — cite this model card for now |
Citation
For now, cite this model card. An arXiv preprint is in preparation.
@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)
{
"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"
]
}
- Downloads last month
- 50
Model tree for Hayasuki/ChuckleNet-Ten
Base model
microsoft/wavlm-base