Sprache / Language


Deutsche Version

Llama-3.1-8B-Instruct-TTS-Phonetic-Denglish (v0.1-alpha)

Demo in Hugging Face Spaces

Du kannst dieses Modell direkt in Deinem Browser testen. Besuche dazu die Gradio-Demo-App in den Hugging Face Spaces.

⚠️ Wichtiger Hinweis: Dies ist KEIN Chatbot! Dieses Modell wurde strikt als Text-Transformator (phonetischer Präprozessor) trainiert. Es beantwortet keine Fragen, führt keine Gespräche und reagiert nicht auf Anweisungen. Wenn du das Modell fragst: „Wie geht es dir?“, wird es nicht antworten, sondern den Satz stur in Lautschrift ausgeben, bzw. einen deutschen Text einfach unverändert zurückgeben: Wie geht es dir?. Für die normale Chat-Interaktion ist dieses Modell nicht geeignet.

Dieses Modell fungiert ganz spezifisch als phonetischer Präprozessor für deutsche Text-to-Speech (TTS) Systeme. Es ist besonders für End-to-End-Architekturen wie Piper unter Verwendung der Thorsten-Stimme optimiert, sollte jedoch grundsätzlich auch für andere deutsche TTS Stimmen funktionieren. In die Demo auf Hugging Face wurde deshalb auch die Stimme Kerstin integriert, sodass man beispielhaft eine männliche und eine weibliche Stimme hören kann.

In modernen "denglischen" Texten führen englische Wörter, Abkürzungen und Zahlen oft zu Fehlern in der deutschen Sprachsynthese und erzeugen eine unverständliche Aussprache. Dieses Modell wurde entwickelt, um dieses Problem zu lösen.

✨ Hauptfunktionen

  • Intelligentes Code-Switching: Standardmäßiger deutscher Text wird nicht verändert. Die Grammatik, Struktur und originalen Ziffern bleiben unangetastet.
  • Denglisch-Phonetisierung: Übersetzt englische Begriffe innerhalb von deutschem Text in eine flüssige deutsche Lautschrift (zum Beispiel wird download zu daunlohd ).
  • Kontextbasierte Behandlung von Zahlen und Einheiten: Erweitert Abkürzungen und Symbole nativ. Die Angabe 12,5cm wird in englischen Kontexten zu Twällw-Päunt-Feihw ßänti Mieters, im deutschen Kontext jedoch zu 12 Komma 5 Zenti Meter.

⚙️ Erforderliche Prompt-Struktur & Formatierung

Um die phonetischen Transkriptionsfähigkeiten korrekt auszulösen, muss der exakte System-Prompt und der User-Anker-Token verwendet werden, auf den das Modell trainiert wurde:

1. System Prompt

You are a phonetic transcriber. Transpose only English and Denglish words into German phonetics.

2. User Anchor Token

Jede Eingabe des Nutzers muss unmittelbar vor dem Textblock mit dem Anker-Token [DENGLISH] versehen werden.

Beispiel für das exakte Format (Llama-3 Chat Template)

<|begin_of_text|><|start_header_id|>system<|end_header_id|>

You are a phonetic transcriber. Transpose only English and Denglish words into German phonetics.<|eot_id|><|start_header_id|>user<|end_header_id|>

[DENGLISH] Dearest creature in creation
Studying English pronunciation
I will teach you in my verse
Sounds like corpse, corps, horse and worse.<|eot_id|><|start_header_id|>assistant<|end_header_id|>Dierest Krietscher in Krieäischen,
Staddiing Inglisch Pronanßiäischen,
Ei will tietsch juh in mei Wöhrß,
ßaunds leik Kohrs, Kohr, Hoahrs änd uöhrß.<|eot_id|>

⚡ Showcase & Beispiele

Hier sind die wichtigsten Anwendungsfälle, die zeigen, wie das Modell Texte für die TTS-Engine aufbereitet:

1. Deutscher Text bleibt unverändert

Standardmäßiger deutscher Text wird unverändert zurückgegeben. Lediglich Einheiten und einige Zeichen und Symbole werden phonetisch ausgeschrieben:

  • Eingabe: [DENGLISH] Ein deutscher Text sollte grundsätzlich so stehen bleiben wie er ist. Etwa ein Pferd frisst keinen Gurkensalat und ein Auto fährt mit 50 km/h auf der 10km langen Straße. Lediglich einige Einheiten werden ausgeschrieben, etwa die Fläche beträgt 25m² oder das Gefäß fasst ein Volumen von 2,5l, was 2500ml entspricht oder 2500cm³ und im Falle von Wasser einem Gewicht von 2,5kg oder 2500g gleich kommt.
  • Ausgabe: Ein deutscher Text sollte grundsätzlich so stehen bleiben wie er ist. Etwa ein Pferd frisst keinen Gurkensalat und ein Auto fährt mit 50 km/h auf der 10 Kilometer langen Straße. Lediglich einige Einheiten werden ausgeschrieben, etwa die Fläche beträgt 25 Quadrat Meter oder das Gefäß fasst ein Volumen von 2,5 Liter, was 2500 Milli Liter entspricht oder 2500 Kubik Zenti Meter und im Falle von Wasser einem Gewicht von 2,5 Kilo Gramm oder 2500 Gramm gleich kommt.

2. Phonetische Aufbereitung von "Denglisch"

