Der für die Textklassifizierung verwendete Quellcode nur unter Verwendung von Labelnamen: Ein in EMNLP 2020 veröffentlichter Ansatz des Sprachmodells .
Mindestens eine GPU muss den Code ausführen.
Vor dem Ausführen müssen Sie zuerst die erforderlichen Pakete installieren, indem Sie die folgenden Befehle eingeben:
$ pip3 install -r requirements.txt
Außerdem müssen Sie die Stoppwörter in der NLTK -Bibliothek herunterladen:
import nltk
nltk.download('stopwords')
Python 3.6 oder höher wird dringend empfohlen; Die Verwendung älterer Python -Versionen kann zu Problemen mit Paketkompatibilität führen.
Wir bieten vier Skripte get_data.sh zum Herunterladen der in dem Papier unter datasets verwendeten Datensätze und vier Trainings -Bash -Skripte agnews.sh , dbpedia.sh , imdb.sh und amazon.sh für das Ausführen des Modells auf den vier Datensätzen.
Hinweis: Unser Modell verwendet keine Trainingsetiketten. Wir bieten die Schulungs-/Test -Set -Boden -Wahrheitsbezeichnungen nur zur Vollständigkeit und Bewertung an.
In den Schulungs -Bash -Skripten geht davon aus, dass Sie zwei 10 -GB -GPUs haben. Wenn Sie eine unterschiedliche Anzahl von GPUs oder GPUs unterschiedlicher Speichergrößen haben, finden Sie im nächsten Abschnitt, wie die folgenden Befehlszeilenargumente angemessen geändert werden können (während andere Argumente unverändert bleiben): train_batch_size , accum_steps , eval_batch_size und gpus .
Die Bedeutungen der Befehlszeilenargumente werden beim Tippen angezeigt
python src/train.py -h
Die folgenden Argumente wirken sich direkt auf die Leistung des Modells aus und müssen sorgfältig festgelegt werden:
train_batch_size , accum_steps , gpus : Diese drei Argumente sollten zusammen eingestellt werden. Sie müssen sicherstellen, dass die effektive Schulungsstapelgröße , die als train_batch_size * accum_steps * gpus berechnet wird, um 128 beträgt. Wenn Sie beispielsweise 4 GPUs haben, können Sie train_batch_size = 32, accum_steps = 1, gpus = 4 festlegen; Wenn Sie 1 GPU haben, können Sie train_batch_size = 32, accum_steps = 4, gpus = 1 festlegen. Wenn Ihr GPUs unterschiedliche Speichergrößen hat, müssen Sie möglicherweise train_batch_size ändern, während Sie accum_steps und gpus gleichzeitig einstellen, um die effektive Trainingsgröße bei 128 zu halten.eval_batch_size : Dieses Argument beeinflusst nur die Geschwindigkeit des Algorithmus. Verwenden Sie als große Bewertungsstapelgröße, wie Ihr GPUs gelten kann.max_len : Dieses Argument steuert die maximale Länge der in das Modell eingerichteten Dokumente (längere Dokumente werden abgeschnitten). Im Idealfall sollte max_len auf die Länge des längsten Dokuments eingestellt werden ( max_len kann unter Bert -Architektur nicht größer als 512 sein), aber die Verwendung größerer max_len verbraucht auch mehr GPU -Speicher, was zu einer kleineren Chargengröße und einer längeren Trainingszeit führt. Daher können Sie die Genauigkeit der Modellgenauigkeit für schnellere Schulungen eintauschen, indem Sie max_len reduzieren.mcp_epochs , self_train_epochs : Sie steuern, wie viele Epochen das Modell zur maskierten Kategorie-Vorhersageaufgabe bzw. der Selbsttraining-Aufgabe trainieren. Einstellen mcp_epochs = 3, self_train_epochs = 1 ist für die meisten Datensätze ein guter Ausgangspunkt, aber Sie können sie erhöhen, wenn Ihr Datensatz klein ist (weniger als 100,000 Dokumente).Andere Argumente können als Standardwerte aufbewahrt werden.
Um den Code in einem neuen Datensatz auszuführen, müssen Sie
your_dataset unter datasets .your_dataset einen Text corpus train.txtlabel_names.txt unter your_dataset vor (jede Zeile enthält den Labelnamen einer Kategorie; Wenn mehrere Wörter als Etikettenname einer Kategorie verwendet werden, legen Sie sie in die gleiche Zeile und trennen Sie sie mit Whitespace -Zeichen).test.txt (ein Dokument pro Zeile) mit Ground Truth Labels test_labels.txt (jede Zeile enthält eine Ganzzahl, die den Kategorie -Index des entsprechenden Dokuments bezeichnet, der Index startet ab 0 und die Reihenfolge muss mit der Kategorie -Reihenfolge in label_names.txt übereinstimmen. Wenn der Testkorpus bereitgestellt wird, schreibt der Code die Klassifizierungsergebnisse auf out.txt unter your_dataset , sobald das Training abgeschlossen ist. Wenn die Bodenwahrheitsbezeichnungen des Testkorpus bereitgestellt werden, wird die Testgenauigkeit während der Selbsttraining angezeigt, was für die Hyperparameterabstimmung und das Modell der Kirschpicke mit einem kleinen Testsatz nützlich ist.your_dataset als final_model.pt gespeichert.HINWEIS: Der Code kann Intermediate -Daten- und Model -Checkpoints als .PT -Dateien unter Ihrem Datensatzverzeichnis für ein fortgesetztes Training durchführen. Wenn Sie Ihren Trainingskorpus oder Etikettennamen ändern und den Code erneut ausführen, müssen Sie zuerst alle .PT-Dateien löschen, um zu verhindern, dass der Code alte Ergebnisse lädt.
Sie können immer auf die Beispieldatensätze verweisen, wenn Sie Ihre eigenen Datensätze vorbereiten.
Bitte zitieren Sie das folgende Papier, wenn Sie den Code für Ihre Recherche hilfreich finden.
@inproceedings{meng2020text,
title={Text Classification Using Label Names Only: A Language Model Self-Training Approach},
author={Meng, Yu and Zhang, Yunyi and Huang, Jiaxin and Xiong, Chenyan and Ji, Heng and Zhang, Chao and Han, Jiawei},
booktitle={Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing},
year={2020},
}