Downloads · 30 days
41
53% of all-time downloads
tomek1hugme/sheptooha
sheptooha is a automatic speech recognition model from tomek1hugme. Use it when you need speech turned into text. It is set up for transformers. The card lists the license as cc-by-nc-4.0.
Model rozpoznawania mowy dla języka polskiego. Nazwa wymawia się szeptucha.
Downloads · 30 days
41
53% of all-time downloads
All-time downloads
77
Public
Parameters
581M
1.2 GB on disk
Likes
1
Public
Click a slice to open those files.
.safetensors1.2 GB · 94%
From the Hugging Face model README
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.
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
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])
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.
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.
| 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.
| 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 |
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.
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.
ul-diabiz, 33,75%) i bankowości telefonicznej (polyai-minds14, 20,40%).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: [email protected].
Nie jest to porada prawna. Kwestia, czy wagi modelu dziedziczą licencję danych treningowych, nie ma ustalonego orzecznictwa.
@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}
}
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).