Englische Begriffe und eingedeutschte Verben werden in deutsche Phonetik übertragen:

  • Eingabe: [DENGLISH] Weil der Download laggy war wurde er asap gecancelt und vom project leader rescheduled. Wir haben den ganzen Tag gegrinded und abends mit der Community gechillt. Bei der Percussion Performance auf der Open Air Stage waren echt coole Vibes, obwohl die Location echt cringe war.
  • Ausgabe: Weil der Daunlohd läggi war wurde er äißap gekäntselt und vom Proddschäkt Lieder riskäddiuhlt. Wir haben den ganzen Tag gegreindet und abends mit der Kommjuhniti getschillt. Bei der Pörkaschen Pörfohamänns auf der Ohpen Ähr Stäidsch waren echt kuhle Weihbs, obwohl die Lokäischen echt krindsch war.

Man beachte: Im obigen Beispiel ist etwa das Wort "Percussion" definitiv nicht Teil meiner Trainingsdaten. Das LLama spuckt diese passende Phonetik ganz von allein aus...

3. Physikalische Einheiten nach Kontext

Die meisten Einheiten werden je nach sprachlichem Kontext phonetisch ausgeschrieben.

  • Deutscher Kontext:

    • Eingabe: [DENGLISH] Das Update wurde mit 10MB/s übertragen, während wir mit 50km/h fuhren. Das 100GB große Firmware-Upgrade wurde mit 10Gbps über eine High-Speed Connection bei einer Außentemperatur von 20°C gedownloadet, wobei die Latenz 10ms betrug. Der Blutdruck ist auf 160/90mmHg gestiegen, während wir uns mit 20m/s auf einem Areal von 200 km² fortbewegten. Der Lautsprecher hat eine Impedanz von 8Ω. Die Batteriekapazität unseres E-Autos betrug 120kWh bei einer Spannung von 800V und einem maximalen Ladestrom von 450A.
    • Ausgabe: Das Apdät wurde mit 10 Mega Bait pro Sekunde übertragen, während wir mit 50 Kilometer pro Stunde fuhren. Das 100 Giga Bait große Förmwär-Apgrähd wurde mit 10 Gigabits pro Sekunde über eine Hei Spied Konnäkschn bei einer Außentemperatur von 20 Grad Celsius gedaunlohdet, wobei die Latenz 10 Milli Sekunden betrug. Der Blutdruck ist auf 160 zu 90 Milli Meter Quecksilber gestiegen, während wir uns mit 20 Meter pro Sekunde auf einem Areal von 200 Quadrat Kilometer fortbewegten. Der Lautsprecher hat eine Impedanz von 8 Ohm. Die Batteriekapazität unseres E-Autos betrug 120 Kilo Watt Stunden bei einer Spannung von 800 Volt und einem maximalen Ladestrom von 450 Ampähr.
  • Englischer Kontext:

    • Eingabe: [DENGLISH] The update was downloaded with 10MB/s while we were driving with 50km/h. The 100GB sized firmware upgrade was downloaded at a speed of 1.5Gbps via a high-speed connection at an ambient temperature of 68°F with a latency of 10ms. The speaker has an impedance of 8Ω. The blood pressure rose to about 160/90mmHg while we were moving at an average speed of 45mph, covering an area of almost 200 km². The battery capacity of our EV measured 120kWh at 800V and a maximum charging current of 450A.
    • Ausgabe: Se Apdät woss daunlohdet wiss Tänn Mega Bait pör ßäckend weil wi wöhr dreiwing wiss Fifti Kilommieters pör Auer. Se Wonn-Handred Giga Bait ßeist Förmwär Apgrähd woss daunlohdet ätt ä Spied off Wonn-Päunt-Feihw Gigabits pör ßäckend via ä hei Spied Konnäckschen ätt än ämbiänt Tämprättscher off ßixti-Äit Digries Fahrenheit wiss ä Läitänßi off Tänn Milli ßäckends. Se Spieker häss än Impiehdens off Äit Ohm. Se Bladd Präscher rohs tu äbaut Wonn-Handred-ßixti tu Neihnti Milli Mieters off Mörkiuhri wail wi wöhr muhwing ätt än äwwridsch Spied off Fohrti-Feihw Meils pör Auer, kawwering än Ärria off orlmohst Tuh-Handred Squähr Kilommieters. Se Bätteri Käppässiti off auer Ie Wie mäschert Wonn-Handred-Twännti Kilo Wott Auers ätt Äit-Handred Wollts änd ä mäximum tschardsching Körrent off Fohr-Handred-Fifti Ämps.

Diese Beispiele sind 1:1 reale Ausgaben des BF16-Modells. Wie man sieht, macht das Llama nicht immer „Kilometer pro Stunde“ aus km/h, sondern lässt eine Einheit auch hin und wieder unverändert stehen. Bitte siehe dazu den Punkt Bekannte Einschränkungen und known Issues.

4. Intelligente Trennung von Nachkommastellen

Nachkommastellen werden durch Leerzeichen getrennt, damit die TTS die Ziffern einzeln ausspricht:

  • Deutscher Kontext:
    • Eingabe: [DENGLISH] Der Durchschnitt betrug 17,12345
    • Ausgabe: Der Durchschnitt betrug 17 Komma 1 2 3 4 5.
  • Englischer Kontext:
    • Eingabe: [DENGLISH] The average is 17.12345
    • Ausgabe: Se Äwwridsch iss ßäwwentien-Päunt-Wonn-Tuh-Trie-Fohr-Feihw.

5. Das denglische phonetische Zahlenschema

Für englische Zahlen nutzt das Modell folgende Lautschrift-Struktur: Siero, Wonn, Tuh, Trie, Fohr, Feihw, ßix, ßäwwen, Äit, Neihn, Tänn, Iläwwen, Twällw, ßöhrtien, Twännti-Wonn, Neihnti-Neihn, Handred, ßausänd und so weiter.

6. GPS-Koordinaten (Dezimal- und DMS-Format)

