download.sh seulement) Premièrement, préparez les données. Donwload Squad Data and Glove et NLTK Corpus (~ 850 Mo, cela téléchargera des fichiers sur $HOME/data ):
chmod +x download.sh; ./download.sh
Deuxièmement, l'ensemble de données de QA Stanford prétraitement (avec les vecteurs de gants) et les économiser dans $PWD/data/squad (~ 5 minutes):
python -m squad.prepro
Le modèle a ~ 2,5 m de paramètres. Le modèle a été formé avec Nvidia Titan X (Pascal Architecture, 2016). Le modèle nécessite au moins 12 Go de RAM GPU. Si votre RAM GPU est inférieur à 12 Go, vous pouvez soit diminuer la taille du lot (les performances peuvent se dégrader), soit utiliser Multi GPU (voir ci-dessous). La formation converge à ~ 18 000 pas, et il a pris ~ 4 s par étape (c'est-à-dire ~ 20 heures).
Avant la formation, il est recommandé d'essayer d'abord le code suivant pour vérifier que tout est correct et la mémoire est suffisante:
python -m basic.cli --mode train --noload --debug
Ensuite, pour s'entraîner complètement, courir:
python -m basic.cli --mode train --noload
Vous pouvez accélérer le processus de formation avec des indicateurs d'optimisation:
python -m basic.cli --mode train --noload --len_opt --cluster
Vous pouvez toujours les omettre, mais la formation sera beaucoup plus lente.
Notez que pendant la formation, les scores EM et F1 de l'évaluation occasionnelle ne sont pas les mêmes avec le score du script officiel d'évaluation de l'escouade. Les scores imprimés ne sont pas officiels (notre programme de notation est un peu plus dur). Pour obtenir le numéro officiel, utilisez l'évaluateur officiel (copié dans le dossier squad , squad/evaluate-v1.1.py ). Pour plus d'informations, voir 3.Test.
Pour tester, exécuter:
python -m basic.cli
De façon similaire à la formation, vous pouvez donner les drapeaux d'optimisation pour accélérer le test (5 minutes sur les données de développement):
python -m basic.cli --len_opt --cluster
Cette commande charge le modèle le plus récemment enregistré pendant la formation et commence les tests sur les données de test. Une fois le processus se terminant, il imprime les scores F1 et EM, et publie également un fichier JSON ( $PWD/out/basic/00/answer/test-####.json , où #### est l'étape # que le modèle a été enregistré). Notez que les scores imprimés ne sont pas officiels (notre schéma de notation est un peu plus dur). Pour obtenir le numéro officiel, utilisez l'évaluateur officiel (copié dans le dossier squad ) et le fichier JSON de sortie:
python squad/evaluate-v1.1.py $HOME/data/squad/dev-v1.1.json out/basic/00/answer/test-####.json
Au lieu de former le modèle vous-même, vous pouvez choisir d'utiliser des poids pré-formés qui ont été utilisés pour la soumission des classements Squad. Reportez-vous à cette feuille de travail dans le codalab pour reproduire les résultats. Si vous n'êtes pas familier avec le codalab, suivez ces étapes simples (étant donné que vous avez rencontré tous les préreqs ci-dessus):
save.zip à partir de la feuille de calcul et décompressez-la dans le répertoire actuel.glove.6B.100d.txt dans votre dossier de données Glove ( $HOME/data/glove/ ) vers le répertoire actuel. basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
Cela écrit les réponses à single.json dans le répertoire actuel. Vous pouvez ensuite utiliser l'évaluateur officiel pour obtenir des scores EM et F1. Si vous souhaitez fonctionner sur GPU (~ 5 minutes), modifiez la valeur de l'indicateur Batch_Size dans le fichier shell en un nombre plus élevé (60 pour 12 Go GPU RAM). 4. De même, pour reproduire la méthode d'ensemble:
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
Si vous souhaitez exécuter sur GPU, vous devez exécuter le script séquentiellement en supprimant '&' dans le forloop, ou vous devrez spécifier différents GPU pour chaque exécution de la boucle pour.
Remarque Ces scores proviennent de l'évaluateur officiel (copié dans le dossier squad , squad/evaluate-v1.1.py ). Pour plus d'informations, voir 3.Test. Les scores sont apparus pendant la formation pourraient être inférieurs aux scores de l'évaluateur officiel.
| EM (%) | F1 (%) | |
|---|---|---|
| célibataire | 67.7 | 77.3 |
| ensemble | 72.6 | 80.7 |
| EM (%) | F1 (%) | |
|---|---|---|
| célibataire | 68.0 | 77.3 |
| ensemble | 73.3 | 81.1 |
Reportez-vous à notre article pour plus de détails. Voir Squad Leadboard pour comparer avec d'autres modèles.
Notre modèle prend en charge la formation multi-GPU. Nous suivons le paradigme de parallélisation décrit dans le didacticiel TensorFlow. En bref, si vous souhaitez utiliser la taille du lot de 60 (par défaut), mais si vous avez 3 GPU avec 4 Go de RAM, vous initialisez chaque GPU avec une taille de lot de 20 et combinez les gradients sur CPU. Cela peut être facilement fait en fonctionnant:
python -m basic.cli --mode train --noload --num_gpus 3 --batch_size 20
De même, vous pouvez accélérer vos tests en:
python -m basic.cli --num_gpus 3 --batch_size 20
Pour l'instant, veuillez vous référer à la branche demo de ce référentiel.