Verbesserung der Leistung von Sprachmodellen durch intelligente Vokabeln
Dieses Projekt soll die Verwendung der Vorverarbeitung des Billion Word Corpus mit Wortartbezeichnungen und benannten Entitäten untersuchen, um ein „intelligenteres“ Vokabular zu erstellen. Mit diesen Techniken ist es möglich, bessere Perplexitätswerte zu erzielen, als wenn man nur die Top-N-Wörter im Korpus verwendet.
Eine vollständige Erläuterung der Verarbeitung und ihrer Auswirkungen auf die erreichbaren Ratlosigkeitswerte finden Sie unter „Improving Language Model Performance with Smarter Vocabularies“.
Das Projekt umfasst Skripte für
Das Projekt ist für den Einsatz vor Ort konzipiert und erfordert keine Rohrinstallation. Laden Sie einfach die Quelle von GitHub herunter, legen Sie Konfigurationsoptionen fest und führen Sie die nummerierten Skripte der Reihe nach aus. Beachten Sie, dass dieser Code für Forscher gedacht ist. Sie müssen also damit rechnen, dass Sie den Code in den ausgeführten Skripts überprüfen und Optionen nach Bedarf ändern müssen, um bestimmte Ergebnisse zu erhalten.
Den Skripten des Hauptverzeichnisses ist eine Nummer vorangestellt, die angibt, in welcher Reihenfolge sie ausgeführt werden sollen. Bei den meisten Skripten im Hauptverzeichnis handelt es sich um eine relativ kurze Reihe von Aufrufen der zugehörigen Bibliotheksfunktionen. Bevor Sie jedes Skript ausführen, stellen Sie sicher, dass Sie es öffnen und alle Konfigurationsparameter festlegen, um die gewünschten Ergebnisse zu erzielen.
Globale Konfigurationsoptionen, die von mehreren Skripten verwendet werden, werden in ./configs/config.py festgelegt. Gehen Sie unbedingt in diese Datei und ändern Sie die Pfade zu Ihren Daten, bevor Sie eines der folgenden Skripte ausführen.
00_StanfordCoreNLPServer.py : Startet den Stanford Core NLP-Parser mithilfe der Konfigurationsdatei ./configs/snlp_server.py. Das Skript blockiert, während der Server läuft. Wenn Sie möchten, kann der Server auch manuell gestartet werden. Dieses Skript dient nur der Bequemlichkeit.
10_ExtractUniqueSents.py : Extrahiert eindeutige Sätze aus dem Billion Word Corpus vor dem Parsen. Oben in der Datei finden Sie einige Anweisungen zum Herunterladen und Einrichten des Rohkorpus.
12_STParseBWCorpus.py : Führt alle eindeutigen Sätze durch den Stanford Parser. Beachten Sie, dass dieser Schritt viel Zeit in Anspruch nimmt (möglicherweise einen ganzen Tag) und von einem Multi-Core-Prozessor stark profitiert. Beachten Sie die Hinweise in der Datei zu den Laufzeiten.
14_RemoveDuplicates.py : Führt einen zweiten Durchlauf durch die Daten durch, um doppelte Sätze zu entfernen, die nach der Analyse/Normalisierung auftreten.
20_CreateEnglishDictionary.py : Erforderlich für die intelligente Vokabelerstellung.
22_CreateVocab.py : Dieses Skript erstellt die verschiedenen Arten von Vokabeln. In der Datei gibt es einen großen if/elif-Block, in dem der Benutzer auswählen kann, welcher Vokabulartyp erstellt werden soll.
24_IndexVocab.py : Erstellt die indizierten Korpusdaten, die zum Training des Sprachmodells verwendet werden. Auch hier gibt es einen großen if/elif-Block, der vom Benutzer festgelegt werden muss, um den zu verwendenden Vokabulartyp auszuwählen.
30_TrainBasicLM.py : Richtet das Training des Modells ein und führt es aus. Auch hier gibt es einen Block von Anweisungen, der es dem Benutzer ermöglicht, das Vokabular auszuwählen, anhand dessen trainiert werden soll. Zusätzlich muss der Benutzer die Datei mit den Modellkonfigurationsparametern auswählen. Die Modellkonfigurationsparameter werden im Konfigurationsverzeichnis unter Dateinamen wie L1_2048_512.py gespeichert.
32_TestPerplexity : Führt einen Perplexitätstest für das trainierte Modell durch. Wählen Sie unten im Skript das zu testende Modell aus.
34_NextWordPrediction.py : Ermöglicht dem Benutzer die Eingabe des ersten Teils eines Satzes und ruft das Modell auf, um das nächste Wort vorherzusagen. Konfigurieren Sie, welches Modell im Hauptteil des Skripts verwendet werden soll.
Teile des Codes wurden aus dem Sprachmodell-Toolkit der Universität des Saarlandes übernommen. Siehe TF-NNLM-TK.
Dieser Code basierte teilweise auf dem TensorflowPTB-LM-Beispielmodell.