Deep Learning in der Textverarbeitung

bei

 / 24. September. 2019

Sorry, this entry is only available in German. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Lesen ist mehr als nur Grammatik anzuwenden. Für einen Menschen bedeutet Lesen etwas über den Autor zu erfahren, was er weiß, denkt oder fühlt. Für ein neuronales Netz bedeutet Lesen eine Klassifikationsaufgabe zu lösen – ohne Wissen über Menschen und wie sie ihre Umwelt wahrnehmen. Ein neuronales Netz weiß nicht, wie ein Baum aussieht, wie sich Angst anfühlt oder warum Menschen schreiben. Weltwissen hilft aber beim Verstehen von Texten. Sätze können verschiedene Lesarten haben, wovon einem Menschen nur eine plausibel erscheint. Während Menschen diese Schwierigkeit meist nicht einmal wahrnehmen, lässt sich ein neuronales Netz leicht davon in die Irre führen. Deshalb sollte eine KI auch die Konzepte hinter den Worten lernen. Das macht dieses Problem so schwierig.

Ein neuronales Netz lernt Texte zu verarbeiten, indem es aus Beispielen generalisiert. Dadurch lernt es, wie Menschen Sprache verwenden und nicht die Normen mit denen Menschen Sprache beschreiben. Hierfür werden Trainingsdaten benötigt – also Texte, die mit einer Annotation versehen wurden. Dieses Annotationsschema wird bei der Vorhersage auf ungesehene Daten übertragen und steuert daher, welche Informationen ein neuronales Netz einem Text entnimmt. Die Qualität der Vorhersagen hängt neben der Struktur des neuronalen Netzes maßgeblich von der Menge und der Qualität der Trainingsdaten ab. Neuronale Netze führen auf einer Eingabe eine Abfolge von linearen Transformationen durch, wofür eine Vielzahl von Gewichten während des Trainings bestimmt werden müssen. Gewichte erlauben einem neuronalen Netz, nur bestimmte Merkmale zu beachten. Im Training wird daher gelernt, welche Merkmale wann relevant sind. Im Fall von Text besteht die Eingabe aus einem Wort bzw. dessen Vektorrepräsentation (word embedding). Zusätzlich wird ein Zustand mit Kontextinformationen mitgeführt. Das ist eine Besonderheit von recurrent neural networks (RNNs), eine Art neuronaler Netze, die Sequenzen bearbeiten. Jede Schicht (layer) verarbeitet ein Wort, produziert für dieses Wort einen Output und aktualisiert den Zustand, der an die nächste Schicht weitergegeben wird. Das heißt, die Länge des Texts entspricht der Tiefe des neuronalen Netzes. Da sehr viele Schichten durchlaufen werden, um eine Vorhersage für den gesamten Text zu produzieren, kann von deep learning gesprochen werden. Die Pflege eines Zustands in einem tiefen Netz ist eine zentrale Herausforderung in der Verarbeitung sequentieller Daten. Es gibt einige Schwierigkeiten, die während des Trainings neuronaler Netze auftreten können, insbesondere gehäuft beim deep learning. Hierfür wurden u.a. spezielle Netzwerkarchitekturen entwickelt wie LSTM (long short-term memory) oder GRU (gated recurrent unit). Diese steuern die Aktualisierung des internen Zustands, damit sich das neuronale Netz wichtige Beobachtungen länger „merken“ kann. Diese bereits komplexen neuronalen Netze lassen sich weiter ausbauen, um strukturiertes Weltwissen zu nutzen, oder als bidirektionale Netze, die Texte vorwärts und rückwärts lesen.

Wörterbuch: Deutsch – neuronales Netz

