Tehnika4 min čitanja

Zašto Whisper griješi na hrvatskom

WER 1.85–12.48% ovisno o kanalu. Čista pripovijest ide ispod 2%, code-switching diže grešku 6× — i tri intervencije koje pomažu.

TJ
Tihomir Jauk
Osnivač Titlomata

Whisper-large-v3 je impresivan model. Na engleskom radi 5% WER ili manje. Na hrvatskom — naš Phase 0 baseline na tri popularna podcasta:

KanalWERNER (imena/brendovi)
Superhuman Life1.85%100%
Lider Lab5.28%100%
Netokracija12.48%75%

Tri vrlo različita broja na istom modelu. Razlika nije slučajna — definira ju koliko engleskog se uvuče u hrvatsku rečenicu i koliko vlastitih imena prolazi po minuti.

WER i zašto je 5% prag

Word Error Rate broji pogreške po riječi: zamjene, brisanja, umetanja. 5% znači 1 pogrešku na 20 riječi. Za 60-minutni podcast s prosječnih 9000 riječi, to je 450 pogrešaka — dosta, ali raspoređene tako da gledatelj rijetko primijeti.

12% WER (gdje sjedi Netokracija) znači 1080 pogrešaka. Više od toga gledatelj počinje primjećivati. 25% — gledatelj odustaje od titlova prije kraja prve minute.

Naš prag „good enough" stoji na 5% WER + 95% NER (named-entity recognition accuracy). Superhuman ga prelazi za faktor dva, Lider sjedi 0.28 pp iznad, Netokracija ga propušta zbog code-switching-a — što je manje stvar modela, više stvar formata sadržaja (vidi dolje).

Četiri klase pogrešaka

Kategorizirali smo prvih 200 grešaka iz baseline runa. Distribucija nije iznenađenje, ali je korisna za debugiranje:

1. Vlastita imena i brendovi (~35% pogrešaka)

„Stjepan Bedić" → „Stjepan Beđić" ili „Stjepan Bedič". „ETF Airways" → „ETF Eirvejs". „Roko Kalafatić" → „Roko Kalafatič" (sa č umjesto ć).

Whisper nije nikad čuo ova imena u Croatian-language treningu. Padaju s potpuno predvidljivim greškama.

2. Akcenti i regije (~25%)

Dalmatinski „ča-kavski" prijelazi između riječi. Kajkavski „kaj" gdje model očekuje „što". Slavonski govor s otvorenijim „e". Whisper je treniran većinom na štokavskom standardu — ostali dijalekti su pjegavi.

3. Code-switching (~20%)

Hrvatski tech podcast tipično uvozi englesku terminologiju u svaku drugu rečenicu: „Submita PR i deploya na staging". Whisper čuje engleske riječi i pokušava ih napisati, ali ih napisuje krivo (krivim case-om, krivom morfologijom) ili ih krivo segmentira u kontekstu hrvatske rečenice.

4. Ostalo: šum, overlapping speech, kratke replike (~20%)

Diarizacija (tko govori) je posebno problematična u trojstrukim razgovorima.

Što pomaže

Tri intervencije koje zaista pomiču brojku:

Custom dictionary post-processor

Najveća pojedinačna pobjeda. Autor priloži listu vlastitih imena, brendova, žargona — post-processing korak na izlazu Whispera pretražuje preko Levenshtein distance i zamijenjuje pogrešne kandidate. Na Netokracija setu recovery od ~3.5 pp WER kad rječnik pokriva engleske termine koje model na hrvatskom čuje krivo.

Drugačije rečeno: klasa pogrešaka Vlastita imena gotovo nestaje kad rječnik postoji. Bez njega — model svaki put pogađa iznova.

VAD pre-roll

Whisper voli početke segmenta. Ako Voice Activity Detection isiječe točno na granici riječi, model često „halucinira" prvu riječ ili je preskoči. Trik: dodati 200ms tišine prije svakog VAD prozora i 100ms poslije. Whisper dobiva svoj „warm-up" i znatno bolje pogađa prvu riječ.

Recovery od ~2% WER.

Lokalni LM rescore na hrvatskom korpusu

Whisper ima ugrađen language model treniran na multilingvalnom korpusu. Za hrvatski je nedovoljan. Zamjena s lokalnim LM-om (npr. CroBERT-style) na rescore koraku pomaže — ali samo za određene tipove rečenica.

Recovery: ~1-2% WER, povratan po troškovima inference-a.

Što ne pomaže

Finetuning Whispera na hrvatskom

Bez 100+ sati ručno-anotiranog hrvatskog audio-a (a takvih datasetova javno nema), finetuning samo „fitov-a šum" — model nauči artefakte malog dataseta i loše generalizira. Pokušali smo. Ne radi.

Generic LLM rescoring

Slanje izlaza Whispera u GPT-4 ili Claude sa „poprav ovo" prompt-om producira tekst koji izgleda glatkije, ali često mijenja imena, datume, brojke. To NIJE pobjeda — to je halucinacija s glađim površinama.

Veći Whisper model

Whisper-turbo i Whisper-v3-large razlikuju se na hrvatskom za <0.5% WER. Skok na „Whisper Pro" iz nekog imaginarnog izvora bi pomogao tehnički, ali ne praktično.

Naš trenutni stack

Iz svega gore, ovako trenutno radi Titlomat pipeline za hrvatski:

  1. yt-dlp download → mono 16kHz audio
  2. WhisperX VAD pre-roll
  3. Whisper-large-v3 transkripcija
  4. Custom dictionary post-processor
  5. Lokalni LM rescore za top-N hipoteza (u radu)

Krajevi spektra: 1.85% WER na čistoj naraciji s domaćim govornicima, 12.48% kad sadržaj prelazi u engleski svakih nekoliko rečenica. Pragu od 5% udovoljava jedan od tri kanala u baselineu; cilj sljedećeg kvartala je dovesti i ostala dva ispod.

Što slijedi

  • Iterativno proširivanje rječnika po žanru kanala (poslovno, tech, sport) — najbrži dobitak na Netokracija-tip sadržaju.
  • Lokalni LM rescore — kontinuirana evaluacija po inference trošku.
  • Sljedeći članak iz tehnika: bočna usporedba našeg outputa s YouTubeovim auto-translate-om, mjerena od native-speakera.

Probajte na svom kanalu

Phase 0 brojke su s tri javna podcasta. Najbolji način provjere je vaš vlastiti audio. Spojite kanal, mi automatski generiramo titlove za sljedeći video — vidite WER na svom sadržaju u dashboardu. Probajte besplatno.