Das Modell übersetzt Koordinaten in flüssig sprechbare Sätze:

  • DMS-Format (Deutsch):
    • Eingabe: [DENGLISH] Der Eiffelturm in Paris befindet sich bei 48° 51' 29.6" N und 2° 17' 40.2" O.
    • Ausgabe: Der Eiffelturm in Paris befindet sich bei 48 Grad 51 Minuten 29 Komma 6 Sekunden nördlicher Breite und 2 Grad 17 Minuten 40 Komma 2 Sekunden östlicher Länge.
    • Hinweis zu Einschränkungen: Je nach Kontext kürzt das Modell hier manchmal auch selbstständig auf „Grad Nord“ oder „Grad Ost“ ab.
  • Dezimal-Format (Deutsch):
    • Eingabe: [DENGLISH] Der Eiffelturm in Paris befindet sich bei 48.858222N und 2.294500E.
    • Ausgabe: Der Eiffelturm in Paris befindet sich bei 48 Komma 8 5 8 2 2 2 Grad Nord und 2 Komma 2 9 4 5 0 0 Grad Ost.
  • Dezimal-Format (Englisch):
    • Eingabe: [DENGLISH] The Eiffel tower in Paris is located at 48.858222N, 2.294500E.
    • Ausgabe: Se Eiffel Tauer in Pärris iss lokätet ätt Fohrti-Äit-Päunt-Äit-Feihw-Äit-Tuh-Tuh-Tuh Digries Norß änd Tuh-Päunt-Tuh-Neihn-Fohr-Feihw-Siero-Siero Digries Iest.

7. Spezialfall: IP-Adressen (Sicherheitsnetz)

Damit sich das Modell bei komplexen Netzwerkdaten nicht verschluckt oder in Endlosschleifen verfällt, werden IPv4- und IPv6-Adressen exakt eins zu eins durchgeschleift und im englischen Kontext nicht transkribiert:

  • Eingabe: [DENGLISH] Die Adresse lautet 127.0.0.1
  • Ausgabe: Die Adresse lautet 127.0.0.1.

8. Preise, Währungen und Währungssymbole

  • Eingabe: [DENGLISH] The purchased item was sold for $1234.99.
  • Ausgabe: Se pörtschäist Eitem woss sohld for Wonn-ßausänd-Tuh-Handred-ßöhrti-Fohr Dollars änd Neihnti-Neihn ßents.
  • Empfehlung: Da die Trennschärfe bei Zahlen bei den kleineren 4-Bit- und 5-Bit-Modellen abnimmt, wird für Texte mit vielen Zahlen und Einheiten dringend die Nutzung des unquantisierten 16-Bit-Modells (BF16) empfohlen.

9. Vollständig englische Texte (inkl. BBC / CNN News-Talk)

Das Modell kann grundsätzlich auch komplette englische Textabschnitte flüssig für die deutsche TTS aufbereiten:

  • Eingabe: [DENGLISH] The horse doesn't eat no cucumber salad and 2+2=4.
  • Ausgabe: Se Hoahrs dasn't iet noh Kiuhkamber Säläd änd Tuh plass Tuh iquäls Fohr.
📰 Praxisbeispiel: Englische Nachrichten (CNN)
  • Eingabe: [DENGLISH] The Iran war’s oil price shock lifted the Federal Reserve’s preferred inflation gauge to 3.8% in April from 3.5% the month before, according to Commerce Department data. The Personal Consumption Expenditures price index rose 0.4% on a monthly basis, slowing from a 0.7% increase in March. Consumer spending, which powers about two-thirds of the economy, rose 0.5% in April – a seemingly resilient but slower pace than the 1% jump in March.
  • Ausgabe: Se Iran Woahr's Eul Preiß Schock liftet se Fädderäl Riesörw's prieföhrt Infläischen Gäidsch tu Trie-Päunt-Äit Pörßent in Äpril fromm Trie-Päunt-Feihw Pörßent se Monns biefohr, äckording tu Kommerß Dipahrtment Däta. Se Pörßenäll Konßampschen Äxpänditschers Preiß Index rohs Siero-Päunt-Fohr Pörßent onn ä monnßli Bäsis, slohing fromm ä Siero-Päunt-ßäwwen Pörßent Inkries in Martsch. Konnßiuhmer Spännding, witsch pauers äbaut tuh-ßöhrds off se Ikonnemi, rohs Siero-Päunt-Feihw Pörßent in Äpril - ä ßiemingli risiliännt batt sloher Päiß sänn se Wonn Pörßent Dschamp in Martsch.

🛠️ Implementierung & Workflow

Das Modell kann mit jedem Standard-Runner für llama.cpp, mit Ollama oder lokalen Inferenz-Frontends (wie LM Studio oder KoboldCPP) betrieben werden. Es lässt sich als Text-transformierende Middleware direkt in deine Code-Pipeline integrieren.

Nutzung mit der Transformers-Bibliothek

Um dieses Modell (LoRA) zu laden, benötigst Du das originale LLama3.1 Base Model und die Bibliothekien transformers und peft.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

base_model_id = "meta-llama/Llama-3.1-8B-Instruct"
peft_model_id = "RudraChakrin/Llama-3.1-8B-Instruct-TTS-Phonetic-Denglish-LoRA"

# 1. Tokenizer und Base Model laden
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)

# 2. LoRA Gewichte Laden
model = PeftModel.from_pretrained(model, peft_model_id)

print("LoRA Denglisch Phonetic Processor erfolgreich geladen.")

Der Ablauf der Pipeline ist wie folgt aufgebaut:

  • Schritt 1: Roher, gemischter Text-Input
  • Schritt 2: Verarbeitung durch die Llama Phonetic Engine
  • Schritt 3: Ausgabe des phonetisch optimierten Textes
  • Schritt 4: Sprachausgabe über Piper-TTS (z.B. TTS-Stimmen Thorsten oder Kerstin)

