Inhaltsverzeichnis:
- Einführung in die Tensorbibliothek von Torch
- Berechnungsdiagramme und automatische Differenzierung
- Deep Learning Building Blocks: Affine Maps, Nichtlinearitäten und Ziele
- Optimierung und Training
- Erstellen von Netzwerkkomponenten in Pytorch
- Beispiel: Logistische Regressionssack-of-Word-Textklassifizierer
- Worteinbettungen: Codierung der lexikalischen Semantik
- Beispiel: N-Gram-Sprachmodellierung
- Übung: Kontinuierliche Wörterbeutel zum Lernen von Worteinbettungen
- Sequenzmodellierung und langweilige Term Speichernetzwerke
- Beispiel: ein LSTM für das Tagging für ein Speech
- Übung: Erweitern Sie den LSTM-Tagger mit Merkmalen auf Zeichenebene
- Erweitert: Dynamische Toolkits, dynamische Programmierung und Bilstm-CRF
- Beispiel: BI-LSTM Konditionales Zufallsfeld für die Erkennung der benannten Entfernung
- Übung: Eine neue Verlustfunktion für diskriminierendes Tagging
Was ist dieses Tutorial?
Ich schreibe dieses Tutorial, weil es, obwohl es da draußen viele andere Tutorials gibt, alle eines von drei Problemen zu haben scheinen:
- Sie haben viele Inhalte über Computer Vision und überzeugen, was für die meisten NLP irrelevant ist (obwohl überzeugende NETs auf coole Weise auf NLP -Probleme angewendet wurden).
- Pytorch ist brandneu, und so viele Deep -Lernen für NLP -Tutorials sind in älteren Frameworks und normalerweise nicht in dynamischen Frameworks wie Pytorch, die einen völlig anderen Geschmack haben.
- Die Beispiele bewegen sich nicht über RNN -Sprachmodelle hinaus und zeigen die fantastischen Dinge, die Sie tun können, wenn Sie versuchen, eine Vorhersage der lingusitischen Struktur zu machen. Ich denke, dies ist ein Problem, da die dynamischen Graphen von Pytorch die Strukturvorhersage zu einer seiner größten Stärken machen.
Insbesondere schreibe ich dieses Tutorial für eine natürliche Sprachverarbeitungsklasse bei Georgia Tech, um in ein Problem zu erleichtern, das ich für die Klasse über die Analyse des Deep -Übergangs geschrieben habe. Das Problemsatz verwendet einige erweiterte Techniken. Die Absicht dieses Tutorials ist es, die Grundlagen zu behandeln, damit sich die Schüler auf die anspruchsvolleren Aspekte des Problems konzentrieren können. Ziel ist es, mit den Grundlagen zu beginnen und zur sprachlichen Strukturvorhersage aufzusteigen, die meiner Meinung nach in anderen Pytorch -Tutorials fast vollständig fehlt. Die allgemeinen Grundlagen der Deep Learning haben kurze Ausstellungen. Themen mehr NLP-spezifische Diskussionen erhielten, obwohl ich auf andere Quellen verwiesen habe, als ich der Meinung war, dass eine vollständige Beschreibung das Rad neu erfinden und zu viel Platz einnehmen würde.
Abhängigkeitsprechungsproblem festgelegt
Wie oben erwähnt, finden Sie hier das Problemsatz, das durch die Implementierung eines leistungsstarken Abhängigkeits-Parsers in Pytorch durchläuft. Ich wollte hier einen Link hinzufügen, da er möglicherweise nützlich sein könnte, vorausgesetzt, Sie ignorieren die Dinge, die für die Klasse spezifisch waren. Ein paar Notizen:
- Es gibt viel Code, sodass der Beginn des Problems hauptsächlich darin bestand, die Leute mit der Art und Weise vertraut zu machen, wie mein Code die relevanten Daten darstellte, und die Schnittstellen, die Sie verwenden müssen. Der Rest des Problemssatzes implementiert tatsächlich Komponenten für den Parser. Da wir in der Klasse noch nicht tief gelernt hatten, versuchte ich, eine enorme Anzahl von Kommentaren und Hinweisen beim Schreiben abzugeben.
- Es gibt einen Unit -Test für jede Lieferfähigkeit, die Sie mit Nosenstests durchführen können.
- Da wir dieses Problem in der Klasse verwenden, veröffentlichen Sie bitte nicht öffentlich Lösungen.
- Das gleiche Repo enthält einige Notizen, die einen Abschnitt zur Analyse der Abhängigkeit von Shift-Reduce enthalten, wenn Sie nach einer schriftlichen Quelle suchen, um das Problemsatz zu ergänzen.
- Der obige Link funktioniert möglicherweise nicht, wenn er zu Beginn eines neuen Semesters abgenommen wird.
Referenzen:
- Ich habe bei der EMNLP 2016 aus diesem Tutorial über Dynet viel über die tiefe Strukturvorhersage gelernt, die Chris Dyer und Graham Neubig von CMU und Yoav Goldberg von der Bar Ilan University gegeben hat. Dynet ist ein großartiges Paket, insbesondere wenn Sie C ++ verwenden und eine dynamische Eingabe vermeiden möchten. Die endgültige Bilstm CRF-Übung und die Feature-Features-Übungen auf Charakterebene sind Dinge, die ich aus diesem Tutorial gelernt habe.
- Ein großartiges Buch zur Strukturvorhersage ist die sprachliche Strukturvorhersage von Noah Smith. Es verwendet kein tiefes Lernen, aber das ist in Ordnung.
- Das beste Deep -Learning -Buch, das mir bekannt ist, ist Deep Learning, das von einigen wichtigen Mitwirkenden des Feldes und sehr umfassend ist, obwohl es keinen NLP -Fokus gibt. Es ist kostenlos online, aber es lohnt sich, in Ihrem Regal zu haben.
Übungen:
Es gibt einige Übungen im Tutorial, die entweder ein beliebtes Modell (CBOW) implementieren oder eines meiner Modelle erweitern. Die Features-Features-Übungen auf Charakterebene ist insbesondere sehr nicht trivial, aber sehr nützlich (ich kann die genauen Zahlen nicht zitieren, aber ich habe das Experiment schon einmal ausgeführt und normalerweise erhöhen die Merkmale auf Charakterebene die Genauigkeit 2-3%). Da sie keine einfachen Übungen sind, werde ich sie bald selbst implementieren und zum Repo hinzufügen.
Vorschläge:
Bitte öffnen Sie ein GitHub -Problem, wenn Sie Fehler finden oder glauben, dass es ein bestimmtes Modell gibt, das nützlich ist.