πŸ”οΈ 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.

IoU-F1 (Held-out) Held-out AP Training F1 License Framework

⚠️ Read this before evaluating: The headline "Train F1 0.975" is on 87 training videos. The number that matters for generalization is [email protected] = 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
[email protected] 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 [email protected] = 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    Ξ”
[email protected]:    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=True is required. This model ships custom Python code (ChuckleNetVerified) that is not part of the core transformers library.


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 [email protected] = 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"
  ]
}

Hugging Face

Part of the ChuckleNet laughter detection family β€” detecting comedy before it happens.

Downloads last month
12
Safetensors
Model size
121k params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for Hayasuki/ChuckleNet-Ten

Finetuned
(25)
this model