Nach einer längeren Pause, hier mal wieder ein
Update
- Die ersten Testergebnisse waren erwartungsgemäß für die Tonne: Das vor 14 Tagen trainierte Modell hat den gesprochenen Satz “Papperlapapp sagte Erika” in den Satz “aber la ab, sa bla bär” transkribiert.
- Nun beginnt die Phase des Modell-Tunings, es gibt zig Stellschrauben, wie man das Ganze verbessern kann: Anzahl der Trainings-Epochen-Verändern, Trainingsdatensatz vergrößern, Trainingsdaten besser aufräumen, Anzahl der Knoten im Netzwerk erhöhen… das einfachste und erfolgversprechenste ist aber vermutlich, erst einmal das zugrundeliegende Language Model zu verbessern.
Nächste Schritte
- Textcorpus für Language Model Erstellung aufbauen
- LM erzeugen
Background Wissen -> Was tut ein Language Model?
Innerhalb des Neuronalen Netzwerkes werden die Wahrscheinlichkeiten für einzelne gesprochene Buchstaben auf Basis von Lauten vorhergesagt. Heißt also, wenn man einen Audioschnipsel gegen das Modell wirft, wird dieser in einzelne noch kleinere Schnipsel unterteilt und diese einzeln “gescored”, d.h. für jeden Buchstaben im Alphabet wird ein Wahrscheinlichkeitswert vorhergesagt. Nun ist es aber so, dass wir ja komplette Wörter sprechen und nicht nur einzelne Buchstaben, es handelt sich daher um eine Sequenz von Buchstaben. Daher ist das Neuronale Netz bei Deep Speech so implementiert, dass die Wahrscheinlichkeit eines einzelnen vorherzusagenen Buchstabens von der Wahrscheinlichkeit der vorherigen und der nachfolgenden Buchstaben abhängt. Ein solches Neuronales Netz nennt sich Bidirectional Recurrent Neural Network. Soweit, so gut. Nun haben wir also ein einzelnes Wort vorhergesagt.
Um die Vorhersage-Wahrscheinlichkeit eines einzelnen Wortes noch einmal zu verbessern, könnte man nun noch einmal alle einzelnen Worte in einen größeren Kontext bringen und diese ebenfalls als Sequenz betrachten. Ähnlich wie bei den einzelnen Buchstaben hängt die Wahrscheinlichkeit eines einzelnen Wortes von der Wahrscheinlichkeit der nachfolgenden und vorherigen Worte ab. Genau an dieser Stelle setzt das Language-Model an. Dieses ist quasi ein “externes” oder “weiteres” Model, welches für eine Reihe von Worten eine Wahrscheinlichkeit für mögliche nachfolgenden Worte errechnet. In der Praxis sieht man das täglich beim Tippen auf einer Smartphone-Tastatur - genau für diesen Anwendungsfall kommen ebenfalls Language Models zum Einsatz.
Bei DeepSpeech wird die Language-Model-Implementierung “kenLM” (https://github.com/kpu/kenlm) genutzt. Um dieses zu trainieren, muss zunächst eine möglichst große Menge von möglichst unterschiedlichen Sätzen gesammelt werden. Würde man hierfür Beispielsweise ausschließlich die Menge aller in allen Harry Potter Romanen geschriebenen Sätzen benutzen, könnte man ein solches Language Model dafür nutzen, automatisch einen weiteren, neuen Harry Potter Roman schreiben zu lassen. Da jedoch unser Ziel ist, podcasts transkribieren zu lassen, müsste man einen Text-Corpus erzeugen, der möglichst dicht an unserem Podcast-Sprech dran ist. Vor allem müssten in einem solchen Text-Corpus auch Sätze mit entsprechrenden Fremdworden vorhanden sein (so zumindest meine aktuelle These).