Sheptooha

Model rozpoznawania mowy dla języka polskiego. Nazwa wymawia się szeptucha.

w2v-BERT 2.0 (580M parametrów) z głowicą CTC na poziomie znaków, dostrojony wyłącznie na publicznych korpusach BIGOS V2 i PELCRA for BIGOS. W repozytorium znajduje się także 5-gramowy model językowy (KenLM) zbudowany z transkrypcji treningowych.

9,51% WER na zbiorze walidacyjnym BIGOS+PELCRA (średnia po 24 podzbiorach), wobec 16,33% dla Whisper large-v3 z przeszukiwaniem wiązką mierzonego na tym samym zbiorze.


Szybki start

Z modelem językowym (zalecane)

from transformers import Wav2Vec2ProcessorWithLM, Wav2Vec2BertForCTC
import torch, soundfile as sf, librosa

REPO = "tomek1hugme/sheptooha"
proc = Wav2Vec2ProcessorWithLM.from_pretrained(REPO)
model = Wav2Vec2BertForCTC.from_pretrained(REPO, dtype=torch.bfloat16).cuda().eval()

audio, sr = sf.read("nagranie.wav", dtype="float32")
if audio.ndim > 1:
    audio = audio.mean(axis=1)
if sr != 16000:
    audio = librosa.resample(audio, orig_sr=sr, target_sr=16000)

inputs = proc(audio, sampling_rate=16000, return_tensors="pt")
inputs = {k: (v.cuda().to(model.dtype) if v.is_floating_point() else v.cuda())
          for k, v in inputs.items()}

with torch.no_grad():
    logits = model(**inputs).logits.float().cpu().numpy()[0]

print(proc.decoder.decode(logits, beam_width=100))

Wymaga dodatkowych bibliotek:

pip install pyctcdecode https://github.com/kpu/kenlm/archive/master.zip

Bez modelu językowego (szybciej, 10,16% WER)

from transformers import Wav2Vec2BertProcessor, Wav2Vec2BertForCTC
import torch, soundfile as sf

REPO = "tomek1hugme/sheptooha"
proc = Wav2Vec2BertProcessor.from_pretrained(REPO)
model = Wav2Vec2BertForCTC.from_pretrained(REPO, dtype=torch.bfloat16).cuda().eval()

audio, _ = sf.read("nagranie.wav", dtype="float32")
x = proc(audio, sampling_rate=16000, return_tensors="pt")
x = {k: (v.cuda().to(model.dtype) if v.is_floating_point() else v.cuda())
     for k, v in x.items()}
with torch.no_grad():
    ids = model(**x).logits.argmax(-1)
print(proc.batch_decode(ids)[0])

Ważne przy użyciu

Przetwarzaj po jednym nagraniu. Wsadowe przetwarzanie z dopełnianiem zaniża jakość, wsad 2 kosztował 0,25 punktu WER wobec wsadu 1. Jeśli potrzebujesz przepustowości, grupuj nagrania o zbliżonej długości albo zadbaj o poprawne maskowanie dopełnienia.

Nagrania dłuższe niż 60 sekund. Model trenowany na nagraniach do 60 s. Dłuższe warto pociąć, ale na granicach ciszy, naiwne cięcie na sztywno i sklejanie transkrypcji pogarszało wynik w testach.

Parametry dekodowania. Zestrojone na zbiorze walidacyjnym: alpha=0.15, beta=0.0, beam_width=100. Optimum dla alpha jest szerokie (0,12–0,25), powyżej 0,3 jakość wyraźnie spada. Premia za długość (beta) szkodzi monotonicznie, zostaw zero.

Pusta lista unigramów jest celowa. Lista zbudowana z transkrypcji treningowych pogarszała wynik o 0,4 punktu, pyctcdecode karze słowa spoza listy, a przy polskiej fleksji poprawne formy przypadków często w niej nie występują. Ostrzeżenie o braku unigramów można zignorować.

Bez interpunkcji i wielkich liter. Model produkuje tekst znormalizowany: same małe litery, bez znaków interpunkcyjnych, liczby zapisane słowami, zgodnie z konwencją transkrypcji w korpusach treningowych.


Wyniki

Zbiór walidacyjny BIGOS V2 + PELCRA for BIGOS, 2262 nagrania, po 100 z każdego z 24 podzbiorów. WER makro to średnia po podzbiorach.

Porównanie

model WER makro
Sheptooha + KenLM 9,51
Sheptooha bez LM 10,16
Whisper large-v3 (beam 4) 16,33
Whisper large-v3 (greedy) 17,51
Parakeet-TDT-0.6b-v3 17,40
Canary-1b-v2 19,37
Qwen3-ASR-1.7B 23,39

Wszystkie modele mierzone tym samym skryptem na tym samym zbiorze, z jednakową normalizacją tekstu.

