Una implementación de TensorFlow de Qanet de Google (previamente comprensión de lectura rápida (FRC)) de ICLR2018. (Nota: esta no es una implementación oficial de los autores del documento)
Escribí una publicación de blog sobre la implementación de Qanet. ¡Mira aquí para obtener más información!
La tubería de capacitación y preprocesamiento ha sido adoptada de R-NET por Hkust-Knowcomp. El modo de demostración está funcionando. Después del entrenamiento, solo use python config.py --mode demo para ejecutar un servidor de demostración interactivo.
Debido a un problema de memoria, se usa una atención de producto de punto único se usa en oposición a una atención múltiple de 8 cabezas como en el documento original. El tamaño oculto también se reduce a 96 de 128 debido al uso de un GTX1080 en comparación con un P100 utilizado en el papel. (8 GB de memoria GPU es insuficiente. Si tiene una GPU de memoria de 12 GB, comparta sus resultados de capacitación con nosotros).
Actualmente, el mejor modelo llega a EM/F1 = 70.8/80.1 en 60k pasos (6 ~ 8 horas). Los resultados detallados se enumeran a continuación.

El conjunto de datos utilizado para esta tarea es el conjunto de datos de respuesta a la pregunta de Stanford. Incrustos de guantes previos a la aparición obtenida de un rastreo común con tokens 840B utilizados para palabras.
Para descargar y preprocesar los datos, ejecutar
# download SQuAD and Glove
sh download.sh
# preprocess the data
python config.py --mode preproAl igual que R-Net por Hkust-KnowComp, los hiper parámetros se almacenan en config.py. Para depurar/trenes/test/demo, ejecutar
python config.py --mode debug/train/test/demoPara evaluar el modelo con el código oficial, ejecute
python evaluate-v1.1.py ~ /data/squad/dev-v1.1.json train/{model_name}/answer/answer.json El directorio predeterminado para el archivo de registro de TensorBoard es train/{model_name}/event
Para construir la imagen de Docker (requiere nvidia-docker), ejecutar
nvidia-docker build -t tensorflow/qanet .
Establezca rutas de montaje de volumen y asignaciones de puerto (para modo de demostración)
export QANETPATH={/path/to/cloned/QANet}
export CONTAINERWORKDIR=/home/QANet
export HOSTPORT=8080
export CONTAINERPORT=8080
atacar en el contenedor
nvidia-docker run -v $QANETPATH:$CONTAINERWORKDIR -p $HOSTPORT:$CONTAINERPORT -it --rm tensorflow/qanet bash
Una vez dentro del contenedor, siga los comandos proporcionados anteriormente, comenzando con la descarga de los conjuntos de datos del escuadrón y el guante.
Los pesos del modelo previamente no están disponibles temporalmente.
Aquí están los resultados recopilados de este repositorio y el artículo original.
| Modelo | Pasos de entrenamiento | Tamaño | Cabezas de atención | Tamaño de datos (agosto) | Em | F1 |
|---|---|---|---|---|---|---|
| Mi modelo | 35,000 | 96 | 1 | 87k (sin agosto) | 69.0 | 78.6 |
| Mi modelo | 60,000 | 96 | 1 | 87k (sin agosto) | 70.4 | 79.6 |
| Mi modelo (reportado por @jasonbw) | 60,000 | 128 | 1 | 87k (sin agosto) | 70.7 | 79.8 |
| Mi modelo (reportado por @chesterkuo) | 60,000 | 128 | 8 | 87k (sin agosto) | 70.8 | 80.1 |
| Papel original | 35,000 | 128 | 8 | 87k (sin agosto) | N / A | 77.0 |
| Papel original | 150,000 | 128 | 8 | 87k (sin agosto) | 73.6 | 82.7 |
| Papel original | 340,000 | 128 | 8 | 240k (agosto) | 75.1 | 83.8 |
Ejecute TensorBoard para la visualización.
$ tensorboard --logdir=./