Bekannte Einschränkungen & "known Issues" (v0.1 alpha)

  1. Gelegentliche Versprecher: Das Modell neigt momentan noch dazu, gelegentlich manche Wörter, die es grundsätzlich beherrscht, dennoch hin und wieder falsch auszusprechen. Es kann 99 Mal ein Wort korrekt aussprechen, doch beim 100. Mal verbuchselt es einige Wechstaben. Dies geschieht vor allem, wenn der Eingabetext etwas länger ist. Als Lösung empfehle ich, die Eingabe längerer Texte durch eine geeignete Vorverarbeitung in kleinere Happen zu zerlegen - etwa durch Auftrennung längerer Texte in einzelne Sätze oder kürzere Textabschnitte.

  2. Scharfes 'S', bzw. "ß" am Wortanfang, wenn als zweiter Buchstabe ein Konsonant folgt: Eigentlich hat das Llama gelernt, dass deutsche TTS-Systeme, wie piper/Thorsten oder Kerstin, ein scharfes S, bzw. ein "ß" am Anfang eines Wortes nur aussprechen können, wenn der zweite Buchstabe ein Vokal ist, also etwa engl. 'soul'->'ßohl' funktioniert super, aber bei 'stone'->'ßtohn' fällt die TTS zurück in den Buchstabiermodus und sagt "Esszett tohn". Normalerweise umschifft das Llama diese Limitation der deutschen Stimmen, indem es dann eben 'stone'->'Stohn' schreibt. Dennoch passiert es hin und wieder, dass es ein "ß" auch bei folgendem Konsonanten an den Wortanfang setzt. Besonders die komprimierten 4-bit und 5-bit Modelle sind hierfür anfällig.

  3. Das leidige "TH": Der Deutsche an sich hat bekanntlich seine Schwierigkeiten mit dem englischen Lispel-Laut "TH". Da geht es Kerstin und Thorsten nicht anders. Ein weiches "TH", wie in "this or that" wird entsprechend einfach durch ein "S" wiedergegeben, also "Siss or Sätt". Ein scharfes "TH", wie etwa in "thin" or "thief" wird durch ein 'ß" wiedergegeben, also "Se ßinn ßief stohl se Stohn." Doch der zuvor erwähnte Punkt 2) - "Kein ß am Wortanfang, wenn ein Konsonant folgt" macht es unmöglich, etwa "three" oder "thrust" oder "throttle" als "ßrie, ßrast oder ßrottel" zu schreiben. Zum Glück fallen nur recht wenige und eher seltene Wörter in diese Kategorie. In der Regel verwende ich hier ein "F" - also quasi "TOGA Pauer = Frottel auf full Frasst." Nicht schön - aber selten. Eine Ausnahme von dieser Regel bildet die 3, also 'three'. Hier nutze ich das "T", also "Trie" - analog zur ICAO/Aviation Phonetik - da sich diese Aussprache meiner Meinung nach immer noch besser anhört als "Frie" - und eine Verwechslung mit dem phonetisch dann gleich lautenden Baum="tree" eher unwahrscheinlich ist. Also "One, Two, Three => Wonn, Tuh, Trie".

  4. Heteronyme - also Wörter, die trotz identischer Schreibweise unterschiedlich ausgesprochen werden - kann das Llama i.d.R. noch nicht unterscheiden. "I read a book every day. Yesterday, I read a book." oder "lead":="führen"=>"lied" und "lead":="Blei"=>"lädd", oder auch "reading a book" vs. die Stadt "Reading" kennt es einfach noch nicht gut genug. Dazu bedarf es offenbar noch mehr Trainingsdaten, weil diese Unterschiede lediglich durch den Kontext ersichtlich sind. Das Beherrschen von Heteronymen hat für diese erste Version einfach noch keine Priorität.

  5. Gelegentliche Verwechslung von Einheiten: Dies ist ein Spezialfall von 'Punkt 1)Gelegentliche Versprecher'. Genau wie bei gewöhnlichen Wörtern auch, verbaselt das Llama manchmal auch die Einheiten. Es kann also vorkommen, dass es z.B. obwohl es grundsätzlich etwa GB=Gigabyte und Gb=Gigabit kennt, manchmal die Bits und Bytes durcheinanderbekommt. Da ein kleines "m", je nachdem wo es steht, entweder "Milli" oder auch "Meter" bedeuten kann, macht es hier manchmal Fehler. Auch hier bedarf es noch weiterer Trainingsbeispiele, damit es hier sicherer wird. Diese Unschärfen treten in den komprimierten 4-bit und 5-bit Modellen naturgemäß häufiger auf. Falls Du also Wert auf die korrekte Aussprache von Einheiten legst, sei auch hier die Verwendung des 16-bit Modells (BF16) empfohlen.

  6. Unbekannte Einheiten: Manche Einheiten kennt das Llama einfach (noch) gar nicht. Etwa mit 'fb⁻¹', was "inversen Femto Barns" entspricht, kann das Llama - ebenso wie die meisten Menschen wohl auch - schlicht nichts anfangen und halluziniert dann einfach wild vor sich hin. Etwa in diesem Fall (einer subjektiv unbekannten Einheit) könnte es wohl zumindest sowas wie "F B hoch Minus 1" generieren, doch scheitert diese erste Alpha-Version meist noch daran. Auf der anderen Seite wundere ich mich manchmal selbst darüber, dass es überraschenderweise manche Einheiten aus dem Hut zaubert, die es zumindest nicht von mir gelernt hat. So macht es etwa (meistens, s. Punkt 1) aus "mSv/h" tatsächlich "Milli Sievert pro Stunde" - obwohl ich ihm diese Einheit nie beigebracht habe. Man könnte wohl sagen, dass es weniger verbreitete Einheiten zwar "künstlerisch kreativ, aber dennoch häufig falsch" umsetzt. Es ist auch nicht das Ziel dieser ersten Alpha-Version, komplexe physikalische Einheiten auszusprechen, sondern das Training mancher dieser Einheiten als "Edge Cases" dient lediglich dazu, das Llama zumindest mit den häufigsten Einheiten vertraut zu machen, sodass es wenigstens Spannung von Stromstärke, Leistung von Drehmoment oder Quadratmeter von Kubikzentimetern unterscheiden kann. Mit alltäglich verwendeten "Allerweltseinheiten" sollte es so zumindest schon einigermaßen umgehen können.

  7. Programmcode: Dieses Llama beherrscht noch keine Programmiersprachen. Es ist schlicht noch nicht darauf trainiert, die Syntax von Programmcode auszusprechen. Falls in dieser Hinsicht Nachfrage besteht, lässt sich dies natürlich in zukünftigen Versionen einbauen. Für diese erste Alpha-Version ist Programmcode jedoch noch out of scope.

  8. Mathematische Formeln: Dieses "Denglisch-Llama" ist auch noch kein Mathematik-Llama. Gibt man dem Llama etwa so etwas wie: Summe(n) = (n * (n + 1)) / 2, dann wird es den Text im Zweifel einfach unverändert wieder ausgeben. Ich habe ihm beigebracht, "kryptisches Zeug", unaussprechliche Namen, IP Adressen etc. möglichst einfach so stehen zu lassen und unverändert wieder auszugeben. Eine sinnvolle Interpretation mathematischer Formeln jenseits von a²+b²=c² hat das Llama, ebenso wie das Programmieren, einfach noch nicht gelernt. Doch immerhin "seinen Pythagoras" kennt es bereits ;-)

  9. Französische Lehnwörter: Da dieses Llama mit dem klaren Ziel als "Denglisch-Llama" entwickelt wurde, sind seine Kenntnisse der Französischen Sprache (noch) ziemlich begrenzt. Zwar beherrscht es bereits einige häufiger genutzte französische Ausdrücke (lasst Euch überraschen), aber grundsätzlich ist die französische Sprache für diese Version nicht im Scope. Honi soit qui mal y pense.