Um für Worte Vorhersagen treffen zu können, müssen diese zunächst in Zahlen übersetzt werden. Ein einfacher Ansatz ist für jedes Wort im Vokabular eine Dimension einzuführen. Dann kann jedes bekannte Wort eindeutig mit einem binären Vektor dargestellt werden, bei dem immer genau eine Dimension 1 ist. Die Anzahl der Dimensionen entspricht folglich der Größe des Vokabulars. Natürlich werden nicht so viele Dimensionen benötigt, um diese Informationen darzustellen. Allerdings kann diese Repräsentation genutzt werden, um word embeddings – eine niedrigdimensionale Vektorrepräsentation – zu lernen. In diesem deutlich kleineren Vektorraum sind Worte nach ihrer Bedeutung angeordnet. Ähnliche Worte liegen nahe beieinander und Bedeutungen können berechnet werden (z.B. [Berlin] – [Deutschland] + [Italien] = [Rom]). Word embeddings können mithilfe von einem zweischichtigen neuronalen Netz gefunden werden [1]. Dieses lernt Worte ihrem Kontext zuzuordnen, indem es die hochdimensionale Wortrepräsentation in eine niedrigere Dimension und anschließend in die Vektoren der Kontextwörter projektiert. Dabei lernt das neuronale Netz implizit eine Transformationsmatrix für word embeddings, die niedrigdimensionale Repräsentation (siehe Abbildung 1). In der Regel wird die Vektorrepräsentation in einer Art Wörterbuch gespeichert, indem beim Einlesen von Texten nachgeschlagen wird.

Abbildung 1 W und W‘ enthalten Gewichte, die so optimiert werden, dass mit einem Wort x dessen Kontext y vorhergesagt werden kann. Dabei lernt dieses zweischichtige neuronale Netz, was das Wort bedeutet. Alle drei Vektoren x, h und y beinhalten diese Information. Dabei hat h, das word embedding, die geringste Anzahl an Dimensionen.

Warum ist Deep Learning schwierig?

Die zentrale Frage bei der Arbeit mit neuronalen Netzen ist die, nach den optimalen Gewichten. Im Deep Learning wiegt diese Frage besonders schwer, da sehr viele Gewichte zu optimieren sind. Daher ist ein geschicktes Vorgehen beim Training besonders wichtig.

Neuronale Netze werden mit dem Forward-Backward-Algorithmus (bzw. Baum-Welch-Algorithmus) trainiert. Dabei wird für Texte in den Trainingsdaten eine Vorhersage gemacht, der Fehler berechnet und die Gewichte aktualisiert. Fehler in einer Schicht können in den folgenden Schichten weitere Fehler verursachen. Beim Aktualisieren der Gewichte wird der Fehler dann Schicht für Schicht rückwärts durch das Netz geleitet und die Gewichte werden entsprechend angepasst. Dieser Vorgang wird backpropagation genannt. Handelt es sich bei der Eingabe wie bei Text um eine Sequenz, muss die Zeit (bzw. wo ein Wort im Text steht) miteinbezogen werden. Für jede Schicht wird der Gradient der Fehlerfunktion berechnet, um festzustellen, in welche Richtung die Gewichte angepasst werden müssen, damit der Fehler minimiert wird. Dabei kann einiges schief gehen.

Durch die iterative Approximation werden nur lokale Minima der Fehlerfunktion gefunden. Daher kann die Qualität des trainierten Modells abhängig von den initialen Gewichten stark variieren. Hat ein neuronales Netz viele Schichten, wird die Funktion komplexer und es gibt mehr lokale Minima und daher mehr mögliche Lösungen. Eine verbreitete Technik ist stochastic gradient descent [2] . Dieses Verfahren arbeitet mit Zufall und verfolgt nicht zielstrebig das erste lokale Minima, das es findet. Dafür werden die Gewichte nach jedem Text aktualisiert, anstelle der Aktualisierung nach dem vollständigen Durchlauf der Trainingsdaten. Der Fehler und die Gewichte variieren stärker, da sich das neuronale Netz mit jeder Aktualisierung auf einen anderen Text spezialisiert. Dadurch kann das neuronale Netz im Training mehr lokale Minima sehen und ein insgesamt besseres Modell finden. Abgesehen vom extremen Ansatz immer nur einen Text vor dem Update zu betrachteten, gibt es auch die Möglichkeit eine Teilmenge der Texte für das Update in Betracht zu ziehen. Unabhängig von der gewählten Anzahl von Texten müssen diese zufällig gewählt werden.

