In diesem Repository trainieren wir drei Sprachmodelle auf dem Canonical Penn Treebank (PTB) Corpus. Dieser Korpus wird in Trainings- und Validierungssätze von ungefähr 929.000 bzw. 73K -Token aufgeteilt. Wir implementieren (1) ein traditionelles Trigrammmodell mit linearer Interpolation, (2) ein neuronales probabilistisches Sprachmodell, wie von (Bengio et al., 2003) beschrieben, und (3) ein reguliertes rezidivierendes neuronales Netzwerk (RNN) mit Langzeitgedächtnis (LSTM) -Initen (Zaremba et al., 2015). Wir experimentieren auch mit einer Reihe von Modifikationen am LSTM-Modell und erreichen eine Verwirrung von 92,9 auf dem Validierungssatz mit einem mehrschichtigen Modell.
In der Stanford Sentiment Treebank Sentiment -Klassifizierungsaufgabe erhalten wir einen Korpus von Sätzen aus Filmkritiken. Jeder Satz wurde entweder positiv, negativ oder neutral; Wir folgen (Kim, 2014), um die neutralen Beispiele zu beseitigen und die Aufgabe als binäre Entscheidung zwischen positiven und negativen Sätzen zu formulieren.
Für jede Modellvariante formalisieren wir die Vorhersage
für Testfall
als

Wo
ist eine Aktivierungsfunktion,
sind unsere erlernten Gewichte,
ist unser Feature -Vektor für die Eingabe
, Und
ist ein Vorspannungsvektor. Beachten Sie, dass in diesem Problem festgelegt wird, 

für alle
Da wir nur positive und negative Stimmungseingänge im SST-2-Datensatz betrachten. Wir verwenden PyTorch für alle Modellimplementierungen, und alle Modelle werden für jeweils 10 Epochen unter Verwendung von Stapeln der Größe 10, einer Lernrate von 1E-4, dem Adam-Optimierer und der Negativ-Log-Loghood-Verlustfunktion geschult. Die einzige Ausnahme von diesem Setup war für multinomiale naive Bayes, die in eine Epoche mit Lernparameter passte
= 1.0.
Lassen 