👤 Autor & Kontakt

Sven Rein (RudraChakrin)

Ich habe dieses Modell mit dem Fokus auf digitale Barrierefreiheit und die Verbesserung der deutschen Sprachsynthese entwickelt. Mein Ziel ist es, die Qualität und die Nutzbarkeit deutscher Sprachausgabe zu verbessern und die Brücke zwischen komplexem "Denglisch" und natürlichem Klang zu schlagen.

Danksagung: Dieses Projekt ist eine dedizierte Erweiterung für die Open-Source-Sprachsynthese. Ein besonderer Dank geht an die Thorsten-Voice-Community, deren Arbeit diesen Ansatz inspiriert hat.

💬 Feedback & Mitwirken

Da es sich um eine frühe Alpha-Version handelt, lebt dieses Projekt vom Feedback der Community.

  • Fehler gefunden? Falls Euch Wörter auffallen, die falsch transkribiert werden oder die TTS-Stimme ins Stolpern bringen, lasst es mich wissen. Ich freue mich über Euer Feedback, um die Qualität in kommenden Versionen weiter zu verbessern.

Erweiterungen gewünscht? Wenn bestimmte Fachbegriffe, Abkürzungen oder Redewendungen in deinem Workflow fehlen, nehme ich diese gerne für zukünftige Trainingsläufe auf. Bitte nutze für Feedback, Kritik und Anregungen einfach den Community-Reiter (Community Tab) hier auf der Hugging Face Modellseite und erstelle eine neue Diskussion.


English Version

Llama-3.1-8B-Instruct-TTS-Phonetic-Denglish-LoRA (v0.1-alpha)

Open in Hugging Face Spaces

You can test this model directly inside your browser. Check out the live Gradio Demo App on Hugging Face Spaces.

⚠️ Important Note: This is NOT a Chatbot! This model has been strictly trained as a text transformer (phonetic preprocessor). It does not answer questions, engage in conversations, or follow conversational instructions. If you ask the model: “How are you?”, it will not reply, but instead stubbornly output the phonetic transcription: Hau ahr juh?. This model is entirely unsuited for standard chat interactions.

This model acts as a highly specialized phonetic preprocessor for German Text-to-Speech (TTS) systems. It is specifically optimized for end-to-end architectures like Piper using the Thorsten-Voice.

In modern technical text or daily communication, English words, abbreviations, and numbers frequently corrupt German speech synthesis, forcing the TTS into spelling mode or resulting in heavy pronunciation glitches. This model fixes these issues.

✨ Key Capabilities

  • Intelligent Code-Switching: Keeps standard German text untouched, leaving the grammar, structure, and original digits intact.
  • Denglisch Phonetic transcription: Translates English terms inside German text into German phonetics (for example, downloaded becomes daunlohdet).
  • Deterministic Unit Expansion: Expands abbreviations and symbols natively. For example, 12,5cm becomes Twällw-Päunt-Feihw ßänti Mieters in English contexts, but 12 Zenti Meter in German contexts.
  • Zero-Shot Resilience: Safely routes heavy alphanumeric strings like IPv4 or IPv6 addresses directly through without entering infinite loop hallucinations.

⚙️ Required Prompt Structure & Formatting

To successfully trigger the phonetic transcription capabilities, you must use the exact system prompt and user anchor token the model was trained on:

1. System Prompt

You are a phonetic transcriber. Transpose only English and Denglish words into German phonetics.

2. User Anchor Token

Every user query input must be prefixed with the [DENGLISH] anchor token immediately before the text block.

