Type in at least 5 words to get a word prediction:
Set the number of word predictions you want to receive (default 5):
Thematisch beschäftigt sich diese Ausarbeitung mit dem Trainieren eines Language Models (LM) zur Wortvorhersage mit einem Recurrent Neural Network (RNN) und dem TensorFlow.js (TFJS) Framework/API. Die Aufgabe bestand darin, ein RNN auf der Basis der Daten[1] zur Wortvorhersage (Next Word Prediction) zu trainieren.
Unterschiedliche Netzwerkarchitektur sollen untersucht werden und die finale Auswahl dokumentiert und begründet werden. Als Resultat soll notiert werden, wie oft die Vorhersage genau richtig ist und wie oft das korrekte nächste Wort unter den ersten k Worten, die sie vorhersagen, liegt (mit k gleich 5, 10, 20 und 100). Auch die Perplexity[2][9] kann dabei als Maß der Resultate genutzt werden.
Alle verwendeten Frameworks sollen aufgelistet und erklärt werden (1-3 Sätze), wozu diese jeweils verwendet werden. Zudem sollen die technischen Besonderheiten der Lösung dokumentiert werden.
Außerdem soll die Implementierung der Logik und alles, was für die Lösung wichtig ist, erläutert werden (Ansatz, Resultate, Quellen).
Es wurden die folgenden Frameworks eingesetzt:
Bei TensorFlow handelt es sich um eine End-to-End-Open-Source-Plattform für maschinelles Lernen. Es verfügt über ein umfassendes, flexibles ökosystem aus Tools, Bibliotheken und Community-Ressourcen, mit denen Forscher den Stand der Technik im Bereich ML vorantreiben und Entwickler auf einfache Weise ML-basierte Anwendungen erstellen und bereitstellen können.
Über TensorFlow können Modelle zunächst mit Keras erstellt und trainiert werden. Ein Tokenizer dient der Zerlegung von Plain-Text in Folgen von logisch zusammengehörigen Einheiten, den Token.
TensorFlow.js wurde eingesetzt, denn die Entwicklung in JavaScript ermöglicht die Verwendung von maschinellem Lernen direkt im Browser.[3][4]
Vorab trainierte TensorFlow.js-, TensorFlow- oder TFLite-Modelle können im Web oder auf anderen JS-Plattformen ausgeführt werden.[5]
Als Grundlagen der Umsetzung dienten die Artikel „Next Word Prediction with NLP and Deep Learning“ von Bharath K[6] sowie „Building a Next Word Predictor in Tensorflow“[7] von Priya Dwivedi. Vor allem letztere Quelle wurde für das Trainieren des Modells eingesetzt.
Da das Trainieren lange Ladezeiten mit sich zieht, wurde es separat vor der Prediction unternommen. Das Modell zur Wortvorhersage wurde anhand eines Plenarprotokolle des Deutschen Bundestags[1] trainiert, da es sich dabei um deutschen Text, mit keiner extrem hohen Datengröße, handelt.
Nachdem das Modell trainiert wurde, habe ich die Funktionsweise der Grundlagen, um eine Prediction umzusetzen, auf JavaScript übertragen. Dabei dienten die TensorFlow-Dokumentationen[8] als Hilfe. Ich habe mich dafür, und für das Design, grundsätzlich an der Funktionsweise der Wort-Prediction, wie sie üblicherweise bei Handytastaturen eingesetzt wird, orientiert. Dadurch wollte ich eine möglichst einfache und übersichtliche Funktionalität für den Nutzer erzielen.
Das Modell verwendet den Long Short-Term Memory(LSTM)-Algorithmus. Darüber sollen Ereignisse, die auch weit auseinanderliegen, miteinander verknüpft werden. Der Algorithmus eignet sich zudem gut zum Lernen von Sequenzen. Die eingesetzte Loss-Funktion ist die Categorical_Crossentropy, welche den Cross-Entropy-Loss zwischen Label und Vorhersagen bestimmt. Diese Funktion definiert den Erwartungswert des Losses für eine Verteilung über Labels. Dieser Verlust wird als Kreuzentropieverlust bezeichnet und ist einer der am häufigsten verwendeten Verluste für Klassifizierungsprobleme. Dieser Cross-Entropy-Loss wird für gewöhnlich als Loss in Klassifikationsproblemen eingesetzt. Als Optimizer wurde Adam mit einer Learning-Rate von 0.001 verwendet. Die eingesetzte Optimierungsfunktion Softmax wandelt einen Vektor von Zahlen in einen Vektor von Wahrscheinlichkeiten um, wobei die Wahrscheinlichkeiten jedes Wertes proportional zur relativen Größe jedes Wertes im Vektor sind. Die Softmax-Funktion ermöglicht uns also, Wahrscheinlichkeitsverteilungen, beziehungsweise Klassenwahrscheinlichkeiten, zu erhalten. Die Cross-Entropy-Loss-Funktion wird zusammen mit dem Softmax für eine Multi-Class-Klassifikation genutzt. Aufgrund der Performance, beziehungsweise der hohen Zeiten zum Trainieren des Modells, wurde eine Anzahl von 25 Epochen und einer Batchsize von 64 gewählt.
Man kann Wörter in das Textfeld eingeben, die vorhergesagten Wörter erscheinen ab 5 eingegebenen Wörtern. Klickt man auf eines der Predictions, wird es hinter den geschriebenen Text platziert. Die Anzahl der Predictions kann über den Slider eingestellt werden.
Es wurden einige Wörter, beziehungsweise Sätze, zum Testen eingegeben, wie oft die Vorhersage genau richtig ist und wie oft das korrekte nächste Wort unter den ersten k Worten, die sie vorhersagen, liegt. Im Folgenden werden Beispiele dargestellt, bei denen die Vorhersagen genau richtig oder jeweils unter den ersten 5, 10, 20 und 100 Worten ist.
Insgesamt betrachtet, fällt die Anzahl der richtigen Vorhersagen gering aus. Vor allem, wie erwartet, bei Sätzen die weniger gemeinsam haben mit dem Text, auf den trainiert wurde – wie zum Beispiel Satz 1. Jedoch sind auch die Vorhersagen noch sehr ungenau bei Sätzen, die zur Thematik passen oder direkt dem gelernten Text entnommen sind – wie beispielsweise Satz 6 und 7.
Mögliche Ursachen für diese Ergebnisse liegen wahrscheinlich in der geringen Menge an Daten und vor allem darin, dass der Text viele Zahlen und spezielle Bezeichnungen, wie Gesetzesbezeichnungen, sowie Namen enthält. Ebenso könnte das gelernte Modell noch komplexer, über die einstellbaren Metriken, herausgearbeitet werden. Auch beispielsweise eine höhere Anzahl an Epochen könnte dazu beitragen, auch wenn das in längeren Zeiten für das Lernen resultiert.
[1] Plenarprotokolle des Deutschen Bundestages: https://www.bundestag.de/services/opendata
[2] https://leimao.github.io/blog/Entropy-Perplexity/
[3] https://www.tensorflow.org/
[4] https://www.tensorflow.org/js
[5] https://www.tensorflow.org/learn
[6] https://towardsdatascience.com/next-word-prediction-with-nlp-and-deep-learning-48b9fe0a17bf
[7] https://towardsdatascience.com/building-a-next-word-predictor-in-tensorflow-e7e681d4f03f
[8] https://js.tensorflow.org/api/latest/
[9] https://homes.cs.washington.edu/~nasmith/papers/plm.17.pdf