Dla orientacji: na ukrytym splicie testowym BIGOS, raportowanym w niezależnym benchmarku Polish ASR Leaderboard, Whisper large-v3 osiąga 14,67%, a najlepsze zgłoszenie konkursu PolEval 2024 (Samsung R&D Poland) 11,07%. Tamte liczby pochodzą z innego podziału danych i nie są bezpośrednio porównywalne z tabelą powyżej.

Podzbiory

podzbiór WER (z LM) CER (z LM) WER (bez LM)
pwr-viu-unk 0,00 0,00 0,00
pwr-shortwords-unk 1,65 0,30 1,77
pwr-maleset-unk 1,69 0,26 2,21
pwr-azon_read-20 1,83 0,22 3,66
mailabs-corpus_librivox-19 2,94 0,73 3,92
pjatk-clarin_studio-15 3,49 1,50 3,77
mozilla-common_voice_15-23 3,55 0,71 3,19
fair-mls-20 5,52 1,29 6,16
ul-spokes_biz_int-23 5,66 2,70 5,94
pjatk-clarin_mobile-15 6,19 2,29 7,43
google-fleurs-22 7,38 2,31 7,68
ul-spokes_biz_wyw-23 8,07 4,06 8,16
ul-spokes_biz_bio-23 8,35 4,80 9,67
pwr-azon_spont-20 9,39 3,15 9,96
ul-spokes_mix_emo-18 9,49 4,70 9,87
ul-spokes_biz_pres-23 11,77 4,26 13,09
ul-spokes_mix_parl-18 12,24 3,80 13,18
ul-spokes_mix_luz-18 12,64 6,99 11,93
ul-spokes_biz_vc2-23 13,61 8,57 14,15
ul-spokes_biz_pod-23 14,93 9,87 15,14
ul-spokes_biz_luz-23 16,34 10,28 16,70
ul-spokes_biz_vc-23 17,42 10,95 18,58
polyai-minds14-21 20,40 12,44 22,13
ul-diabiz_poleval-22 33,75 26,95 35,57
makro 9,51 4,78 10,16
mikro 9,58 4,78 10,23

Jak powstał

Enkoder: facebook/w2v-bert-2.0, 580M parametrów, pretrenowany samonadzorowanie na 4,5 mln godzin mowy w 143 językach, bez transkrypcji.

Głowica: pojedyncza warstwa liniowa, CTC na poziomie znaków (40 symboli). Testowano również głowicę LSTM, uczoną ważoną sumę wszystkich warstw enkodera oraz SpecAugment, wszystkie warianty wypadły gorzej od prostej warstwy liniowej.

Dane treningowe: splity train i dev-0 z BIGOS V2 i PELCRA for BIGOS, z wyłączeniem nagrań użytych do ewaluacji. 712 godzin, powiększone do 2100 godzin przez zaburzanie tempa (0,9 / 1,0 / 1,1).

Trening: 88 tysięcy kroków, efektywny rozmiar wsadu 48, krok uczenia 2e-5, harmonogram liniowy z rozgrzewką 1000 kroków, cztery karty w trybie rozproszonym.

Model językowy: 5-gram z wygładzaniem Kneser-Neya (KenLM), zbudowany wyłącznie z transkrypcji ze splitu treningowego, 300 tysięcy zdań, 4,9 mln słów.


Uwagi do zbioru ewaluacyjnego

