Whisper large-v3-turbo — Persian (Farsi)

A full fine-tune of openai/whisper-large-v3-turbo for Persian speech recognition, trained on ~236 hours of openly licensed Persian speech: conversational YouTube audio with creator-made subtitles plus formal read speech.

  • Verbatim, colloquial-aware output. It writes what was said («نمی‌دونم», «میشه», «داره»), instead of rewriting speech into formal written Persian.
  • Punctuated output («،», «.», «؟»).
  • Fast: same size and speed as turbo (809 M parameters). A 70-minute podcast transcribes in about 25 s on an RTX 4070 Ti.
  • A whisper.cpp / GGML version is included (ggml-persian-v3-turbo.bin), which also works with FFmpeg's whisper filter.

Results

Word error rate (%, lower is better). The test sets are fixed subsets, and the same clips were used for every model: 300 FLEURS clips, 150 + 150 held-out YouTube / YODAS2 segments, and 300 Neyshekar clips. Text is normalized before scoring: punctuation and diacritics are removed, Arabic/Persian letter and digit variants are unified, and spacing variants such as «می شه» / «می‌شه» / «میشه» are treated as the same word.

Model FLEURS YouTube (unseen channels) YODAS2 Neyshekar Mean
this model 6.4 14.4 23.0 6.0* 12.4
MohammadKhosravi/whisper-large-v3-Persian 11.9 30.8 34.8 12.9 22.6
AmirMohseni/whisper-large-v3-persian-bf16 12.2 29.9 34.9 13.2 22.5
sadrasa97/whisper-large-v3-turbo-fa 14.4 34.5 41.2 16.6 26.7
openai/whisper-large-v3 17.3 35.8 37.3 21.0 27.8
openai/whisper-large-v3-turbo 18.7 34.0 36.3 26.4 28.8
nezamisafa/whisper-persian-v4 12.6 45.0 45.7 17.5 30.2
vhdm/whisper-large-fa-v1 14.0 51.3 62.6 21.2 37.3

* This model was trained on Neyshekar's train split, which shares no speakers with its test split. That makes its Neyshekar score in-domain; the other models have not seen Neyshekar. It was also trained on FLEURS-train and on YouTube subtitles in the same style as the YouTube references, so read the FLEURS and YouTube columns with that in mind.

Unseen long-form test: a 70-minute episode of Bplus Podcast (not in any training data, manual subtitles). Each model is listed with the better of two long-form methods: pause-based pieces, with or without 2 s overlap (see Long recordings below).

Model WER CER
this model 11.2 % 2.7 %
openai/whisper-large-v3-turbo 19.6 % 5.5 %
nezamisafa/whisper-persian-v4 32.4 % 10.8 %

Models that rewrite colloquial speech into formal Persian score worse on the YouTube sets, because the references are verbatim subtitles. That is a real difference in behaviour, not only in spelling.

Usage

Transformers

import torch
from transformers import pipeline

asr = pipeline("automatic-speech-recognition", model="givia/whisper-large-v3-turbo-persian",
               dtype=torch.float16, device="cuda:0")
print(asr("audio.mp3", generate_kwargs={"language": "persian", "task": "transcribe"})["text"])

Long recordings

The pipeline call above handles one 30 s window. For longer audio, this approach gave the best results:

  1. Cut the audio at pauses into pieces of up to about 26 s, choosing the longest pause in each window.
  2. Decode each piece with 2 s of the neighbouring audio on both sides, plus 0.25 s of silence padding, so words at the edges are heard in context.
  3. Join neighbouring transcripts at the point where they agree on the same words, so nothing is duplicated.

On the podcast above, this lowered the error rate on words at piece edges from 24 % to 12 % (about the same as mid-piece words), and overall WER from 12.1 % to 11.2 %. Plain 30 s windows without overlap can duplicate or fuse words at the boundaries.

whisper.cpp