Exact Format Example (Llama-3.1 Chat Template)

<|begin_of_text|><|start_header_id|>system<|end_header_id|>

You are a phonetic transcriber. Transpose only English and Denglish words into German phonetics.<|eot_id|><|start_header_id|>user<|end_header_id|> 
[DENGLISH] Dearest creature in creation
Studying English pronunciation
I will teach you in my verse
Sounds like corpse, corps, horse and worse.<|eot_id|><|start_header_id|>assistant<|end_header_id|>Dierest Krietscher in Krieäischen,
Staddiing Inglisch Pronanßiäischen,
Ei will tietsch juh in mei Wöhrß,
ßaunds leik Kohrs, Kohr, Hoahrs änd uöhrß.<|eot_id|>

⚡ Showcase & Verification Examples

Here are the primary use cases demonstrating how the model pre-processes text for the German TTS engine:

1. German text remains untouched

Standard German text is kept entirely intact, with only physical units and some abbreviations or symbols getting spelled out phonetically:

  • Input: [DENGLISH] Ein deutscher Text sollte grundsätzlich so stehen bleiben wie er ist. Etwa ein Pferd frisst keinen Gurkensalat und ein Auto fährt mit 50 km/h auf der 10km langen Straße. Lediglich einige Einheiten werden ausgeschrieben, etwa die Fläche beträgt 25m² oder das Gefäß fasst ein Volumen von 2,5l, was 2500ml entspricht oder 2500cm³ und im Falle von Wasser einem Gewicht von 2,5kg oder 2500g gleich kommt.
  • Output: Ein deutscher Text sollte grundsätzlich so stehen bleiben wie er ist. Etwa ein Pferd frisst keinen Gurkensalat und ein Auto fährt mit 50 km/h auf der 10 Kilometer langen Straße. Lediglich einige Einheiten werden ausgeschrieben, etwa die Fläche beträgt 25 Quadrat Meter oder das Gefäß fasst ein Volumen von 2,5 Liter, was 2500 Milli Liter entspricht oder 2500 Kubik Zenti Meter und im Falle von Wasser einem Gewicht von 2,5 Kilo Gramm oder 2500 Gramm gleich kommt.

2. Phonetic Formatting of "Denglisch"

English terms and hybridized German-English verbs are converted into German phonetics:

  • Input: [DENGLISH] Weil der Download laggy war wurde er asap gecancelt und vom project leader rescheduled. Wir haben den ganzen Tag gegrinded und abends mit der Community gechillt. Bei der Percussion Performance auf der Open Air Stage waren echt coole Vibes, obwohl die Location echt cringe war.
  • Output: Weil der Daunlohd läggi war wurde er äißap gekäntselt und vom Proddschäkt Lieder riskäddiuhlt. Wir haben den ganzen Tag gegreindet und abends mit der Kommjuhniti getschillt. Bei der Pörkaschen Pörfohamänns auf der Ohpen Ähr Stäidsch waren echt kuhle Weihbs, obwohl die Lokäischen echt krindsch war.

Please note that e.g. the word "percussion" is definitely not part of my training data. The Llama is creating appropriate phonetics all by itself.

3. Physical Units by context

Physical units are spelled out phonetically in either German or English, depending on the surrounding context:

  • German Context:
    • Input: [DENGLISH] Das Update wurde mit 10MB/s übertragen, während wir mit 50km/h fuhren. Das 100GB große Firmware-Upgrade wurde mit 10Gbps über eine High-Speed Connection bei einer Außentemperatur von 20°C gedownloadet, wobei die Latenz 10ms betrug. Der Blutdruck ist auf 160/90mmHg gestiegen, während wir uns mit 20m/s auf einem Areal von 200 km² fortbewegten. Der Lautsprecher hat eine Impedanz von 8Ω. Die Batteriekapazität unseres E-Autos betrug 120kWh bei einer Spannung von 800V und einem maximalen Ladestrom von 450A.
    • Output: Das Apdät wurde mit 10 Mega Bait pro Sekunde übertragen, während wir mit 50 Kilometer pro Stunde fuhren. Das 100 Giga Bait große Förmwär-Apgrähd wurde mit 10 Gigabits pro Sekunde über eine Hei Spied Konnäkschn bei einer Außentemperatur von 20 Grad Celsius gedaunlohdet, wobei die Latenz 10 Milli Sekunden betrug. Der Blutdruck ist auf 160 zu 90 Milli Meter Quecksilber gestiegen, während wir uns mit 20 Meter pro Sekunde auf einem Areal von 200 Quadrat Kilometer fortbewegten. Der Lautsprecher hat eine Impedanz von 8 Ohm. Die Batteriekapazität unseres E-Autos betrug 120 Kilo Watt Stunden bei einer Spannung von 800 Volt und einem maximalen Ladestrom von 450 Ampähr.
  • English Context:
    • Input: [DENGLISH] The update was downloaded with 10MB/s while we were driving with 50km/h. The 100GB sized firmware upgrade was downloaded at a speed of 1.5Gbps via a high-speed connection at an ambient temperature of 68°F with a latency of 10ms. The speaker has an impedance of 8Ω. The blood pressure rose to about 160/90mmHg while we were moving at an average speed of 45mph, covering an area of almost 200 km². The battery capacity of our EV measured 120kWh at 800V and a maximum charging current of 450A.
    • Output: Se Apdät woss daunlohdet wiss Tänn Mega Bait pör ßäckend weil wi wöhr dreiwing wiss Fifti Kilommieters pör Auer. Se Wonn-Handred Giga Bait ßeist Förmwär Apgrähd woss daunlohdet ätt ä Spied off Wonn-Päunt-Feihw Gigabits pör ßäckend via ä hei Spied Konnäckschen ätt än ämbiänt Tämprättscher off ßixti-Äit Digries Fahrenheit wiss ä Läitänßi off Tänn Milli ßäckends. Se Spieker häss än Impiehdens off Äit Ohm. Se Bladd Präscher rohs tu äbaut Wonn-Handred-ßixti tu Neihnti Milli Mieters off Mörkiuhri wail wi wöhr muhwing ätt än äwwridsch Spied off Fohrti-Feihw Meils pör Auer, kawwering än Ärria off orlmohst Tuh-Handred Squähr Kilommieters. Se Bätteri Käppässiti off auer Ie Wie mäschert Wonn-Handred-Twännti Kilo Wott Auers ätt Äit-Handred Wollts änd ä mäximum tschardsching Körrent off Fohr-Handred-Fifti Ämps.

