Une implémentation TensorFlow de Google de Google (compréhension de lecture auparavant rapide (FRC)) de ICLR2018. (Remarque: ce n'est pas une implémentation officielle des auteurs de l'article)
J'ai écrit un article de blog sur la mise en œuvre de Qanet. Découvrez ici pour plus d'informations!
Un pipeline de formation et de prétraitement a été adopté à partir de R-Net par HKUST-KnowComp. Le mode de démonstration fonctionne. Après la formation, utilisez simplement python config.py --mode demo pour exécuter un serveur de démonstration interactif.
En raison d'un problème de mémoire, une seule attention du produit de point de tête est utilisée par opposition à une attention multiples de 8 têtes comme dans l'article d'origine. La taille cachée est également réduite à 96 par rapport à 128 en raison de l'utilisation d'un GTX1080 par rapport à un P100 utilisé dans le papier. (8 Go de mémoire GPU sont insuffisants. Si vous avez un GPU de mémoire de 12 Go, veuillez partager vos résultats de formation avec nous.)
Actuellement, le meilleur modèle atteint EM / F1 = 70,8 / 80,1 en étapes de 60k (6 ~ 8 heures). Les résultats détaillés sont répertoriés ci-dessous.

L'ensemble de données utilisé pour cette tâche est Stanford Question répondant à l'ensemble de données. Des incorporations de gants pré-entraînées obtenues à partir de rampes communes avec des jetons 840B utilisés pour les mots.
Pour télécharger et prétraiter les données, exécuter
# download SQuAD and Glove
sh download.sh
# preprocess the data
python config.py --mode preproTout comme R-net par HKUST-KnowComp, Hyper Paramètres sont stockés dans config.py. Pour déboguer / former / tester / démo, courir
python config.py --mode debug/train/test/demoPour évaluer le modèle avec le code officiel, exécutez
python evaluate-v1.1.py ~ /data/squad/dev-v1.1.json train/{model_name}/answer/answer.json Le répertoire par défaut pour le fichier journal de Tensorboard est train/{model_name}/event
Pour construire l'image docker (nécessite nvidia-docker), exécutez
nvidia-docker build -t tensorflow/qanet .
Définir les chemins de montage du volume et les mappages de port (pour le mode de démonstration)
export QANETPATH={/path/to/cloned/QANet}
export CONTAINERWORKDIR=/home/QANet
export HOSTPORT=8080
export CONTAINERPORT=8080
tomber dans le récipient
nvidia-docker run -v $QANETPATH:$CONTAINERWORKDIR -p $HOSTPORT:$CONTAINERPORT -it --rm tensorflow/qanet bash
Une fois à l'intérieur du conteneur, suivez les commandes fournies ci-dessus en commençant par le téléchargement des ensembles de données d'équipe et de gant.
Les poids du modèle pré-entraîné ne sont temporairement pas disponibles.
Voici les résultats collectés de ce référentiel et du papier d'origine.
| Modèle | Étapes de formation | Taille | Têtes d'attention | Taille des données (août) | Em | F1 |
|---|---|---|---|---|---|---|
| Mon modèle | 35 000 | 96 | 1 | 87K (non août) | 69.0 | 78.6 |
| Mon modèle | 60 000 | 96 | 1 | 87K (non août) | 70.4 | 79.6 |
| Mon modèle (rapporté par @jasonbw) | 60 000 | 128 | 1 | 87K (non août) | 70.7 | 79.8 |
| Mon modèle (rapporté par @chesterkuo) | 60 000 | 128 | 8 | 87K (non août) | 70.8 | 80.1 |
| Papier d'origine | 35 000 | 128 | 8 | 87K (non août) | N / A | 77.0 |
| Papier d'origine | 150 000 | 128 | 8 | 87K (non août) | 73.6 | 82.7 |
| Papier d'origine | 340 000 | 128 | 8 | 240k (août) | 75.1 | 83.8 |
Exécutez Tensorboard pour la visualisation.
$ tensorboard --logdir=./