whisper-cli -m ggml-persian-v3-turbo.bin -l fa -osrt -f audio.wav

FFmpeg (8.0+, built with --enable-whisper)

ffmpeg -i video.mp4 -vn -af "whisper=model=ggml-persian-v3-turbo.bin:language=fa:queue=20:\
vad_model=ggml-silero-v5.1.2.bin:destination=video.srt:format=srt" -f null -

ggml-silero-v5.1.2.bin is whisper.cpp's voice-activity model (models/download-vad-model.sh silero-v5.1.2). The GGML file is fp16; quantize it with whisper.cpp's quantize tool if you need a smaller file.

Training data (~236 h)

Source Hours Type License
Neyshekar (train split) 95.6 read speech, 134 speakers CC0-1.0
YouTube videos with creator-uploaded Persian subtitles (94 channels, 289 videos) 55.0 conversational, podcasts, lectures CC-BY (YouTube Creative Commons), see attribution below
Common Voice 26.0 fa (curated train split) 34.3 read sentences, 214 speakers CC0-1.0
YODAS2 fa000 (131 videos, manual subtitles) 24.2 conversational CC-BY-3.0
ManaTTS (~15 h subset) 15.2 formal read speech, 1 speaker CC0-1.0
FLEURS fa_ir train 12.1 read speech CC-BY-4.0

Processing:

  • YouTube data: only creator-uploaded subtitles were used, never YouTube's auto-generated captions. Videos had to carry a Creative Commons license at download time. Segments of up to 30 s were cut at subtitle boundaries and kept only if whisper-large-v3-turbo roughly agreed with the subtitle (CER ≤ 0.4). Each channel was capped at 5 h.
  • Punctuation: subtitles without punctuation were punctuated by an LLM (Claude). Each result was accepted only if the words were unchanged once punctuation was removed; otherwise the segment was dropped.
  • Short clips: clips from the read-speech corpora were packed per speaker into examples of up to 28 s.
  • Labels: Arabic/Persian letter variants were unified, and bracketed sound tags (e.g. «(موسیقی)») were removed.

Training procedure

Full fine-tune of all 809 M parameters on a single RTX 4070 Ti (12 GB):

  • 8-bit AdamW (bitsandbytes), learning rate 1e-5, 200 warmup steps, linear decay.
  • bf16 autocast, gradient checkpointing.
  • SpecAugment (5 % time and frequency masking).
  • Effective batch size 16, 2 epochs (4,648 steps, about 4 h).
  • The checkpoint was selected by WER on a held-out dev set: FLEURS-dev plus held-out YouTube channels.

Limitations

  • Hard audio: noisy, overlapping or very fast speech is harder (about 23 % WER on YODAS2). Rare names and literary or technical vocabulary are the most common errors.
  • Music: on long stretches of music without speech, Whisper models can produce a word such as «موسیقی». Using a voice-activity detector (as in the FFmpeg example) avoids this.
  • Dialects: trained and evaluated on Iranian Persian. Dari and Tajik have not been tested.
  • Numbers: written as digits or words inconsistently, following the mix of conventions in the training text.
  • Not streaming: like all Whisper models, it transcribes chunks of audio, not a continuous stream.

Attribution

This model was trained on CC-BY-licensed material. We credit:

  • FLEURS (Google, CC-BY-4.0)
  • YODAS2 (ESPnet / CMU, CC-BY-3.0, and the creators of its videos)
  • The creators of the following YouTube channels, whose Creative Commons videos and subtitles were used (channel — videos used — hours of training audio)

If you are a rights holder and believe material was used incorrectly, please open a discussion on this repository.