These examples resemble real output of the BF16-Model. As you can see, the LLama does not always transcribe "km/h" to "Kilomieters pör Auer", but sometimes it just leaves a unit as it is. Please refer to Bekannte Einschränkungen und known Issues.

4. Intelligent Decimal Point Splitting

Decimal places are separated by spaces to force the TTS engine to spell out the digits individually:

  • German Context:
    • Input: [DENGLISH] Der Durchschnitt betrug 17,12345
    • Output: Der Durchschnitt betrug 17 Komma 1 2 3 4 5.
  • English Context:
    • Input: [DENGLISH] The average is 17.12345
    • Output: Se Äwwridsch iss ßäwwentien-Päunt-Wonn-Tuh-Trie-Fohr-Feihw.

5. The Denglisch Phonetic Number Schema

For English numbers, the model utilizes the following phonetic mapping: Siero, Wonn, Tuh, Trie, Fohr, Feihw, ßix, ßäwwen, Äit, Neihn, Tänn, Iläwwen, Twällw, ßöhrtien, Twännti-Wonn, Neihnti-Neihn, Handred, ßausänd, and so on.

6. GPS Coordinates (Decimal and DMS Formats)

The model translates coordinate strings into smoothly readable sentences:

  • DMS Format (German Context):
    • Input: [DENGLISH] Der Eiffelturm in Paris befindet sich bei 48° 51' 29.6" N und 2° 17' 40.2" O.
    • Output: Der Eiffelturm in Paris befindet sich bei 48 Grad 51 Minuten 29 Komma 6 Sekunden nördlicher Breite und 2 Grad 17 Minuten 40 Komma 2 Sekunden östlicher Länge.
    • Quantization Note: Depending on context, the model may occasionally alternate between full definitions and shorter variants like "Grad Nord" or "Grad Ost".
  • Decimal Format (German Context):
    • Input: [DENGLISH] Der Eiffelturm in Paris befindet sich bei 48.858222N und 2.294500E.
    • Output: Der Eiffelturm in Paris befindet sich bei 48 Komma 8 5 8 2 2 2 Grad Nord und 2 Komma 2 9 4 5 0 0 Grad Ost.
  • Decimal Format (English Context):
    • Input: [DENGLISH] The Eiffel tower in Paris is located at 48.858222N, 2.294500E.
    • Output: Se Eiffel Tauer in Pärris iss lokätet ätt Fohrti-Äit-Päunt-Äit-Feihw-Äit-Tuh-Tuh-Tuh Digries Norß änd Tuh-Päunt-Tuh-Neihn-Fohr-Feihw-Siero-Siero Digries Iest.

7. Special Case: IP Addresses (Safety Net)

To prevent the model from hallucinating or entering infinite loops when processing network data, IPv4 and IPv6 addresses are passed through exactly as-is. They are intentionally NOT transcribed in English contexts:

  • Input: [DENGLISH] Die Adresse lautet 127.0.0.1
  • Output: Die Adresse lautet 127.0.0.1.

8. Prices, Currencies, and Symbols

  • Input: [DENGLISH] The purchased item was sold for $1234.99.
  • Output: Se pörtschäist Eitem woss sohld for Wonn-ßausänd-Tuh-Handred-ßöhrti-Fohr Dollars änd Neihnti-Neihn ßents.
  • Important Recommendation: Because character-level precision drops slightly in the 4-bit and 5-bit quantized files, using the unquantized 16-bit master file (BF16) is highly recommended if your workflow heavily relies on reading texts with numbers and physical units.

9. Fully English Texts (incl. BBC / CNN News-Talk)

The model can process entire English text segments smoothly for German speech synthesis:

  • Input: [DENGLISH] The horse doesn't eat no cucumber salad and 2+2=4.
  • Output: Se Hoahrs dasn't iet noh Kiuhkamber Säläd änd Tuh plass Tuh iquäls Fohr.
📰 Example from the News (CNN)
  • Input: [DENGLISH] The Iran war’s oil price shock lifted the Federal Reserve’s preferred inflation gauge to 3.8% in April from 3.5% the month before, according to Commerce Department data. The Personal Consumption Expenditures price index rose 0.4% on a monthly basis, slowing from a 0.7% increase in March. Consumer spending, which powers about two-thirds of the economy, rose 0.5% in April – a seemingly resilient but slower pace than the 1% jump in March.
  • Output: Se Iran Woahr's Eul Preiß Schock liftet se Fädderäl Riesörw's prieföhrt Infläischen Gäidsch tu Trie-Päunt-Äit Pörßent in Äpril fromm Trie-Päunt-Feihw Pörßent se Monns biefohr, äckording tu Kommerß Dipahrtment Däta. Se Pörßenäll Konßampschen Äxpänditschers Preiß Index rohs Siero-Päunt-Fohr Pörßent onn ä monnßli Bäsis, slohing fromm ä Siero-Päunt-ßäwwen Pörßent Inkries in Martsch. Konnßiuhmer Spännding, witsch pauers äbaut tuh-ßöhrds off se Ikonnemi, rohs Siero-Päunt-Feihw Pörßent in Äpril - ä ßiemingli risiliännt batt sloher Päiß sänn se Wonn Pörßent Dschamp in Martsch.

