whisper-base-japanese-anime
Try the live demo on Spaces โ record audio or use pre-loaded anime samples to compare base vs fine-tuned model.
A fine-tuned version of openai/whisper-base for Japanese anime speech recognition.
Model Description
This model was fine-tuned on the SFW split of joujiboi/japanese-anime-speech-v2 โ a dataset of Japanese anime voice clips paired with transcriptions. The goal is to improve Whisper's accuracy on anime-style Japanese speech, which includes expressive intonation, character voices, and domain-specific vocabulary.
Training Details
Training was done incrementally across 26 sequential ranges of ~10k samples each (10k โ 269k), with 800 gradient steps per range. This progressive approach allowed monitoring CER at each stage.
Training Hyperparameters
Training Progression
Key Results
- CER reduction: 44.3% โ 31.2% (~30% relative improvement)
- Validation loss reduction: 0.892 โ 0.563 (37% drop)
- Best CER achieved at 250k-260k range: 30.6%
- Validation loss steadily decreased throughout training
Usage
import torch
from transformers import WhisperProcessor, WhisperForConditionalGeneration
# Load model and processor
processor = WhisperProcessor.from_pretrained(
"sky9262/whisper-base-japanese-anime",
language="Japanese",
task="transcribe",
)
model = WhisperForConditionalGeneration.from_pretrained(
"sky9262/whisper-base-japanese-anime"
)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
# Transcribe audio
import soundfile as sf
audio_array, sampling_rate = sf.read("your_audio.wav")
inputs = processor.feature_extractor(
audio_array,
sampling_rate=sampling_rate,
return_tensors="pt",
).input_features.to(device)
with torch.no_grad():
predicted_ids = model.generate(
inputs,
language="ja",
task="transcribe",
)
transcription = processor.tokenizer.batch_decode(
predicted_ids,
skip_special_tokens=True,
)[0]
print(transcription)
Audio Samples & Transcriptions
15 expressive anime voice samples (unseen test set) comparing base openai/whisper-base vs. fine-tuned model.
These clips feature shouting, panic, teasing, anger, and more -- areas where the base model often hallucinates or loops.
1. Cheerful Greeting (sample 1305, 3.4s)
2. Panicked Scream (sample 1340, 5.5s)
3. Crying for Help โ JP/EN Mix (sample 1343, 5.8s)
4. Playful Teasing (sample 1369, 5.9s)
5. Over-the-top Shock (sample 1370, 8.0s)
6. Disappointed Sigh (sample 1416, 3.8s)
7. Stuttering Shock (sample 1469, 4.1s)
8. Childish Insistence (sample 1502, 5.9s)
9. Furious Struggle (sample 1515, 6.0s) โ ๏ธ Base model hallucinates
10. Whining / Pouting (sample 1542, 5.0s)
11. Alarmed Demand (sample 1627, 2.9s)
12. Cute Excitement (sample 1661, 3.7s) โ ๏ธ Base model hallucinates
13. Angry Scolding (sample 1728, 4.6s)
14. Desperate Urgency (sample 1740, 4.5s)
15. Elongated Refusal (sample 1768, 3.0s)
โ ๏ธ NSFW Samples (Click to expand) โ Contains explicit anime voice content. Viewer discretion advised.
Warning: The following 15 samples are from the NSFW split and contain sexually explicit voice acting.
They are included to demonstrate the model's ability to transcribe emotionally extreme and non-standard speech
where the base model completely fails (repetition loops, hallucinations).
NSFW 1. Apologetic Crying (nsfw #6, 6.2s)
NSFW 2. Teasing / Seductive (nsfw #16, 5.7s)
NSFW 3. Flustered Embarrassment (nsfw #29, 5.9s)
NSFW 4. Confused Protest (nsfw #33, 6.0s)
NSFW 5. Exhibitionist Excitement (nsfw #46, 6.8s)
NSFW 6. Victory Panting (nsfw #60, 4.8s) โ ๏ธ Base model hallucinates
NSFW 7. Embarrassed Protest (nsfw #75, 5.6s)
NSFW 8. Short Shock (nsfw #84, 2.1s) โ ๏ธ Base model hallucinates
NSFW 9. Angry Embarrassment (nsfw #89, 6.7s) โ ๏ธ Base model hallucinates
NSFW 10. Overwhelmed Scream (nsfw #356, 2.7s) โ ๏ธ Base model hallucinates
NSFW 11. Surprised Protest (nsfw #359, 6.9s) โ ๏ธ Fine-tuned model loops
NSFW 12. Intense Overwhelm (nsfw #404, 9.2s) โ ๏ธ Both models hallucinate
NSFW 13. Sudden Panic (nsfw #439, 3.3s) โ ๏ธ Base model hallucinates
NSFW 14. Desperate Plea (nsfw #456, 7.0s)
NSFW 15. Falling Panic (nsfw #484, 4.6s) โ ๏ธ Base model hallucinates
Pure Moaning / Non-verbal Vocalization
These 5 samples contain no intelligible words โ only moaning, panting, and gasping.
The base model completely hallucinates on all of them. The fine-tuned model also struggles but produces shorter, more contained output.
NSFW 16. Soft Panting (nsfw #136, 8.8s) โ ๏ธ Both loop
NSFW 17. Intense Climax Scream (nsfw #176, 5.3s) โ ๏ธ Both loop
NSFW 18. Subdued Gasping (nsfw #272, 8.5s) โ ๏ธ Both loop
NSFW 19. Exhausted Breathing (nsfw #384, 9.9s) โ ๏ธ Both loop
NSFW 20. High-pitched Climax (nsfw #468, 5.5s) โ ๏ธ Both loop
Evaluation
Evaluated on unseen test samples from the SFW split using Character Error Rate (CER), the standard metric for Japanese ASR (since Japanese lacks clear word boundaries).
CER is computed as:
CER = (substitutions + insertions + deletions) / len(reference)
Limitations
- Domain-specific: Optimized for anime-style Japanese speech. Performance on other Japanese speech domains (news, conversation, etc.) may differ from the base model.
- Base model size: This is whisper-base (74M params). Larger variants (small, medium, large) would likely achieve better CER.
- SFW only: Trained only on the SFW portion of the dataset.
- Single speaker variability: Anime speech has high variability in tone, pitch, and speaking style which can still cause errors.
Citation
If you use this model, please cite the original Whisper paper and the training dataset:
@article{radford2022whisper,
title={Robust Speech Recognition via Large-Scale Weak Supervision},
author={Radford, Alec and Kim, Jong Wook and Xu, Tao and Brockman, Greg and McLeavey, Christine and Sutskever, Ilya},
journal={arXiv preprint arXiv:2212.04356},
year={2022}
}
Dataset: joujiboi/japanese-anime-speech-v2