Eine weitere Hilfestellung ist eine gute Initialisierung der Gewichte. Was eine gute Initialisierung ist, hängt von der verwendeten Aktivierungsfunktion ab. In einem Neuron wird der Eingabevektor zunächst mit den Gewichten multipliziert. Auf das Produkt wird dann eine Funktion angewendet, damit das Ergebnis innerhalb eines bestimmten Intervalls bleibt. Das ist die Aktivierungsfunktion, nach der die Initialgewichte gewählt werden. Das mindert auch die Gefahr, dass ein Gradient unendlich groß oder Null wird. Mit zunehmender Anzahl an Schichten steigt die Wahrscheinlichkeit, dass dieses Problem auftritt. Hierfür wurden spezielle Netzwerkarchitekturen für sequentielle Eingabedaten wie Text entwickelt.

Eine andere Frage ist, wie weit man die Fehlerfunktion minimieren möchte. Eine Fehlerfunktion sucht die wahrscheinlichste Label-Sequenz für einen Text. Welche Lösung richtig ist, geben die Trainingsdaten vor. Innerhalb der vielen Freiheitsgrade, die ein tiefes neuronales Netz bietet, werden die Gewichte dahingehend optimiert, dass die Vorhersage der vorgegebenen Lösung entspricht. Informationen aus einem Text zu extrahieren bedarf einer komplexen Funktion, um die ebenfalls komplexen Zusammenhänge zu modellieren. Allerdings steigt mit der Komplexität auch die Gefahr des overfittings – dem Auswendiglernen der Trainingsdaten. Ein neuronales Netz kann nicht nur zu wenig, sondern auch zu viel lernen. Wird ein neuronales Netz „zu gut“ trainiert, macht es immer bessere Vorhersagen auf den Trainingsdaten. Gleichzeitig kann es das Gelernte aber immer schlechter auf ungesehene Daten übertragen.

Wie hat der Satz nochmal angefangen?

Auch ein neuronales Netz braucht ein Gedächtnis zum Lesen. In einem einfachen RNN ersetzt in jeder Schicht ein neuer Zustand den vorherigen. Durch den unregulierten Informationsfluss steigt mit zunehmender Textlänge das Risiko, dass die Gewichte und damit auch die Gradienten während des Trainings extreme Werte annehmen, was das Lernen behindert. Im schlimmsten Fall betrachtet das neuronale Netz Worte einzeln, indem es den Zustand vollständig überschreibt. Oder es kann alle neuen Informationen für irrelevant halten und den Zustand einfach übernehmen. Als Lösung für dieses Problem wurden Netzwerkarchitekturen entwickelt, die den Informationsfluss regulieren. Dafür werden in jedem Schritt mehrere Neuronen eingesetzt, um zu entscheiden, welche Informationen in den Zustand geschrieben und welche gelöscht werden. Damit wird verhindert, dass Gewichte sehr groß oder Null werden. Verbreitet sind zwei Architekturen GRU [3] und LSTM [4] , die in der Praxis beide gute Ergebnisse liefern. Beide haben einen Mechanismus, um Informationen hinzuzufügen und zu entfernen. Unter Berücksichtigung des Kontexts und der aktuellen Eingabe wird der Zustand aktualisiert. Dabei werden neue Informationen addiert, was ein vollständiges Überschreiben des Zustands verhindert. Ein LSTM berechnet einen Output zusätzlich zum aktualisierten Zustand, der mit einer Vergessen- und einer Merken-Operation berechnet wird (siehe Abbildung 2). Der Output wird zur Klassifikation des Wortes und für die Berechnung des nächsten Updates genutzt. Damit schirmt ein LSTM seinen internen Zustand vollständig ab. Dadurch entsteht eine sog. memory cell. Bei einem GRU hingegen ist der neue Zustand gleichzeitig Grundlage für die Klassifizierung des Wortes und wird daher auch bei der Berechnung des Updates verwendet. Der neue Zustand entspricht einer linearen Interpolation zwischen dem Zustand und dem Update. Das heißt, es wird eine gewichtete Summe vom aktuellen Zustand und dem Update berechnet und als neuer Zustand gesetzt (siehe Abbildung 3). Das GRU lernt im Training, wie es das Update berechnet und wann es wie den Zustand und das Update gewichten muss. Das LSTM hingegen lernt, was es wann vergessen, sich merken und ausgeben soll.

