For the complete documentation index, see llms.txt. This page is also available as Markdown.

🔊Leitfaden zum Fine-Tuning von Text-to-Speech (TTS)

Erfahren Sie, wie Sie TTS- und STT-Sprachmodelle mit Unsloth feinabstimmen.

Durch Feinabstimmung von TTS-Modellen können sie sich an Ihren spezifischen Datensatz, Anwendungsfall oder gewünschten Stil und Ton anpassen. Das Ziel ist, diese Modelle zu individualisieren, um Stimmen zu klonen, Sprechstile und Tonlagen anzupassen, neue Sprachen zu unterstützen, bestimmte Aufgaben zu bewältigen und mehr. Wir unterstützen auch Speech-to-Text (STT) Modelle wie Whisper von OpenAI.

Mit Unslothkönnen Sie jedes TTS-Modell (transformers kompatibel) 1,5x schneller und mit 50 % weniger Speicher als andere Implementierungen mit Flash Attention 2 feinabstimmen.

Unsloth unterstützt jedes transformers kompatible TTS-Modell. Auch wenn wir dafür noch kein Notebook oder keinen Upload haben, wird es trotzdem unterstützt; versuchen Sie z. B. Dia-TTS oder Moshi feinabzustimmen.

Zero-Shot-Klonen erfasst den Ton, verfehlt aber Tempo und Ausdruck und klingt oft roboterhaft und unnatürlich. Feinabstimmung liefert eine wesentlich genauere und realistischere Stimmreplikation. Hier mehr lesen.

Notebooks zur Feinabstimmung:

Wir haben außerdem TTS-Modelle (original und quantisiert) auf unserer Hugging-Face-Seite.

Ein TTS-Modell auswählen und laden

Für TTS werden kleinere Modelle wegen der geringeren Latenz und schnelleren Inferenz für Endnutzer oft bevorzugt. Eine Feinabstimmung eines Modells unter 3B Parametern ist oft ideal, und unsere Hauptbeispiele verwenden Sesame-CSM (1B) und Orpheus-TTS (3B), ein auf Llama basierendes Sprachmodell.

Details zu Sesame-CSM (1B)

CSM-1B ist ein Basismodell, während Orpheus-ft auf 8 professionelle Sprecherinnen und Sprecher feinabgestimmt ist, wodurch Stimmkonsistenz der entscheidende Unterschied ist. CSM benötigt Audiokontext für jede sprechende Person, um gut zu funktionieren, während Orpheus-ft diese Konsistenz bereits eingebaut hat.

Die Feinabstimmung von einem Basismodell wie CSM erfordert im Allgemeinen mehr Rechenleistung, während der Start von einem feinabgestimmten Modell wie Orpheus-ft bessere Ergebnisse direkt aus der Box bietet.

Zur Unterstützung von CSM haben wir neue Sampling-Optionen und ein Beispiel hinzugefügt, das zeigt, wie man Audiokontext für verbesserte Stimmkonsistenz verwendet.

Details zu Orpheus-TTS (3B)

Orpheus ist auf einem großen Sprachkorpus vortrainiert und zeichnet sich durch die Erzeugung realistischer Sprache mit integrierter Unterstützung für emotionale Hinweise wie Lachen und Seufzen aus. Seine Architektur macht es zu einem der am einfachsten zu nutzenden und zu trainierenden TTS-Modelle, da es über llama.cpp exportiert werden kann, was eine hervorragende Kompatibilität über alle Inferenz-Engines hinweg bedeutet. Für nicht unterstützte Modelle können Sie nur die LoRA-Adapter-Safetensors speichern.

Modelle laden

Da Sprachmodelle normalerweise klein sind, können Sie die Modelle mit LoRA 16-Bit oder vollständigem Fine-Tuning FFT trainieren, was möglicherweise qualitativ bessere Ergebnisse liefert. Um es in LoRA 16-Bit zu laden:

Wenn dies ausgeführt wird, lädt Unsloth die Modellgewichte herunter. Wenn Sie 8-Bit bevorzugen, könnten Sie verwenden load_in_8bit = True, oder für vollständige Feinabstimmung setzen Sie full_finetuning = True (stellen Sie sicher, dass Sie genügend VRAM haben). Sie können den Modellnamen auch durch andere TTS-Modelle ersetzen.

