Text zu Sprache, Sprache zu Text

Diesen Beitrag vorlesen lassen.
0:00 / 8:54

Jüngst haben wir in verschiedenen Projekten die Anforderung erhalten, dass Text auch in Form einer Vorlesefunktion angeboten werden soll. Parallel dazu hatten wir auch die umgekehrte Anfrage: zu bestehenden Audiodateien ein Transkript zu erzeugen.

Inhalte in diesem Beitrag

Ansätze mit unterschiedlicher Qualität

Als erstes haben wir als Möglichkeit die Browser-Vorlesefunktion getestet und einem Ansatz, Audio mit KI-Tools zu generieren, gegenüber gestellt. Mittels Javascript kann unterdessen jeder moderne Browser Text in Sprache umwandeln:

let audioReader = window.speechSynthesis;

Auf einer Demo Seite haben wir diese Funktion getestet. Keiner unserer Kunden war vollends von der Browser-Variante überzeugt, obwohl diese kostenlos genutzt werden kann. Das ist verständlich, weil nur Googles Mobile- und Desktop-Browser Chrome eine recht fliessend wirkende Vorlesestimme zur Verfügung stellt. Selbst wenn die eigene Website zu 90% von Personen exakt dieser Zielgruppe besucht wird, werden die restlichen 10% schonungslos enttäuscht:

  • Firefox bietet 100+ Stimmen. Diese unterschieden sich jedoch nur minimal. Und alle klingen sehr robotisch. Unter Linux noch etwas schlimmer als bei Windows. Generell würde ich das höchstens in Notfällen nutzen wollen.
  • Safari hat auf jeglichen Geräten (Mac, iPhone, iPad) eine ähnlich schlechte Qualität. Besser als Firefox, aber nicht viel. Einer Firma die Siri hervorgebracht hat, hätte ich da tatsächlich mehr zugetraut.
  • Andere Browser, die auf der gleichen Engine wie Chrome basieren haben teilweise gar keine Stimmen installiert oder ebenfalls nur sehr robotisch klingende. Die „gute“ Vorlesestimme scheint Google dem eigenen Browser vorzuenthalten.

Konkret kommt diese erst vielversprechend klingende und obendrein kostenlose Variante nun in keinem Projekt zum Einsatz.

Dienste zur KI-Audio Generierung

Als Alternative haben wir uns verschiedene Dienste angeschaut, welche mittels künstlicher Intelligenz Text in natürliche Sprache umwandeln. Vorne mit dabei in Top-Qualität sind Murf.AI und ElevenLabs. Ein vormaliger Pionier in dem Bereich, naturalreaders.com, ist zwar günstig, aber nur unwesentlich besser als Mr. Roboto, den man in Firefox kostenlos bekommt.

Diese Dienste bieten in der Regel Abos an, in denen eine bestimmte Anzahl Minuten an Audio pro Monat aus Text erzeugt werden kann – wird diese Anzahl Minuten überschritten, kommt ein Minutentarif zum Zug. Da hier üblicherweise schon wenige Minuten recht viel kosten, ist die Idee, dass man das Audio einmalig als Datei erzeugt und dann mehrfach nutzen/abspielen kann.

Das hat allerdings den Nachteil, dass man das Audio bei wesentlichen Änderungen an einem Text erneut erzeugen und bezahlen muss. Doch der Qualitätsunterschied ist in der Demo deutlich hörbar. Es fallen aber keine weiteren Kosten an, da lediglich Speicherplatz für MP3 und ein wenig Datenverkehr auf den eigenen Webservern erzeugt wird.

Für ein künftiges und potentiell weitere Projekte haben wir uns am Ende für ElevenLabs entschieden. Aus folgenden Gründen:

  • Bestes Preis-/Leistungsverhältnis, Möglichkeit zu Minutentarif, wenn Abo ausgeschöpft ist für den Monat.
  • Sehr viele vorkonfigurierte Stimmen für verschiedene Anwendungsfälle (News, Erzähler, sanfte Stimmen, tiefe Stimmen).
  • Umfangreiches Customizing der Stimmen ist möglich.
  • Eigene Stimme kann schnell antrainiert werden mit einer bestehenden Stimme als Basis. Das haben wir aber für das konkrete Projekt nicht getestet.
  • Aus dem Audio wird ein Transkript erzeugt, in welchem im Millisekundenbereich genau bekannt ist, wann welches Wort in der Audiodatei gesprochen wird. Das ist ein nettes Gimmick, welches wir in mindestens einem Projekt konkret brauchen.

Sprache zu Text

Das letzte Feature ist quasi die Überleitung in die spezielle Anforderung, dass der vorgelesene Text während des Vorlesens im Browser auch markiert werden muss. Teils Wort-, manchmal nur Satzweise, damit der Nutzer genau sieht, wo im Text die Vorlesestimme gerade ist. Mit dem Transkript welches Wort für Wort mitgeliefert wird, ist das kein Problem. So muss der Audio-Stream der abgespielt wird nur zeitgenau mit der Wortmarkierung synchron sein.

