Pocket TTS auf kastilischem Spanisch: eine Stimme, die auf der CPU läuft

Wir haben Kyutais Pocket TTS auf das Spanisch Spaniens feinabgestimmt. Es läuft auf einer normalen CPU, mit Hörproben in vier Sprachen.

Wir brauchten eine Stimme für Sprechertexte, Demovideos und Produktrundgänge, auf Englisch und auf Spanisch. Dafür wollten wir keine GPU mieten: Ein Sprechertext sind ein paar Minuten Audio, und eine GPU, die zwischen zwei Aufnahmen ungenutzt wartet, ist genau die Art von Verschwendung, über die wir an anderer Stelle auf dieser Website schreiben. Deshalb haben wir Pocket TTS von Kyutai gewählt, ein Text-to-Speech-Modell, das für die CPU gebaut ist, und sein spanisches Modell so feinabgestimmt, dass es das Spanisch Spaniens spricht.

Die Gewichte liegen auf Hugging Face: inferencekey/pocket-tts-spanish-24l-castilian.

Warum Pocket TTS

  • Es läuft auf der CPU. Kein CUDA, kein ROCm, keine GPU. Installiert wird es mit pip und einem CPU-Build von PyTorch.
  • Es ist schnell genug. Das englische Modell liest auf einer Desktop-CPU mit acht Kernen etwa dreimal schneller als Echtzeit (Zahlen weiter unten).
  • Es spricht mehrere Sprachen. Kyutai veröffentlicht Modelle für Englisch, Spanisch, Französisch, Deutsch, Italienisch, Portugiesisch und Niederländisch, jeweils als kleine Version mit 6 Schichten und als größere mit 24.
  • Es klont eine Stimme aus einem kurzen Clip. Wir nutzen in allen Sprachen dieselbe Stimme (alba).
  • Es hat einen einfachen Server. pocket-tts serve hält das Modell im Speicher und antwortet per HTTP. Wir betreiben einen kleinen Pool von Servern und schicken jedem einen Satz.

Das Problem: Spanisch mit fremdem Akzent

Auf Englisch klingt es von Anfang an natürlich. Auf Spanisch war alles verständlich, klang aber nicht nach Spanien: Das Modell liest mit fremdem Akzent und spricht das kastilische "z" und das weiche "c" als "s" aus (den Seseo des lateinamerikanischen Spanisch). Für ein Publikum in Spanien fällt das als Erstes auf.

Also haben wir das spanische Modell mit 24 Schichten (spanish_24l, rund 316 Millionen Parameter im Teil, der die Sprache erzeugt) auf rund 2.000 Clips kastilischen Spanischs feinabgestimmt, auf einer AMD-GPU mit ROCm.

Was wir aus dem Training gelernt haben:

  • Weniger Schritte waren besser. Der Validierungsverlust erreichte sein Minimum bei Schritt 600 (0,4951) und stieg danach wieder, bis 0,5095 bei Schritt 1500. Bei Schritt 1500 hatte das Modell die Daten etwa 47-mal gesehen und begann, Wörter auszulassen oder zu erfinden: Die ASR fand nur in 3 von 6 Testclips vollständige Sätze. Schritt 600 hatte alle 6 richtig, wie das Basismodell.
  • Wir veröffentlichen die EMA-Gewichte von Schritt 600. EMA ist ein gleitender Mittelwert der Gewichte während des Trainings. Er verändert das Modell weniger als die rohen Gewichte, und genau das wollten wir: alles behalten, was das Basismodell gut macht, und den Akzent korrigieren.
  • Eine ASR reicht nicht, um den Akzent zu beurteilen. Qwen3-ASR schreibt "caza" und "casa" gleich: Sie zeigt, ob Wörter fehlen, nicht wie sie klingen. Wir haben jede Hörprobe mit der ASR auf fehlende Wörter und mit dem Ohr auf den Akzent geprüft.

Hören Sie selbst

Alle Hörproben nutzen dieselbe Stimme (alba), unbearbeitet und auf der CPU erzeugt. Jeder Clip hat eine ASR-Prüfung auf fehlende Wörter bestanden.

Spanisch: Basismodell gegen unseren Fine-Tune

"¿Sabías que el tren de las siete y cuarto sale hoy con veinte minutos de retraso?"

"La panadería de la esquina abre a las ocho y hace el mejor pan de centeno del barrio."

Englisch

Französisch

Deutsch

Englisch, Französisch und Deutsch nutzen Kyutais eigene Modelle mit 6 Schichten. Spanisch nutzt unseren Fine-Tune. Mit diesen vier decken wir ab, was wir brauchen: Englisch und Spanisch für unsere Videos, Französisch und Deutsch für die anderen Sprachen dieser Website.

Ein Tipp aus dem französischen Durchlauf: Das Modell liest Uhrzeiten manchmal falsch. "Sept heures et quart" kam in zwei von drei Versuchen falsch heraus, und die ASR hat es bemerkt. Wenn ein Satz wichtig ist, prüfen Sie ihn und erzeugen Sie ihn neu.

Wie schnell auf der CPU

Gemessen auf unserer Entwicklungsmaschine, einer geteilten VM auf einem Ryzen 7 5700X (8 Kerne), mit 3 Serverinstanzen zu je 2 Threads und sechs Alltagssätzen pro Modell:

ModellAudioErzeugungszeitGeschwindigkeit
Englisch (6 Schichten)18,4 s5,9 s3,1x Echtzeit
Spanisch spanish_24l, Basis (24 Schichten)22,9 s19,5 s1,2x Echtzeit
Spanisch, unser Fine-Tune (24 Schichten)22,5 s21,5 s1,05x Echtzeit

Der Fine-Tune kostet so viel wie das Basismodell mit 24 Schichten: gleiche Architektur, andere Gewichte. Die Modelle mit 24 Schichten sind etwa dreimal langsamer als die mit 6, auf der CPU taugen sie also für Sprechertexte, nicht für lange Hörbücher. Jede Instanz des Modells mit 24 Schichten belegt rund 2,1 GB RAM.

So nutzen Sie es

Installieren Sie Pocket TTS und verweisen Sie auf unsere Konfiguration bei Hugging Face:

pip install pocket-tts
pocket-tts generate \
  --config hf://inferencekey/pocket-tts-spanish-24l-castilian/config.yaml \
  --text "¿Sabías que el tren de las siete y cuarto sale hoy con veinte minutos de retraso?" \
  --output-path tren.wav

Ohne --voice nutzt es alba. Um es im Speicher zu halten und per HTTP aufzurufen:

pocket-tts serve --config hf://inferencekey/pocket-tts-spanish-24l-castilian/config.yaml

Zwei Dinge, die unsere spanischen Sprechertexte verbessert haben:

  • Schicken Sie ganze Sätze oder ganze kurze Absätze. Jedes Stück endet mit seiner eigenen Schlussintonation, ein in viele kleine Stücke zerteilter Absatz klingt deshalb abgehackt.
  • Schreiben Sie Zahlen als Wörter aus. "Siete y cuarto" wird zuverlässig gelesen, "7:15" nicht immer.

Die Modellkarte auf Hugging Face enthält das Python-Beispiel und weitere Hörproben (Basis gegen Fine-Tune).