Abbildung 2 Ein LSTM trennt den Zustand c von den Ausgaben ht. Aktualisierungen werden mit der vorherigen Ausgaben ht-1 und der aktuellen Eingabe xt berechnet. Neuronen sind entweder für das Vergessen, das Merken oder die Ausgabe zuständig.
Abbildung 3 Ein GRU berechnet eine gewichtete Summe aus dem Zustand ht-1 und den neuen Informationen xt. Einen separaten Output gibt es hier nicht.

Alles eine Frage der Perspektive

Texte kann man auch rückwärts lesen. Für einen Menschen unvorstellbar aber genauso wie ein neuronales Netz lernen kann, einen Text vorwärts zu lesen, kann es auch lernen, diesen rückwärts zu lesen. Natürlich löst dieser Perspektivwechsel nicht alle Verständnisprobleme, zumal Sprache für das Vorwärtslesen entwickelt wurde. Die Kombination von Vorwärts- und Rückwärtslesen verschafft dem bidirektionalen Netz einen Vorteil, indem es mehr Kontextinformationen zur Verfügung stellt: einen Vektor mit dem Kontext vom Textanfang und einen mit dem Kontext vom Textende [5]. Für das Gesamtergebnis werden diese beiden Vektoren meistens konkateniert – d.h. sie werden „gestapelt“. Auch beim Training ist diese Vorgehensweise vorteilhaft. Wird ein neuronales Netz rückwärts trainiert, wird der Fehler von der anderen Seite aus durch das Netz propagiert und erreicht die Schichten zuerst, die sonst zuletzt aktualisiert werden. Auch in dieser Hinsicht ergänzen sich zwei Netze, die Texte in unterschiedlichen Richtungen lesen.

So lernt ein neuronales Netz die Welt kennen

Eine wichtige Information fehlt dem neuronalen Netz noch: Wie sieht die reale Welt aus? Damit gezielt nach Informationen gesucht werden kann, benötigt das neuronale Netz strukturiertes Weltwissen. Diese Informationen werden meist in Form eines Graphen oder einer Liste von Tripeln <Entität><Relation><Entität> bereitgestellt. Je nach Sprache und Thema stehen auch schon fertige knowledge bases (KBs) zur Verfügung. Ein Tripel könnte z.B. so aussehen: <Fisch> <lebt in> <Wasser>. Für manche Texte kann diese Information relevant sein. Für eine Speisekarte hingegen wird dieses Wissen meistens nicht benötigt. Deshalb sollten zusätzliche Informationen nur manchmal genutzt werden. Dabei hilft ein sog. Attention-Mechanismus [6]. Attention heißt, es wird eine gewichtete Summe verschiedener Vektoren gebildet, sodass ein Vektor mit den relevantesten Informationen aus allen Quellen entsteht. Damit kann ein neuronales Netz selbst entscheiden, wann es welche Information nutzt. Dafür wird zunächst in der KB nach dem aktuellen Wort gesucht und Scores für die Embeddings der dazugehörigen Tripel berechnet. Mit den Scores wird eine Vorauswahl getroffen. Gewichte werden nur für die relevantesten Tripel berechnet. Dabei wird der Ergebnisvektor aus dem LSTM genutzt, um zu entscheiden, welches Wissen aktuell benötigt wird. (Bislang wurde dieses Verfahren nicht mit GRU verwendet.) Für die Textinformationen wird ein weiterer Output, ein sog. Sentinelvektor, berechnet. Um diesen Vektor zu berechnen, werden separate Gewichte gelernt. Damit unterscheidet sich der Sentinelvektor vom eigentlichen Output, mit dem die Gewichte berechnet werden (siehe Abbildung 4). Aus den Textinformationen und den Hintergrundinformationen wird eine gewichtete Summe gebildet, welche auf das ursprüngliche Ergebnis addiert wird. Damit erlangt ein neuronales Netz die Fähigkeit, beim Lesen Weltwissen gezielt einzusetzen, ohne die Textinformationen vollständig überschreiben zu können. Stehen alle wichtigen Informationen bereits im Text oder die zusätzlichen Informationen passen nicht in den Kontext, erhält der Sentinelvektor im Vergleich zu allen anderen Vektoren ein sehr hohes Gewicht. Setzt der Text hingegen diese zusätzlichen Informationen voraus, werden diese ergänzt. Dazu muss im Training zusätzlich gelernt werden, wann welche Informationen relevant sind und wie ein Sentinelvektor berechnet wird.