Hinweis: Der Tokenizer von Orpheus enthält bereits spezielle Tokens für Audioausgabe (mehr dazu später). Sie nicht benötigen keinen separaten Vocoder – Orpheus gibt Audio-Tokens direkt aus, die zu einer Wellenform dekodiert werden können.

Ihr Datenset vorbereiten

Ein TTS-Feinabstimmungsdatensatz besteht mindestens aus Audioclips und ihren entsprechenden Transkripten (Text). Verwenden wir das Elise Datenset das ein etwa 3-stündiger englischer Sprachkorpus mit nur einer sprechenden Person ist. Es gibt zwei Varianten:

  • MrDragonFox/Elise – eine angereicherte Version mit Emotions-Tags (z. B. <sigh>, <laughs>), die in den Transkripten eingebettet sind. Diese Tags in spitzen Klammern kennzeichnen Ausdrücke (Lachen, Seufzen usw.) und werden vom Tokenizer von Orpheus als spezielle Tokens behandelt

  • Jinsaryko/Elise – Basisversion mit Transkripten ohne spezielle Tags.

Der Datensatz ist so organisiert, dass es pro Eintrag ein Audio und ein Transkript gibt. Auf Hugging Face haben diese Datensätze Felder wie audio (die Wellenform), text (die Transkription) und einige Metadaten (Sprechername, Tonhöhenstatistiken usw.). Wir müssen Unsloth ein Datenset aus Audio-Text-Paaren zuführen.

Bei einigen Modellen wie Sesame-CSM-1Bkönnen Sie eine Variabilität der Stimme über Generierungen hinweg mit Sprecher-ID 0 bemerken, weil es ein Basismodellist – es hat keine festgelegten Stimmidentitäten. Sprecher-ID-Tokens helfen hauptsächlich dabei, Konsistenz innerhalb eines Gesprächszu erhalten, nicht über separate Generierungen hinweg.

Um eine konsistente Stimme zu erhalten, geben Sie kontextuelle Beispielean, etwa einige Referenz-Audioclips oder vorherige Äußerungen. Das hilft dem Modell, die gewünschte Stimme zuverlässiger zu imitieren. Ohne das ist Variabilität zu erwarten, selbst bei derselben Sprecher-ID.

Option 1: Verwendung der Hugging-Face-Datasets-Bibliothek – Wir können das Elise-Datenset mit Hugging Faces datasets Bibliothek laden:

Dadurch wird der Datensatz heruntergeladen (ca. 328 MB für etwa 1,2k Samples). Jedes Element in Datenset ist ein Dictionary mit mindestens:

  • "audio": der Audioclip (Wellenformarray und Metadaten wie Abtastrate) und

  • "text": die Transkript-String