YouTube channels (94)
Channel Videos Hours
Shiawaves Persian اخبار شیعه 79 5.0
داستان های واقعی و عاشقانه 7 5.0
Mansoor Samani 5 5.0
اکوایران - ECOIRAN 3 3.9
جادوی داستان با سحر 4 3.6
Mama Parvin 5 2.8
Zamaneh Media 10 2.6
MehrTv / Ali Farhang Mehr 11 2.5
Student of the Game / باشگاه دانشجویان فوتبال 1 2.4
پادکست قاب تاریخ 4 1.8
ده دقیقه مکث 11 1.7
chetflixcrime 4 1.3
مجلۀ بخارا / Bukhara Magazine 1 1.2
ClimaVids 2 1.1
Bijan 4 1.0
The Gate of History 1 1.0
Ketab Aval 1 0.9
Mücteba Nesiri 3 0.8
Netfishix 3 0.8
AliGgamingLab 4 0.8
BenizTor 5 0.8
ShirazLinux 2 0.7
سوره صادقی 1 0.5
Erfan Haghi / عرفان حقی 1 0.5
Kaka Aref 2 0.4
Irtec 1 0.4
افسانه درمانی 2 0.3
Here&now 1 0.3
focus_podcast 1 0.3
Danikachal 2 0.3
Solmaz Barghgir سولماز برقگیر 1 0.3
Malakut 7 0.3
Gardening traning 3 0.2
Mr BADANSAZ 2 0.2
Hamed Maleklou 1 0.2
Last Estus 1 0.2
Mahdi JEWELRY 2 0.2
Mohammad Rabiee 6 0.2
soober land 1 0.2
فیلم خوب چی ببینیم؟ 1 0.2
Hossein Mahmoodi - AI & Productivity 17 0.2
Cheratube 1 0.2
شجره طیبه 3 0.2
Ben talks 3 0.2
تلاش مدیا 2 0.1
goodmood4life 2 0.1
اشراف 1 0.1
Knitwear Training 1 0.1
Amir Tataloo 1 0.1
Sprouts فارسی 1 0.1
DANESHKADEH 1 0.1
Ahmadrezadl 2 0.1
Easy Peasy English / انگلیسی مثل آب خوردن 2 0.1
Sobhan Ganji 3 0.1
AhmouS Studio 2 0.1
💲همه چیز درباره ثروت 1 0.1
mehdisedighinasab 1 0.1
Rasoull Raeisi 1 0.1
MasterAlive 1 0.1
NamiMusic 1 0.1
editland_3soot 1 0.1
Gorbe Godratmand 1 0.0
تارابانوtarabano 1 0.0
Vida Cooks 1 0.0
paapak02 1 0.0
Kooros Farhati 1 0.0
BBC Persian 1 0.0
AVAYEVAV 1 0.0
طنز اجتماعی آقاجون 1 0.0
Zabi Visual Diary 1 0.0
Mehran AI 1 0.0
NAVI ناوی 1 0.0
TRK Poetry & Litera 1 0.0
Baran Media 1 0.0
Sher-o-Fenjan 1 0.0
Barfin 1 0.0
Sama News /سمانیوز 1 0.0
Edward Nouri 2 0.0
Fact Curved / منحنی حقیقت 1 0.0
Great With Ai 1 0.0
Aisan Eslami 1 0.0
Immersive Language School 1 0.0
mehsen 2 0.0
YekEsfahaniDarParis 2 1 0.0
مارکو ایرانی 1 0.0
YekEsfahani DarParis 1 0.0
Bet-luckers 1 0.0
🔥mohammad52🔥 1 0.0
YoutubyShow 1 0.0
داستان و دانستنی با آیا خبر داری؟ 1 0.0
Kimia's diary 1 0.0
Teleformance ● تمرین اجرا 1 0.0
ByRubik 1 0.0
Orchid-Media ارکید میدیا 1 0.0
Downloads last month
5,527
Safetensors
Model size
0.8B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for givia/whisper-large-v3-turbo-persian

Finetuned
(680)
this model
Finetunes
1 model
Quantizations
2 models

Datasets used to train givia/whisper-large-v3-turbo-persian

Space using givia/whisper-large-v3-turbo-persian 1

Evaluation results