Nun stellt sich aber eine weitere Herausforderung: Der vom Kunden produzierte Content ist umfangreich und muss einmalig generiert werden. Das können wir im Hintergrund vom Webserver erledigen lassen. Das einzige Problem dabei sind die einmalig etwas höheren Kosten je nach Umfang. Soweit so gut. Nun gibt es aber in dem Projekt Texte, für die es bereits Audiodateien von professionellen Sprechern gibt. Wir haben also die Vorlesemöglichkeit und den Text. Wir können ihn aber nicht genau markieren, weil wir zu den vorhandenen Audiodateien kein Transkript haben, aus dem hervorgeht, wann welche Worte des Textes gesprochen wurden.

Lösung: OpenAI Whisper

OpenAI ist vielleicht einigen Leuten bekannt. Die Firma steckt hinter ChatGPT, einem Werkzeug das bestimmt einige in ihrem Arbeitsalltag bereits nutzen. Die Software Whisper ist ebenfalls von OpenAI, und es gibt sie offenbar auch als nicht ganz transparenten Bezahldienst.

Doch Whisper ist Opensource und kann mit technischen Fachwissen auf jedem PC installiert werden. Was es tut? Es kann aus Audiodateien genau dieses Transkript erzeugen. Es hört sich mehr oder weniger die Audiodatei an und zeichnet Wort für Wort (oder Satzweise) auf, wann welcher Text gelesen wird. So kann z.B. auch für ein YouTube Video ein automatisches Transkript erzeugt werden, welches als Overlay im Video genutzt werden kann. Mal abgesehen davon, dass YouTube das natürlich mit gleicher Methodik schon selbst sehr gut kann.

Nun handelt es sich um ca. 5000 Minuten Audio-Inhalt. Das ist nicht wenig. Mögliche Lösungen:

  • Audio-Inhalt ignorieren und aus dem Text neues Audio inklusive Transkript erzeugen. Kostenpunkt für zwei alternative Stimmen: einmalig ca. 3’000 CHF mit dem günstigsten KI Dienst (in diesem Fall Elevenlabs) – pro Stimme!
  • Den Onlinedienst von OpenAI Whisper verwenden. Allerdings ist nicht 100% transparent wie viel dieser genau kosten würde und APIs konnte ich dazu spontan nicht finden. Jede Datei Kapitelweise einzeln hochzuladen wäre nicht tragbar an manuellem Aufwand.
  • OpenAI Whisper selbst installieren und die Transkripte erzeugen!

Nun hat mich der Ehrgeiz gepackt. Obwohl nicht klar war ob wir dieses Projekt umsetzen – ich wollte wissen ob das geht! Mit einer Arbeitsstation mit Linux und potenter Nvidia 4080 Grafikkarte habe ich gute Voraussetzungen, dass das bei mir laufen sollte.

Doch das tat es zuerst nicht. Ich habe beispielhaft aus zwanzig Minuten Audio auf meinem Prozessor ein Transkript erzeugt. Das dauerte rund drei Stunden, weil ein Prozessor für eine derartige Aufgabe nicht geeignet ist. Whisper nutzt die Bibliothek CUDA, welche speziell Rechenoperationen mit Nvidia Grafikkarten spezialisiert ist. Doch die wurde nicht genutzt.

Nach einer Debugging-Session, warum das bei mir nicht läuft, habe ich alles am Start für einen neuen Versuch. Das Problem war, dass nach dem Update auf Ubuntu 24.04 LTS der falsche bzw. ein älterer Grafikkartentreiber verwendet wurde. Das merkte ich auf Linux nicht, da die Grafikkarte im meinem Büroalltag nur wenig zu tun hat. Also versuchen wir das nochmal:

whisper audio.mp3 --language German --output_format vtt --model medium --device cuda --fp16 True

Nun funktioniert die CUDA Bibliothek und das Erzeugen dauerte nicht mehr drei Stunden sondern nur noch zwei Minuten mit exakt dem gleichen Resultat. Und jetzt wissen wir auch, warum alles rund um künstliche Intelligenz kaum auf Prozessoren, sondern massgeblich auf Grafikkarten-Leistung aufgebaut ist.

Fazit

Im Projekt können wir nun einen Mix aus KI-erzeugtem Audio und vom Kunden angeliefertem Audio nutzen. Damit können die Besucher eine Vorlesefunktion inklusive automatischem Markieren des vorgelesenen Textes nutzen. Kosten fallen im Betrieb nur noch dann an, wenn neuer Inhalt in Form von z.B. Blog-Beiträgen oder neuen Hörbüchern erscheint.

Brauchst du auch Individualsoftware?

Erzähl Michael von deiner Idee.

Schreibe einen Kommentar

Bitte fülle alle mit * gekennzeichneten Felder aus.