download.sh ) Erstellen Sie zunächst Daten. Donwload Squad Data und Handschuh und NLTK Corpus (~ 850 MB, damit Dateien auf $HOME/data herunterladen):
chmod +x download.sh; ./download.sh
Zweitens, Preprocess Stanford QA -Datensatz (zusammen mit Handschuhvektoren) und sparen Sie sie in $PWD/data/squad (~ 5 Minuten):
python -m squad.prepro
Das Modell hat ~ 2,5 m Parameter. Das Modell wurde mit Nvidia Titan X (Pascal Architecture, 2016) ausgebildet. Das Modell erfordert mindestens 12 GB GPU -RAM. Wenn Ihr GPU -RAM kleiner als 12 GB ist, können Sie entweder die Stapelgröße verringern (Leistung kann sich abbauen) oder Multi -GPU (siehe unten). Das Training konvergiert bei ~ 18.000 Schritten und dauerte ~ 4s pro Schritt (dh ~ 20 Stunden).
Vor dem Training wird empfohlen, zunächst den folgenden Code auszuprobieren, um zu überprüfen, ob alles in Ordnung ist und der Speicher ausreicht:
python -m basic.cli --mode train --noload --debug
Dann, um vollständig zu trainieren, rennen Sie:
python -m basic.cli --mode train --noload
Sie können den Trainingsprozess mit Optimierungsflags beschleunigen:
python -m basic.cli --mode train --noload --len_opt --cluster
Sie können sie immer noch weglassen, aber das Training wird viel langsamer.
Beachten Sie, dass während des Trainings die EM- und F1 -Ergebnisse aus der gelegentlichen Bewertung mit der Punktzahl aus dem offiziellen Kader -Bewertungsskript nicht gleich sind. Die gedruckten Ergebnisse sind nicht offiziell (unser Bewertungsschema ist etwas härter). Um die offizielle Nummer zu erhalten, verwenden Sie den offiziellen Bewerter (kopiert in squad Ordner, squad/evaluate-v1.1.py ). Weitere Informationen finden Sie unter 3.test.
Zu testen, rennen:
python -m basic.cli
Ähnlich wie beim Training können Sie die Optimierungsflags geben, um den Test zu beschleunigen (5 Minuten für Entwicklungsdaten):
python -m basic.cli --len_opt --cluster
Dieser Befehl lädt das zuletzt gespeicherte Modell während des Trainings und beginnt mit den Testdaten zu testen. Nach dem Ende des Vorgangs druckt es F1- und EM-Ergebnisse und gibt auch eine JSON-Datei aus ( $PWD/out/basic/00/answer/test-####.json , wobei #### der Schritt#ist, dass das Modell gespeichert wurde). Beachten Sie, dass die gedruckten Ergebnisse nicht offiziell sind (unser Bewertungsschema ist etwas härter). Verwenden Sie den offiziellen Bewerter (kopiert im squad -Ordner) und die Ausgabe -JSON -Datei, um die offizielle Nummer zu erhalten:
python squad/evaluate-v1.1.py $HOME/data/squad/dev-v1.1.json out/basic/00/answer/test-####.json
Anstatt das Modell selbst zu trainieren, können Sie sich dafür entscheiden, Gewichte vor ausgebildet zu verwenden, die für die Einreichung von Squad Bohrlochboard verwendet wurden. Siehe dieses Arbeitsblatt in Codalab, um die Ergebnisse zu reproduzieren. Wenn Sie mit Codalab nicht vertraut sind, befolgen Sie diese einfachen Schritte (da Sie alle oben genannten Voraussetzungen getroffen haben):
save.zip über das Arbeitsblatt und entpackt es im aktuellen Verzeichnis.glove.6B.100d.txt $HOME/data/glove/ basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
Dies schreibt die Antworten auf single.json im aktuellen Verzeichnis. Sie können dann den offiziellen Bewerter verwenden, um EM- und F1 -Scores zu erhalten. Wenn Sie mit GPU (~ 5 Minuten) ausführen möchten, ändern Sie den Wert des Batch_Size -Flags in der Shell -Datei in eine höhere Zahl (60 für 12 GB GPU -RAM). 4. In ähnlicher Weise reproduzieren Sie die Ensemble -Methode:
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
Wenn Sie auf GPU ausführen möchten, sollten Sie das Skript nacheinander ausführen, indem Sie '&' in der Forloop entfernen, oder dass Sie für jeden Lauf der für die Loop unterschiedliche GPUs angeben müssen.
Beachten Sie, dass diese Bewertungen vom offiziellen Bewerter stammen (kopiert im squad Ordner, squad/evaluate-v1.1.py ). Weitere Informationen finden Sie unter 3.test. Die Bewertungen während des Trainings könnten niedriger sein als die Punktzahlen des offiziellen Bewerters.
| EM (%) | F1 (%) | |
|---|---|---|
| einzel | 67,7 | 77,3 |
| Ensemble | 72.6 | 80.7 |
| EM (%) | F1 (%) | |
|---|---|---|
| einzel | 68.0 | 77,3 |
| Ensemble | 73.3 | 81.1 |
Weitere Informationen finden Sie in unserer Arbeit. Siehe Squad Ranging Boardboard, um mit anderen Modellen zu vergleichen.
Unser Modell unterstützt Multi-GPU-Schulungen. Wir folgen dem Parallelisierungsparadigma, das im TensorFlow -Tutorial beschrieben wird. Kurz gesagt, wenn Sie eine Stapelgröße von 60 (Standard) verwenden möchten, aber wenn Sie 3 GPUs mit 4 GB RAM haben, initialisieren Sie jede GPU mit einer Chargengröße von 20 und kombinieren die Gradienten auf der CPU. Dies kann leicht durch Laufen erfolgen:
python -m basic.cli --mode train --noload --num_gpus 3 --batch_size 20
Ebenso können Sie Ihre Tests beschleunigen nach:
python -m basic.cli --num_gpus 3 --batch_size 20
Im Moment finden Sie im demo -Zweig dieses Repositorys.