piper-tts-pl-multi

Polski model Piper (VITS) z trzema głosami w jednym pliku ONNX, 128 MB, 24 kHz. Głos wybiera się wejściem sid. Model był trenowany na poprawionej fonemizacji trz/drz, więc pełną jakość daje dopiero razem z frontendem pltts.

sid głos charakter f0
0 glos3 kobiecy 209 Hz
1 design głęboki męski 115 Hz
2 lektor jasny męski 146 Hz

Przykłady do posłuchania, dziesięć zdań każdym głosem: pltts/examples.

Pliki

plik rozmiar rola
pl_multi.onnx 128 MB model, epoka 15
pl_multi.onnx.json 7 kB konfiguracja Pipera: num_speakers: 3, speaker_id_map, mapa fonemów

Oba pliki muszą leżeć obok siebie.

Z frontendem pltts

Model nie mieści się w limicie GitHuba, więc do sklonowanej paczki trzeba go dociągnąć stąd przed instalacją. Bez modelu pip install kończy się błędem celowo, żeby nie powstała paczka, która nie umie mówić.

git clone https://github.com/krzynio/piper.git
cd piper/pltts
curl -L -o src/pltts/models/pl_multi.onnx \
  https://huggingface.co/Folx/piper-tts-pl-multi/resolve/main/pl_multi.onnx
python -m venv .venv && . .venv/bin/activate
pip install .

pltts --list-voices                                 # 0 glos3, 1 design, 2 lektor
pltts "Trzy drzewa przy ulicy Długiej." -v lektor -o out.wav
pltts "Dzień dobry." -v all                         # probe_glos3.wav, probe_design.wav, probe_lektor.wav
import pltts

audio, rate = pltts.synth("Pociąg PKP odjeżdża z peronu 3.", "glos3")
pltts.save("out.wav", audio, rate)

Wymaga Pythona 3.9 lub nowszego. espeak-ng nie trzeba instalować osobno, jego dane przychodzą z piper-phonemize.

Samym Piperem

Model ma standardowy format wielogłosowy Pipera, więc działa też bez pltts (sprawdzone na piper-tts 1.8.0):

echo "Dzień dobry, z tej strony biuro obsługi klienta." \
  | piper -m pl_multi.onnx -c pl_multi.onnx.json -s 2 -f out.wav

Tyle że wtedy fonemy robi czysty eSpeak-pl. Zwija on trz do cz i drz do dż, więc „trzy drzewa” zabrzmi jak „czy dżewa”. Akronimy, liczby, liczby rzymskie i angielskie słowa też zostaną przeczytane tak, jak czyta je eSpeak.

Co poprawia pltts

tekst sam eSpeak z pltts
trzy drzewa tʃˈɨ dʒˈɛva, czyli „czy dżewa” tʂˈɨ dʐˈɛva
AGD ˌaɡjˌɛdˈɛ, zbitka bez granic wyrazów a ɡʲˈɛ dˈɛ
ZUS, BLIK literowane czytane jak słowa
XIX wieku rˌɔwmɛnnˈajntin, angielskie „roman nineteen” dʑˌɛvʲɛtnastˈɛɡɔ
Trump, weekend trˈump, vˈɛɛkɛnt trˈamp, wˈikɛnt
dział wsparcia fsparsˈija fspˈartɕa
603 ʃˈɛɕsɛt, bez „ć” ʃˈɛɕtɕsɛt

Szczegóły, w tym reguła rozstrzygająca, które akronimy czyta się jak słowa, są w README pltts.

Trening

Trzy korpusy jednogłosowe scalone w 244 537 wypowiedzi (glos3 83 610, design 81 620, lektor 79 307). Ciepły start z jednogłosowego modelu design (epoka 15), 16 epok, 9 h 50 min na jednym GPU, batch 24, precyzja 32, jakość high, 24 kHz. Wektor mówcy wchodzi tylko do modułów akustycznych, enkoder tekstu jest wspólny dla wszystkich głosów. Jeden model zamiast trzech osobnych to 128 MB zamiast 342 MB.

Skrypt scalający korpusy, hiperparametry i komendy do odtworzenia przebiegu: MODEL.md i training/.

Ograniczenia

lektor ma f0 o 26 Hz niższe od nagrań wzorcowych (146 zamiast 172 Hz) i z każdą epoką schodził niżej. design i lektor najlepiej brzmiały na epoce 10, glos3 na 15; wspólny model wymaga jednego snapshotu, wybraliśmy 15 po odsłuchu.

WER na tym modelu nie był mierzony. Nie wiemy, czy wspólny enkoder poprawił zrozumiałość względem modeli jednogłosowych, czy tylko jej nie pogorszył. Wszystkie 30 przykładów przeszło przez Whisper large-v3-turbo bez błędów w słowach, ale to nie jest pomiar, a przykłady były wybrane: dla zdania z „BLIK” na końcu lektor dał dwie złe próby na cztery.

Liczby rzymskie pltts rozwija tylko w zakresie 1–30 i tylko w rodzaju męskim. Synteza nie jest deterministyczna (noise_scale, noise_w), więc dwa wywołania na tym samym tekście różnią się prozodią.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support