Orpheus unterstützt Tags wie <laugh>, <chuckle>, <sigh>, <cough>, <sniffle>, <groan>, <yawn>, <gasp>usw. Zum Beispiel: "Ich habe dich so sehr vermisst <laugh>!". Diese Tags sind in spitze Klammern eingeschlossen und werden vom Modell als spezielle Tokens behandelt (sie entsprechen den erwarteten Tags von Orpheus wie <laugh> und <sigh>. Während des Trainings lernt das Modell, diese Tags mit den entsprechenden Audiomustern zu verknüpfen. Der Elise-Datensatz mit Tags enthält bereits viele davon (z. B. 336 Vorkommen von „laughs“, 156 von „sighs“ usw., wie auf der Dataset-Card aufgeführt). Wenn Ihr Datensatz solche Tags nicht enthält, Sie sie aber einbinden möchten, können Sie die Transkripte manuell an den Stellen annotieren, an denen das Audio diese Ausdrucksformen enthält.

Option 2: Einen benutzerdefinierten Datensatz vorbereiten – Wenn Sie Ihre eigenen Audiodateien und Transkripte haben:

  • Organisieren Sie Audioclips (WAV/FLAC-Dateien) in einem Ordner.

  • Erstellen Sie eine CSV- oder TSV-Datei mit Spalten für Dateipfad und Transkript. Zum Beispiel:

  • Verwenden Sie load_dataset("csv", data_files="mydata.csv", split="train") zum Laden. Möglicherweise müssen Sie dem Dataset-Loader mitteilen, wie Audiopfadnamen behandelt werden sollen. Eine Alternative ist die Verwendung der datasets.Audio Funktion, um Audiodaten bei Bedarf zu laden:

    Dann dataset[i]["audio"] wird das Audio-Array enthalten.

  • Stellen Sie sicher, dass Transkripte normalisiert sind (keine ungewöhnlichen Zeichen, die der Tokenizer möglicherweise nicht kennt, außer den Emotions-Tags, falls verwendet). Stellen Sie außerdem sicher, dass alle Audiodateien eine einheitliche Abtastrate haben (resamplen Sie sie bei Bedarf auf die Zielrate, die das Modell erwartet, z. B. 24 kHz für Orpheus).

Zusammenfassend gilt für die Datensatzvorbereitung:

  • Sie benötigen eine Liste von (Audio, Text) Paaren.

  • Verwenden Sie die HF datasets Bibliothek, um das Laden und optional die Vorverarbeitung (z. B. Resampling) zu handhaben.

  • Fügen Sie alle spezielle Tags in den Text ein, die das Modell lernen soll (stellen Sie sicher, dass sie im <angle_brackets> Format vorliegen, damit das Modell sie als separate Tokens behandelt).

  • (Optional) Bei mehreren Sprecherinnen/Sprechern könnten Sie ein Sprecher-ID-Token im Text einfügen oder einen separaten Ansatz mit Sprecher-Embedding verwenden, aber das geht über diesen Grundleitfaden hinaus (Elise ist Ein-Sprecherinnen-/Ein-Sprecher-Datensatz).

TTS mit Unsloth feinabstimmen

Jetzt beginnen wir mit der Feinabstimmung! Wir werden dies mit Python-Code veranschaulichen (den Sie in einem Jupyter-Notebook, Colab usw. ausführen können).

Schritt 1: Modell und Datensatz laden

In all unseren TTS-Notebooks aktivieren wir das LoRA-Training (16-Bit) und deaktivieren das QLoRA-Training (4-Bit) mit: load_in_4bit = False. So kann das Modell Ihren Datensatz in der Regel besser lernen und eine höhere Genauigkeit erreichen.

Wenn der Speicher sehr begrenzt ist oder der Datensatz groß ist, können Sie streamen oder in Blöcken laden. Hier passen 3 Stunden Audio problemlos in den RAM. Wenn Sie Ihr eigenes Datensatz-CSV verwenden, laden Sie es entsprechend.

Schritt 2: Fortgeschritten – Die Daten für das Training vorverarbeiten (optional)

Wir müssen Eingaben für den Trainer vorbereiten. Für Text-zu-Sprache ist ein Ansatz, das Modell kausal zu trainieren: Text- und Audio-Token-IDs als Zielsequenz zu verketten. Da Orpheus jedoch ein rein dekoderbasiertes LLM ist, das Audio ausgibt, können wir den Text als Eingabe (Kontext) übergeben und die Audio-Token-IDs als Labels verwenden. In der Praxis kann Unsloths Integration dies automatisch tun, wenn die Konfiguration des Modells es als Text-zu-Sprache identifiziert. Falls nicht, können wir etwas wie Folgendes tun:

Das Obige ist eine Vereinfachung. In Wirklichkeit müssten Sie, um Orpheus korrekt feinabzustimmen, die Audio-Tokens als Teil der Trainings-Labelshaben. Das Vortraining von Orpheus umfasste wahrscheinlich die Umwandlung von Audio in diskrete Tokens (über einen Audio-Codec) und das Training des Modells, diese anhand des vorhergehenden Textes vorherzusagen. Für die Feinabstimmung auf neue Sprachdaten müssten Sie auf ähnliche Weise die Audio-Tokens für jeden Clip erhalten (mithilfe des Audio-Codecs von Orpheus). Das Orpheus-GitHub stellt ein Skript für die Datenverarbeitung bereit – es kodiert Audio in Sequenzen von <custom_token_x> Tokens.

Allerdings kann Unsloth das möglicherweise abstrahieren: Wenn das Modell ein FastModel mit einem zugehörigen Processor ist, der mit Audio umgehen kann, könnte es das Audio im Datensatz automatisch in Tokens kodieren. Falls nicht, müssten Sie jeden Audioclip manuell in Token-IDs kodieren (mithilfe des Codebooks von Orpheus). Dies ist ein fortgeschrittener Schritt über diesen Leitfaden hinaus, aber beachten Sie, dass das bloße Verwenden von Text-Tokens dem Modell nicht das eigentliche Audio beibringt – es muss den Audiomustern entsprechen.

Nehmen wir an, Unsloth bietet eine Möglichkeit, Audio direkt einzuspeisen (zum Beispiel durch Setzen von processor und Übergabe des Audio-Arrays). Falls Unsloth die automatische Audio-Tokenisierung noch nicht unterstützt, müssen Sie möglicherweise die encode_audio Funktion des Orpheus-Repositories verwenden, um Token-Sequenzen für das Audio zu erhalten, und diese dann als Labels verwenden. (Die Datensatzeinträge enthalten tatsächlich Phoneme und einige akustische Merkmale, was auf eine entsprechende Pipeline hindeutet.)

Schritt 3: Trainingsargumente und Trainer einrichten

Wir machen 60 Schritte, um die Sache zu beschleunigen, aber Sie können setzen num_train_epochs=1 für einen vollständigen Durchlauf und max_steps=None. Die Verwendung von per_device_train_batch_size >1 kann bei Multi-GPU-Setup zu Fehlern führen. Um Probleme zu vermeiden, stellen Sie sicher, dass CUDA_VISIBLE_DEVICES auf eine einzelne GPU gesetzt ist (z. B. CUDA_VISIBLE_DEVICES=0). Passen Sie es nach Bedarf an.

Schritt 4: Mit der Feinabstimmung beginnen

Dies startet die Trainingsschleife. Sie sollten Protokolle des Loss alle 50 Schritte sehen (wie durch logging_stepsfestgelegt). Das Training kann je nach GPU einige Zeit dauern – zum Beispiel können auf einer Colab-T4-GPU ein paar Epochen mit 3 Stunden Daten 1–2 Stunden dauern. Unsloths Optimierungen machen es schneller als das Standard-HF-Training.

Schritt 5: Das feinabgestimmte Modell speichern

Nachdem das Training abgeschlossen ist (oder wenn Sie es mitten drin stoppen, wenn es Ihnen ausreichend erscheint), speichern Sie das Modell. Dadurch werden NUR die LoRA-Adapter gespeichert, nicht das vollständige Modell. Um in 16-Bit oder GGUF zu speichern, weiter unten scrollen!

Dadurch werden die Modellgewichte gespeichert (bei LoRA werden möglicherweise nur die Adaptergewichte gespeichert, wenn das Basismodell nicht vollständig feinabgestimmt ist). Wenn Sie --push_model in der CLI oder trainer.push_to_hub()verwendet haben, könnten Sie es direkt auf den Hugging Face Hub hochladen.

Jetzt sollten Sie ein feinabgestimmtes TTS-Modell im Verzeichnis haben. Der nächste Schritt ist, es zu testen, und falls unterstützt, können Sie llama.cpp verwenden, um es in eine GGUF-Datei zu konvertieren.

Feinabstimmung von Sprachmodellen vs. Zero-Shot-Stimmklonen

Man sagt, man könne eine Stimme mit nur 30 Sekunden Audio mit Modellen wie XTTS klonen – ohne Training. Technisch stimmt das, aber es verfehlt den Punkt.

Zero-Shot-Stimmklonen, das auch in Modellen wie Orpheus und CSM verfügbar ist, ist eine Annäherung. Es erfasst die allgemeine Tonlage und Klangfarbe einer Stimme, reproduziert aber nicht das gesamte Ausdrucksspektrum. Details wie Sprechgeschwindigkeit, Formulierungen, vokale Eigenheiten und die Feinheiten der Prosodie gehen verloren – Dinge, die einer Stimme ihre Persönlichkeit und Einzigartigkeit.

verleihen. Wenn Sie nur eine andere Stimme möchten und mit denselben Wiedergabemustern einverstanden sind, ist Zero-Shot normalerweise gut genug. Die Sprache wird jedoch weiterhin dem Stil des Modellsfolgen, nicht dem der sprechenden Person.

Für alles, was persönlicher oder ausdrucksstärker sein soll, brauchen Sie Training mit Methoden wie LoRA, um wirklich zu erfassen, wie jemand spricht.

Zuletzt aktualisiert

War das hilfreich?