Abbildung 4 Für den Attention-Mechanismus werden die Gewichte α1-αn und β geschätzt. Es gibt sowohl ein Vektor mit Textinformationen (der Sentinelvektor) als auch ein Vektor für jede Hintergrundinformation v1-vn. Der Sentinelvektor unterscheidet sich vom eigentlichen Output ht, mit dem die Gewichte geschätzt werden. Mithilfe dieser Gewichte wird die Summe aus allen Informationen gebildet.

Einsatzmöglichkeiten

Der berechnete Vektor aus dem neuronalen Netz kann in eine Kategorie umgerechnet werden. Ein gängiges Annotationsschema ist BIO für named entity recognition (NER). „B“ (beginning) markiert das erste Wort einer Entität, „I“ (inside) ein weiteres zum Namen der Entität gehörendes Wort und „O“ (outside) alle anderen Worte. Für unterschiedliche Arten von Entitäten können „B“ und „I“ mit unterschiedlichen Indizes versehen werden. Das ermöglicht einem neuronalen Netz, Entitäten zu kategorisieren und z.B. Firmen- und Personennamen als solche zu erkennen. Für eine Namenserkennung mag der Trainingsaufwand groß sein. Dies ist aber die Grundlage für weiterführende Aufgaben. Sind die Haupakteure eines Textes bekannt, kann nun gelernt werden, Beziehungen zwischen diesen Akteuren zu identifizieren.

Neben Namen können Worte aber auch nach Ereignissen kategorisiert werden. Es geht also um die Frage: „Was passiert?“. In der event extraction werden meistens Verben gesucht. Allerdings können auch Nomen ein Ereignis beschreiben. Dass Trigger so unterschiedlich sein können, macht das Problem etwas schwieriger als das Erkennen von Namen. Ist das identifizieren von Ereignissen bereits unzuverlässig, passieren beim Kategorisieren weitere Fehler, worunter die Qualität der Vorhersage leidet. Um diese Aufgabe zuverlässig bearbeiten zu können, ist weitere Forschung notwendig. In Zukunft wäre denkbar, Informationen über Ereignisse mit den Informationen über die beteiligten Akteure zu kombinieren und damit die Frage: „Wer macht was?“, zu beantworten.

Fazit

Mithilfe neuronaler Netze können wir automatisch Informationen aus Texten entnehmen und strukturiert abspeichern. Dadurch werden Daten für die weitere Verarbeitung verfügbar gemacht. Aktuell gibt es keine Modelle, die genauso präzise arbeiten wie Menschen. Bei großen Datenmengen besticht aber ihre Schnelligkeit.

Quellen und Referenzen

[1] T. Mikolov, I. Sutskever, K. Chen, G. Corrado und J. Dean, „Distributed representations of words and phrases and their compositionality,“ Advances in neural information processing systems, pp. 3111-3119, 2013.

[2] L. Bottou, „Large-scale machine learning with stochastic gradient descent,“ Proceedings of COMPSTAT’2010, pp. 177-186, 2010.

[3] J. Chung, C. Gulcehre, K. Cho und Y. Bengio, „Empirical evaluation of gated recurrent neural networks on sequence modeling,“ arXiv preprint, 2014.

[4] S. Hochreiter und J. Schmidhuber, „Long short-term memory,“ Neural Computation, p. 1735–1780, 1997.

[5] A. Graves und J. Schmidhuber, „Framewise phoneme classification with bidirectional LSTM and other neural network architectures,“ Neural Networks, pp. 602-610, 2005.

[6] B. Yang und T. Mitchell, „Leveraging knowledge bases in LSTMs for improving machine reading,“ in Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), 2017.

Sabrina Brill arbeitet als Softwareentwicklerin bei der iteratec GmbH. In Kundenprojekten entwickelt sie Anwendungen, die mithilfe künstlicher Intelligenz entlasten. Ihr Wissen aus dem Bereich des maschinellen Lernens erlangte sie im Studium der maschinellen Sprachverarbeitung.