🛠️ Implementation & Workflow

Usage with the transformers library

To use these adapters, you need to load the official Meta Llama base model first, and then apply this LoRA layer on top using peft.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

base_model_id = "meta-llama/Llama-3.1-8B-Instruct"
peft_model_id = "RudraChakrin/Llama-3.1-8B-Instruct-TTS-Phonetic-Denglish-LoRA"

# 1. Load Tokenizer and Base Model
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)

# 2. Load and Apply the LoRA Weights
model = PeftModel.from_pretrained(model, peft_model_id)

print("LoRA Denglish Phonetic Processor successfully loaded.")

The pipeline workflow is structured as follows:

  • Step 1: Raw Mixed Text Input
  • Step 2: Llama Phonetic Engine Processing
  • Step 3: Phonetic Text Output
  • Step 4: Speech Synthesis via Piper-TTS (e.g. using voices like Thorsten or Kerstin )

Known Limitations & Issues (v0.1-alpha)

  1. Occasional Mispronunciations: The model may occasionally mispronounce words it usually handles perfectly. It might output a word correctly 99 times, but mix up the letters on the 100th attempt. This occurs more frequently with longer input texts. Workaround: We recommend splitting longer texts into smaller chunks (e.g., individual sentences) before feeding them into the model.

  2. The "ß" at the Beginning of Words: German TTS systems (like Piper with Thorsten or Kerstin) can only pronounce a leading sharp "S" ("ß") if the following letter is a vowel (e.g., English "soul" -> "ßohl" works perfectly). If followed by a consonant (e.g., "stone" -> "ßtohn"), the TTS engine glitches into spelling mode ("Eszett-tohn"). While Llama usually circumvents this by writing "Stohn", it occasionally slips up—especially in the 4-bit and 5-bit quantized versions.

  3. The "TH" Dilemma: German TTS voices natively struggle with the English "TH" sound. Soft "TH" sounds (like "this" or "that") are mapped to a standard "S" ("Siss or Sätt"). Sharp "TH" sounds (like "thin" or "thief") use a "ß" ("Se ßinn ßief"). However, due to limitation #2, words starting with "TH" followed by a consonant (like "three", "thrust", "throttle") cannot be written as "ßrie". In these rare edge cases, the model uses an "F" sound instead ("Frottel"). Exception: The number "three" is mapped to "Trie" (analogous to aviation phonetics), as it sounds cleaner than "Frie" and avoids confusion with "tree".

  4. Heteronyms: The model cannot reliably distinguish heteronyms (words spelled identically but pronounced differently based on context) yet. Examples like "I read a book every day" vs. "Yesterday I read a book", or "lead" (to guide -> "lied") vs. "lead" (the metal -> "lädd") require more context-specific training data and are not prioritized in this first alpha release.

  5. Unit Confusion: A sub-issue of occasional mispronunciations. Llama sometimes mixes up bits and bytes (e.g., confusing GB and Gb) or squashes ambiguous abbreviations (like a single "m", which could mean "milli" or "meter"). These inaccuracies are significantly more common in the 4-bit and 5-bit quantized files. For workflows reliant on high-precision unit expansion, the 16-bit master file (BF16) is strongly recommended.

  6. Unknown Units: Rare or highly scientific units (such as 'fb⁻¹' for inverse femtobarns) are not yet supported and will likely trigger hallucinations. While the model occasionally surprises us by correctly expanding un-trained terms (like mapping "mSv/h" to "Milli Sievert pro Stunde"), less common units are generally out of scope for this version. The primary training focus was ensuring everyday units (like separating voltage from current, or square meters from cubic centimeters) are correctly processed.

  7. Source Code & Programming Languages: This Llama does not understand programming languages yet. It has simply not been trained to read out code syntax. If there is enough demand from the community, this could certainly be integrated into future versions. For this initial alpha release, processing raw source code is completely out of scope.

  8. Mathematical Formulas: This "Denglisch Llama" is not a math expert either. If you feed it complex equations like Sum(n) = (n * (n + 1)) / 2, it will likely just pass the text through completely unchanged. I have trained the model to leave "cryptic stuff," unpronounceable names, and IP addresses as they are to prevent wild hallucinations. A meaningful interpretation of mathematical formulas beyond basic equations like a² + b² = c² hasn't been learned yet. But hey, at least it already knows its Pythagoras! 😉

  9. French Loanwords: Since this model was developed with the clear goal of being a "Denglisch Llama," its knowledge of the French language is (still) quite limited. While it already handles a few commonly used French expressions surprisingly well (let yourself be surprised!), the French language is generally out of scope for this version. Honi soit qui mal y pense.

👤 Author & Contact

Sven Rein (RudraChakrin)

Credits: Developed as a dedicated community expansion framework for open-source speech synthesis accessibility. Special thanks to the Thorsten-Voice community for inspiring this approach.

💬 Feedback & Contributions

As this is an early alpha release, this project relies heavily on community feedback.

Found a bug? If you encounter words that are incorrectly transcribed or cause the TTS engine to glitch, please let me know.

Feature requests? If specific technical terms, acronyms, or common phrases are missing from your workflow, I would love to include them in future training runs. Please feel free to share your feedback, criticism, or suggestions by opening a new discussion in the Community Tab right here on this Hugging Face model page.

Downloads last month
17
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for RudraChakrin/Llama-3.1-8B-Instruct-TTS-Phonetic-Denglish-LoRA