Przy analizie błędów stwierdzono, że w podzbiorze polyai-minds14-21 część referencji obejmuje wyłącznie początek wypowiedzi. Przykład: nagranie dev-0002-00046 trwa 18,6 s, referencja liczy 6 słów („Witam Chciałbym wpłacić pieniądze na konto"), a mówiąca kontynuuje przez kolejne kilkanaście sekund. Model transkrybuje nagranie poprawnie i otrzymuje 22 wstawienia jako błędy.

32 z 47 nagrań walidacyjnych tego podzbioru ma powyżej 0,7 s audio na słowo referencji, przy typowej wartości 0,35–0,50 dla pozostałych podzbiorów.

Część raportowanego WER na tym podzbiorze jest zatem karą za poprawne rozpoznanie. Dotyczy to wszystkich systemów mierzonych na tym benchmarku.


Ograniczenia

  • Wyniki pochodzą ze splitu walidacyjnego, nie testowego, referencje testowe BIGOS pozostają niedostępne od zakończenia konkursu PolEval 2024. Liczby nie są bezpośrednio porównywalne z oficjalnym rankingiem PolEval.
  • Model nie generuje interpunkcji ani wielkich liter.
  • Brak diaryzacji, w nagraniach z wieloma mówcami transkrybowana jest cała słyszalna mowa.
  • Najsłabsze wyniki na rozmowach z call center (ul-diabiz, 33,75%) i bankowości telefonicznej (polyai-minds14, 20,40%).
  • Nie testowano na mowie dzieci, osób z wadami wymowy ani na wyraźnych gwarach.

Licencja i dane

Korpusy treningowe, zarówno BIGOS V2, jak i PELCRA for BIGOS, są objęte licencją CC BY-NC-ND 4.0. Autorzy korpusów PELCRA potwierdzają, że modele zbudowane na ich podstawie można rozpowszechniać, natomiast zastosowania komercyjne są wykluczone. Stąd licencja cc-by-nc-4.0.

W sprawie licencji innej niż niekomercyjna: pelcra@uni.lodz.pl.

Nie jest to porada prawna. Kwestia, czy wagi modelu dziedziczą licencję danych treningowych, nie ma ustalonego orzecznictwa.

Cytowanie

@misc{sheptooha2026,
  title  = {Sheptooha: a Polish ASR model based on w2v-BERT 2.0},
  author = {Radzikowski, Tomasz},
  year   = {2026},
  note   = {Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych, Instytut Informatyki},
  url    = {https://huggingface.co/tomek1hugme/sheptooha}
}

Przy korzystaniu z modelu należy zacytować także korpusy treningowe.

BIGOS V2:

@inproceedings{junczyk2024bigos,
  title     = {{BIGOS V2} Benchmark for {Polish} {ASR}: Curated Datasets and Tools
               for Reproducible Evaluation},
  author    = {Junczyk, Micha{\l}},
  booktitle = {Advances in Neural Information Processing Systems 37 (NeurIPS 2024),
               Datasets and Benchmarks Track},
  year      = {2024}
}

@misc{bigos_v2_dataset,
  title     = {{amu-cai/pl-asr-bigos-v2}},
  author    = {Junczyk, Micha{\l}},
  publisher = {Hugging Face},
  doi       = {10.57967/hf/2353},
  url       = {https://huggingface.co/datasets/amu-cai/pl-asr-bigos-v2}
}

PELCRA for BIGOS. Licencja wymaga zacytowania kuratora oraz autorów korpusów źródłowych:

@misc{pelcra2024,
  author    = {Piotr Pęzik and Michał Junczyk},
  title     = {pl-asr-pelcra-for-bigos (Revision 4205ec7)},
  year      = {2024},
  url       = {https://huggingface.co/datasets/pelcra/pl-asr-pelcra-for-bigos},
  doi       = {10.57967/hf/2387},
  publisher = {Hugging Face}
}

@misc{pezik2023spokesbiz,
  title         = {SpokesBiz -- an Open Corpus of Conversational Polish},
  author        = {Piotr Pęzik and Sylwia Karasińska and Anna Cichosz and Łukasz Jałowiecki
                   and Konrad Kaczyński and Małgorzata Krawentek and Karolina Walkusz
                   and Paweł Wilk and Mariusz Kleć and Krzysztof Szklanny and Szymon Marszałkowski},
  year          = {2023},
  eprint        = {2312.12364},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CL},
  url           = {https://arxiv.org/abs/2312.12364}
}

@inproceedings{pezik2018spokesmix,
  author    = {Piotr Pęzik},
  title     = {Increasing the Accessibility of Time-Aligned Speech Corpora with Spokes Mix},
  booktitle = {Proceedings of the Eleventh International Conference on Language Resources
               and Evaluation (LREC 2018)},
  year      = {2018},
  address   = {Miyazaki, Japan},
  publisher = {European Language Resources Association (ELRA)},
  isbn      = {979-10-95546-00-9}
}

@inproceedings{pezik2022diabiz,
  author    = {Piotr Pęzik and Gosia Krawentek and Sylwia Karasińska and Paweł Wilk
               and Paulina Rybińska and Anna Cichosz and Angelika Peljak-Łapińska
               and Mikołaj Deckert and Michał Adamczyk},
  title     = {DiaBiz -- an Annotated Corpus of Polish Call Center Dialogs},
  booktitle = {Proceedings of the Thirteenth Language Resources and Evaluation Conference},
  pages     = {723--726},
  year      = {2022},
  address   = {Marseille, France},
  publisher = {European Language Resources Association},
  url       = {https://aclanthology.org/2022.lrec-1.76}
}

Podziękowania

Model powstał z wykorzystaniem enkodera facebook/w2v-bert-2.0 udostępnionego przez Meta AI oraz korpusów BIGOS (Uniwersytet im. Adama Mickiewicza) i PELCRA (Uniwersytet Łódzki).

Downloads last month
33
Safetensors
Model size
0.6B params
Tensor type
F16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for tomek1hugme/sheptooha

Finetuned
(539)
this model

Datasets used to train tomek1hugme/sheptooha

Paper for tomek1hugme/sheptooha

Evaluation results