Torchnlp ist eine Deep Learning Library für NLP -Aufgaben. Baut auf Pytorch und Torchtext ein Versuch, wiederverwendbare Komponenten bereitzustellen, die über Aufgaben hinweg funktionieren. Derzeit kann es für die genannte Entity Recognition (NER) und die Chunking -Aufgaben mit einem bidirektionalen LSTM -CRF -Modell und einem Transformator -Netzwerkmodell verwendet werden. Es kann jeden Datensatz unterstützen, der das Conll 2003 -Format verwendet. In Kürze werden weitere Aufgaben hinzugefügt
Model und implementieren Sie die Methoden forward() und loss() um Vorhersagen und Verluste zurückzugebenHParams -Klasse, um die Hyperparameter für das Modell leicht zu definierenEvaluator und Trainer ein, um das Modell, die Datensatz -Iteratoren und die Metriken zu verwenden. Überprüfen Sie Ner.py für DetailsModel : Griff das Laden und Einsparungen von Modellen sowie die zugehörigen HyperparameterHParams : Generische Klasse zum Definieren von Hyperparametern. Kann bestehen bleibenTrainer : Trainieren Sie ein bestimmtes Modell auf einem Datensatz. Unterstützt Funktionen wie vordefinierte Lernrate -Verfallzeitpläne und frühes StoppenEvaluator : Bewertet das Modell auf einem Datensatz und mehreren vordefinierten oder benutzerdefinierten Metriken.get_input_processor_words : Verwenden Sie während der Inferenz, um Eingangszeichenfolgen schnell in ein Format umzuwandeln, das von einem Modell verarbeitet werden kann transformer.Encoder , transformer.DecoderCRF : Bedingte Zufallsfeldschicht, die als endgültige Ausgabe verwendet werden kannTransformerTagger : Sequenz -Tagging -Modell, das mit dem Transformator -Netzwerk und CRF implementiert istBiLSTMTagger : Sequenz -Tagging -Modell, das mit bidirektionalem LSTMS und CRF implementiert ist Torchnlp benötigt ein Minimum von Python 3.5 und Pytorch 0.4.0 zum Laufen. Überprüfen Sie den Pytorch auf die Installationsschritte. Klonen Sie dieses Repository und installieren Sie andere Abhängigkeiten wie Torchtext:
pip install -r requirements.txt
Gehen Sie zur Wurzel des Projekts und überprüfen Sie die Integrität mit PyTest:
pytest
Installieren Sie dieses Projekt:
python setup.py
Torchnlp ist so konzipiert, dass sie im Python -Interpreter verwendet werden soll, um das Experimentieren zu erleichtern, ohne umständliche Befehlszeilenargumente zu tippen.
NER -Aufgabe
Die NER -Aufgabe kann auf jedem Datensatz ausgeführt werden, der dem Conll 2003 -Format bestätigt. Um die CONLL 2003 NER -Datensatz zu verwenden, platzieren Sie die Datensatzdateien in der folgenden Verzeichnisstruktur in Ihrem Arbeitsbereich:
.data
|
|---conll2003
|
|---eng.train.txt
|---eng.testa.txt
|---eng.testb.txt
eng.testa.txt wird der Validierungsdatensatz verwendet und eng.testb.txt wird als Testdatensatz verwendet.
Starten Sie das NER -Modul in der Python -Shell, die die Importe festlegt:
python -i -m torchnlp.ner
Task: Named Entity Recognition
Available models:
-------------------
TransformerTagger
Sequence tagger using the Transformer network (https://arxiv.org/pdf/1706.03762.pdf)
Specifically it uses the Encoder module. For character embeddings (per word) it uses
the same Encoder module above which an additive (Bahdanau) self-attention layer is added
BiLSTMTagger
Sequence tagger using bidirectional LSTM. For character embeddings per word
uses (unidirectional) LSTM
Available datasets:
-------------------
conll2003: Conll 2003 (Parser only. You must place the files)
>>>
Trainieren Sie das Transformatormodell auf dem Datensatz von Conll 2003:
>>> train('ner-conll2003', TransformerTagger, conll2003)
Das erste Argument ist der Aufgabename. Sie müssen denselben Aufgabennamen während der Bewertung und Inferenz verwenden. Standardmäßig verwendet die Zugfunktion die F1 -Metrik mit einem Fenster mit 5 Epochen, um frühzeitig Stoppen durchzuführen. Um die frühen Stoppkriterien zu ändern, setzen Sie die globale PREFS -Variable wie folgt:
>>> PREFS.early_stopping='lowest_3_loss'
Dies verwendet nun den Validierungsverlust als Stoppkriterien mit einem Fenster von 3 Epochen. Die Modelldateien werden im Verzeichnis von Taskname-Modelname gespeichert. In diesem Fall handelt es sich um Ner-Conll2003-Transformertagger
Bewerten Sie das ausgebildete Modell auf dem Testb -Datensatz -Split:
>>> evaluate('ner-conll2003', TransformerTagger, conll2003, 'test')
Es werden Metriken wie Genauigkeit, Sequenzgenauigkeit, F1 usw. angezeigt
Führen Sie das trainierte Modell interaktiv für die NER -Aufgabe aus:
>>> interactive('ner-conll2003', TransformerTagger)
...
Ctrl+C to quit
> Tom went to New York
I-PER O O I-LOC I-LOC
In ähnlicher Weise können Sie das bidirektionale LSTM -CRF -Modell mit der BiLSTMTagger -Klasse ausbilden. Das Anpassen von Hyperparametern ist ganz einfach. Schauen wir uns die Hyperparameter für TransformerTagger an:
>>> h2 = hparams_transformer_ner()
>>> h2
Hyperparameters:
filter_size=128
optimizer_adam_beta2=0.98
learning_rate=0.2
learning_rate_warmup_steps=500
input_dropout=0.2
embedding_size_char=16
dropout=0.2
hidden_size=128
optimizer_adam_beta1=0.9
embedding_size_word=300
max_length=256
attention_dropout=0.2
relu_dropout=0.2
batch_size=100
num_hidden_layers=1
attention_value_channels=0
attention_key_channels=0
use_crf=True
embedding_size_tags=100
learning_rate_decay=noam_step
embedding_size_char_per_word=100
num_heads=4
filter_size_char=64
Deaktivieren wir nun die CRF -Schicht:
>>> h2.update(use_crf=False)
Hyperparameters:
filter_size=128
optimizer_adam_beta2=0.98
learning_rate=0.2
learning_rate_warmup_steps=500
input_dropout=0.2
embedding_size_char=16
dropout=0.2
hidden_size=128
optimizer_adam_beta1=0.9
embedding_size_word=300
max_length=256
attention_dropout=0.2
relu_dropout=0.2
batch_size=100
num_hidden_layers=1
attention_value_channels=0
attention_key_channels=0
use_crf=False
embedding_size_tags=100
learning_rate_decay=noam_step
embedding_size_char_per_word=100
num_heads=4
filter_size_char=64
Verwenden Sie es, um das Modell neu zuzustreifen:
>>> train('ner-conll2003-nocrf', TransformerTagger, conll2003, hparams=h2)
Zusammen mit dem Modell werden auch die Hyperparameter gespeichert, sodass das HParams -Objekt während der Bewertung nicht bestanden werden muss. Beachten Sie auch, dass es standardmäßig keine vorhandenen Modellverzeichnisse überschreibt (stattdessen umbenannt). Um dieses Verhalten zu ändern, setzen Sie die PREFS -Variable:
>>> PREFS.overwrite_model_dir = True
Die PREFS -Variable wird in prefs.json automatisch bestehen
Aufgabe der Chunking
Der Conll 2000 -Datensatz ist für die Chunking -Aufgabe verfügbar. Der Datensatz wird automatisch aus dem öffentlichen Repository heruntergeladen, sodass Sie ihn nicht manuell herunterladen müssen.
Starten Sie die Chunking -Aufgabe:
python -i -m torchnlp.chunk
Trainieren Sie das Transformatormodell:
>>> train('chunk-conll2000', TransformerTagger, conll2000)
Es gibt keine Validierungspartition im Repository, daher wird 10% des Trainingssatzes zur Validierung verwendet.
Bewerten Sie das Modell im Testsatz:
>>> evaluate('chunk-conll2000', TransformerTagger, conll2000, 'test')
Der transformer.Encoder , transformer.Decoder und CRF -Module können unabhängig voneinander importiert werden, da sie nur von Pytorch abhängen:
from torchnlp.modules.transformer import Encoder
from torchnlp.modules.transformer import Decoder
from torchnlp.modules.crf import CRF
Weitere Informationen zur Verwendung finden Sie in den Kommentaren im Quellcode