--- license: cc-by-nc-4.0 language: - tl - ceb - en base_model: - openai/whisper-small pipeline_tag: automatic-speech-recognition tags: - cebuano - filipino - tagalog - cebuano-asr - bisaya - bisaya-asr - code-switching --- # phcodeswitch-ceb-dvo Whisper `small` fine-tuned for automatic speech recognition (ASR) of **Davao Cebuano**, including English–Cebuano code-switching. - **Base model:** [openai/whisper-small](https://huggingface.co/openai/whisper-small) - **Fine-tuned language:** Cebuano (`ceb`), BCP-47 `ceb` - **Task:** Automatic speech recognition (`transcribe`) - **Best WER:** 20.86% (test split, step 1200) - **License:** CC BY-NC 4.0 — non-commercial research / educational use only ## How to use Install dependencies: ```bash pip install --upgrade transformers torch librosa ``` ### Option 1 – `pipeline` (quickstart) ```python from transformers import pipeline import librosa pipe = pipeline( "automatic-speech-recognition", model="eemberda/phcodeswitch-ceb-dvo", device=0, # use -1 for CPU ) audio, sr = librosa.load("sample.wav", sr=16_000, mono=True) result = pipe( audio, generate_kwargs={ "language": "tl", # Cebuano is not native to Whisper; Tagalog prompt works best "task": "transcribe", "num_beams": 5, }, ) print(result["text"]) ``` ### Option 2 – manual inference with processor + model ```python from transformers import WhisperForConditionalGeneration, WhisperProcessor import librosa import torch model_id = "eemberda/phcodeswitch-ceb-dvo" processor = WhisperProcessor.from_pretrained(model_id) model = WhisperForConditionalGeneration.from_pretrained(model_id) device = "cuda" if torch.cuda.is_available() else "cpu" model.to(device).eval() audio, sr = librosa.load("sample.wav", sr=16_000, mono=True) inputs = processor.feature_extractor( audio, sampling_rate=16_000, return_tensors="pt" ).input_features.to(device) forced_decoder_ids = processor.get_decoder_prompt_ids( language="tl", task="transcribe" ) with torch.no_grad(): predicted_ids = model.generate( inputs, forced_decoder_ids=forced_decoder_ids, num_beams=5, ) transcription = processor.batch_decode( predicted_ids, skip_special_tokens=True )[0].strip() print(transcription) ``` ## Language notes - Whisper has **no native Cebuano language token**. The model is fine-tuned on Cebuano audio but uses the **Tagalog (`tl`)** decoder prompt, which Whisper treats as the closest supported related language. - The model also handles English and English–Cebuano code-switched speech. - Audio is expected at **16 kHz mono** (resampled automatically by `librosa` in the examples above). ## Training details - Base model: `openai/whisper-small` - Optimizer: AdamW, learning rate `1e-5`, warmup 100 steps - Batch size 4 with gradient accumulation 4 (effective batch 16) - Max steps 1800 (best checkpoint at step 1200), early stopping patience 3 - Mixed precision (fp16), gradient checkpointing, beam search (5) decoding ## Limitations - Trained on a small, community-contributed dataset; coverage of accents and vocabulary is limited. - For non-commercial research and educational use only (CC BY-NC 4.0). - Contributed speaker data must not be used for voice cloning, impersonation, or voice synthesis. See the project repository's compliance documents.