Seien Sie der Feature Count Vector für den Schulungsfall
mit Klassifizierungsetikett
.
ist der Satz von Funktionen und
repräsentiert die Anzahl der Ereignisse des Merkmals
im Trainingsfall
. Definieren Sie die Grafvektoren von
als
=
+
für den Glättungsparameter
. Wir folgen Wang und Manning, um die Zählungen zu brügen.
= 
. In Bezug auf Gleichung (1),
ist das Log-Count-Verhältnis zwischen der Anzahl der positiven und negativen Beispiele,
= log (log (
/
) Wo
Und
sind die Anzahl der positiven und negativen Trainingsfälle im Trainingsdatensatz,
ist die Anzahl der Vorkommen von Eingaben
, Und
ist eine binäre Indikatorfunktion, die Karten kartiert
bis 1 wenn größer als 0 und 0, sonst. Wir betrachten nur Unigramme als Funktionen.
Wir lernen Gewichts- und Voreingenommenheit Matrizen
Und
solche zu optimieren

Wo
Ist
-Dimensionaler Vektor, der für jede Trainingsprobe Unigramm-Zahlen der Wörter darstellt. In unserer Implementierung repräsentieren wir
Und
mit einer einzigen vollständig vernetzten Schicht, die unter Sigmoidaktivierung direkt zu einer Ausgangsschicht mit zwei Einheiten kartiert.
In der CBOW-Architektur jedes Wort in einer Satzeingabe von Wortlänge
wird a zugeordnet
-Dimensionales Einbettungsvektor. Die Einbettungsvektoren für alle Wörter werden gemittelt, um einen einzelnen Merkmalsvektor zu erzeugen
Das repräsentiert den gesamten Eingang. Insbesondere,

Wo 

Und 

, Und
=
für alle
sind die Dimensionen der Satzeinbettung bzw. Worteinbettungen. Diese Codierung
wird dann in eine einzelne vollständig vernetzte Schicht übergeben, die unter Softmax-Aktivierung direkt an zwei Ausgangseinheiten, die Ausgangsklassen darstellen, kartiert.
Lassen 

sei der
-Dimensionales Wortvektor entspricht dem
-TH Wort im Eingabesatz. Nachdem alle Sätze in einer Eingangsstapel auf die gleiche Länge gepolstert haben
, Wo
Ist der Satz maximaler Länge aller Sätze in der Stapel, jeder Satz wird dann als dargestellt als

Wo
ist der Verkettungsoperation. Lassen
die Verkettung von Wörtern darstellen
Anwesend
, ...,
. In Faltungsnetzwerken wenden wir Faltungsoperationen an 

mit Filtergröße
Um Merkmale zu erzeugen, ist die Filtergröße effektiv die Fenstergröße der Wörter, über die sich zusammengetan werden muss. Lassen
Seien Sie eine Funktion, die durch diesen Vorgang erzeugt wird. Dann

Wo
ist ein Vorurteile und
ist die Funktion für behobene lineare Einheit (Relu). Filterlängengröße anwenden
In allen möglichen Fenstern der Wörter in unserem Eingabersatz erzeugt die Feature -Karte

In unserer Implementierung stellen wir uns über Filtergrößen zusammen 

und dann die Merkmale von jedem verkettet
in einen einzelnen Vektor. Wir wenden einen Max-Over-Time-Pooling-Operation (Colrobert et al., 2011) auf diesen Vektor von verketteten Feature-Karten an, die bezeichnet werden
, und bekommen
= max (
). Wir tragen dann einen Tropfen mit
= 0,50 bis
Geben Sie dies als Regularisierungsmessung gegen Überanpassung in eine vollständig vernetzte Schicht und berechnen Sie den Softmax über den Ausgang.
Schließlich haben wir auch eine Reihe von Änderungen an der CNN-Architektur implementiert, um eine leichte Leistungsverbesserung im SST-2-Datensatz zu erzielen. In dieser Implementierung nutzen wir Stanfords Handschuhvektoren (Pennington et al., 2014). Wir nehmen folgende Änderungen vor:
Im Folgenden (Kim, 2014) verwenden wir zwei Kopien der Word-Einbettungstabelle während der Faltungs- und Max-Pooling-Schritte-eine, die während des Trainings als reguläres Modul im Modell nicht statisch oder aktualisiert wird, und ein anderes, das während des Trainingslaufs aus dem Optimierer weggelassen und als statisch aufbewahrt wird. Im Vorwärtspass des Modells werden diese beiden Einbettungssätze entlang der „Kanal“ -Dimension miteinander verkettet und dann als einzelne Tensor in die drei Faltungsschichten übergeben, mit zwei Werten für jede der 300 Dimensionen im Handschuhmodell.
Nachdem wir den kombinierten Feature-Vektor erstellt haben, der die Max-Pooled-Merkmale aus den drei Faltungskerns darstellt, fügen wir einfach die nicht poldierte Wortzahl der Eingabe als einzelne zusätzliche Dimension hinzu, wodurch ein 301-Dimension-Tensor erzeugt wird, der dann auf die 2-Einheiten-Ausgabe abgebildet wird. Aus technischer Sicht stellt wir fest, dass dies die Leistung im SST-2-Datensatz geringfügig verbessert, wobei im Durchschnitt positive Sätze etwas länger sind als negative-19,41 Wörter gegenüber 19,17. Es ist nicht klar, ob dies über verschiedene Datensätze hinweg gelten würde oder ob es für SST-2 spezifisch ist. (Obwohl es auch nicht ganz klar ist, dass dies nicht eine interessante korpus-linguistische Frage implizieren würde-sind „positive“ Sätze im Allgemeinen länger als „negative“ Sätze?)
Zusätzlich zu den beiden oben beschriebenen Änderungen haben wir auch mit einer Vielzahl anderer Modifikationen an der CNN -Architektur experimentiert, darunter:
Kombination des CBOW -Modells mit der CNN -Architektur durch Verkettung der Maxpooled CNN -Vektoren mit dem gemittelten CBOW -Vektor, bevor die endgültigen Ausgabeeinheiten abgebildet werden.
Ersetzte den Handschuhbettendings durch die Googlenews -Einbettungen (Mikolov et al., 2013). Diese Idee kam aus dem Gedanken, dass es für PTB eine nützliche Domänenspezifität geben könnte, da diese Einbettungen in Nachrichtenartikeln geschult wurden.
Implementierte "Multi-Channel" -Sbettdings, wie von (Kim, 2014) im Kontext von CNN-Architekturen beschrieben. Anstatt nur eine einzelne Einbettungsschicht zu verwenden, die während des Trainings aktualisiert wird, wird die Matrix vor ausgebildeter Gewichte in zwei separate Einbettungsschichten kopiert: eine, die während des Trainings aktualisiert wird, und ein anderer, der aus dem Optimierer weggelassen wird und während des Trainings unverändert bleiben darf. Während eines Vorwärtspasswords werden die Indizes für jede Tabelle getrennt zugeordnet, und dann werden die beiden Tensoren entlang der Einbettungsdimension verkettet, um einen einzelnen 600-dimensionsbettenden Tensor für jeden Token zu erzeugen.
Experimentiert mit unterschiedlichen Ansätzen zum Chargen. Anstatt den Korpus als einzelne, ungebrochene Sequenz BPTTIterator des Trainings zu modellieren (z. Zum Beispiel haben wir für den Satz „Ich mag schwarze Katzen“ fünf Kontexte hergestellt:
A. " <SOS> ich"
B. " <SOS> Ich mag"
C. " <SOS> Ich mag Schwarz"
D. " <SOS> Ich mag schwarze Katzen"
e. " <SOS> Ich mag schwarze Katzen <EOS> "
Und das Modell ist geschult, um das letzte Token in jedem Kontext zu Zeitschritt T aus den ersten t -1 -Token vorherzusagen. Wir haben Pytorch's pack_padded_sequence -Funktion verwendet, um Eingänge mit variabler Länge für die LSTM zu verarbeiten. Praktisch war dies ansprechend, da es das Konstruktion einer breiteren Funktionsstufe aus dem Kontext vor einem Wort erleichtert -zum Beispiel wird es einfach, bidirektionale LSTMs mit einem Vorwärts- und Rückwärtspass über den t -1 -Kontext zu implementieren, der nach dem von BPTTIterator durchsetzten ursprünglichen Schulungsregime schwierig oder unmöglich sein würde. Nachdem wir dies ausprobiert hatten, wird es jedoch nie mit der kontinuierlichen Darstellung des Korpus von BPTTIterator konkurrenzfähig sein, da die Sätze im Korpus nach Artikel gruppiert werden- und damit auch auf einer thematischen / konzeptuellen Ebene. Dies bedeutet, dass das Modell nützliche Informationen über die Satzgrenzen hinweg lernen kann, welche Art von Wort als nächstes kommen sollte.
Experimentiert mit unterschiedlichen Regularisierungsstrategien, wie z.
Keiner dieser Änderungen verbesserte sich bei der anfänglichen Einschicht, 1000-Einheit-LSTM. Unser am besten darstellender Modell war das in Abschnitt 3.4 beschriebene. Die Verwirrungen, die wir mit jedem unserer Abschnitt 3 -Modelle erreicht haben, sind in Tabelle 1 beschrieben.
| Modell | Verwirrung |
|---|---|
| Linear interpoliertes Trigramm | 178.03 |
| Modell der neuronalen Sprache (5-Gramm) | 162.2 |
| 1-layer lstm | 101.5 |
| 3-layer LSTM + Verbindungen | 92.9 |
Obwohl die Mehrschicht-LSTM mit Verbindungen die einfache LSTM-Grundlinie besiegte, konnten wir die von (Zaremba et al., 2015) beschriebene 78.4-Validierungsverarbeitungsleistung unter Verwendung desselben Korpus und ähnlichen Architekturen nicht replizieren. Bei Verwendung der im Artikel beschriebenen Konfigurationen (Architekturen der 2-Schicht, 650 und 1500 Einheiten) haben unsere Modelle nämlich innerhalb von 5-6 Epochen übertroffen, selbst wenn sie Tropfen auf eine Weise anwenden, die dem in dem Papier beschriebenen Ansatz entsprach. Im Gegensatz dazu erwähnen (Zaremba et al., 2015) das Training für bis zu 55 Epochen.)
Wir haben vier Modelsklassen trainiert - ein traditionelles Trigrammmodell mit linearer Interpolation mit Gewichten, die durch die Erwartungsmaximierung erlernt werden. ein einfaches Modell für neuronales Netzwerksprachmodell (Bengio et al., 2003); eine LSTM-Basislinie mit einer Schicht; und eine Erweiterung dieses Modells, bei dem drei Schichten unterschiedlicher Größen verwendet werden, Verbindungen für die ersten beiden Schichten überspringen und die von (Zaremba et al., 2015) beschriebene Regularisierung überspringen. Das endgültige Modell erreicht eine Verwirrung von 92,9 im Vergleich zu 78,4 und 82,7, die von (Zaremba et al., 2015) unter Verwendung von ungefähr äquivalenten Hyperparametern gemeldet wurden.
Y. Bengio, R. Ducharme, P. Vincent, C. Jauvin. "Ein neuronales probabilistisches Sprachmodell." Journal of Machine Learning Research 3, Seiten 1137–1155. 2003.
D. Jurafsky. "Sprachmodellierung: Einführung in N-Gramm." Vortrag. Stanford University CS124. 2012.
Y. Kim. "Faltungsnetzwerke für die Satzklassifizierung." Verfahren der Konferenz 2014 über empirische Methoden in der Verarbeitung natürlicher Sprache (EMNLP), Seiten 1746–1751. 2014.
T. Mikolov, K. Chen, G. Corrado, J. Dean. "Effiziente Schätzung von Wortdarstellungen im Vektorraum." Arxiv Preprint Arxiv: 1301.3781. 2013.
J. Pennington, R. Socker, C. Manning. "Handschuh: Globale Vektoren für die Wortrepräsentation." Verfahren der Konferenz 2014 über empirische Methoden in der Verarbeitung natürlicher Sprache (EMNLP), Seiten 1532-1543. 2014.
W. Zaremba, I. Sutskever, O. Vinyals. 2015. „Regelte sich auf das neuronale Netzwerk.“ Arxiv Preprint Arxiv: 1409.2329. 2015.