download.sh solamente) Primero, prepare datos. Donwload Squad Data and Glove y NLTK Corpus (~ 850 MB, esto descargará archivos a $HOME/data ):
chmod +x download.sh; ./download.sh
En segundo lugar, el preprocesamiento de datos de control de calidad de Stanford (junto con los vectores de guantes) y guárdelos en $PWD/data/squad (~ 5 minutos):
python -m squad.prepro
El modelo tiene ~ 2.5m parámetros. El modelo fue entrenado con Nvidia Titan X (Pascal Architecture, 2016). El modelo requiere al menos 12 GB de RAM GPU. Si su RAM GPU es menor que 12 GB, puede disminuir el tamaño de lotes (el rendimiento puede degradarse), o puede usar GPU multi (ver más abajo). El entrenamiento converge en ~ 18k pasos, y tomó ~ 4s por paso (es decir, ~ 20 horas).
Antes del entrenamiento, se recomienda probar primero el siguiente código para verificar que todo esté bien y la memoria es suficiente:
python -m basic.cli --mode train --noload --debug
Luego para entrenar completamente, corre:
python -m basic.cli --mode train --noload
Puede acelerar el proceso de entrenamiento con banderas de optimización:
python -m basic.cli --mode train --noload --len_opt --cluster
Todavía puedes omitirlos, pero el entrenamiento será mucho más lento.
Tenga en cuenta que durante la capacitación, las puntuaciones EM y F1 de la evaluación ocasional no son lo mismo con el puntaje del guión de evaluación oficial del escuadrón. Los puntajes impresos no son oficiales (nuestro esquema de puntuación es un poco más duro). Para obtener el número oficial, use el evaluador oficial (copiado en la carpeta de squad , squad/evaluate-v1.1.py ). Para más información, consulte 3.Test.
Para probar, ejecutar:
python -m basic.cli
De manera similar al entrenamiento, puede dar los indicadores de optimización para acelerar la prueba (5 minutos en los datos del desarrollo):
python -m basic.cli --len_opt --cluster
Este comando carga el modelo guardado más recientemente durante el entrenamiento y comienza a probar en los datos de prueba. Después de que termina el proceso, imprime las puntuaciones F1 y EM, y también genera un archivo JSON ( $PWD/out/basic/00/answer/test-####.json , donde #### es el paso#que se guardó el modelo). Tenga en cuenta que los puntajes impresos no son oficiales (nuestro esquema de puntuación es un poco más duro). Para obtener el número oficial, use el evaluador oficial (copiado en la carpeta squad ) y el archivo JSON de salida:
python squad/evaluate-v1.1.py $HOME/data/squad/dev-v1.1.json out/basic/00/answer/test-####.json
En lugar de entrenar el modelo usted mismo, puede optar por usar pesos previamente capacitados que se utilizaron para la presentación de la tabla de clasificación de escuadrones. Consulte esta hoja de trabajo en Codalab para reproducir los resultados. Si no está familiarizado con Codalab, siga estos sencillos pasos (dado que cumplió todos los requisitos anteriores):
save.zip de la hoja de trabajo y descomponga en el directorio actual.glove.6B.100d.txt desde la carpeta de datos de su guante ( $HOME/data/glove/ ) al directorio actual. basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
Esto escribe las respuestas a single.json en el directorio actual. Luego puede usar el evaluador oficial para obtener puntajes EM y F1. Si desea ejecutar en GPU (~ 5 minutos), cambie el valor del indicador Batch_Size en el archivo de shell a un número más alto (60 para 12 GB de RAM GPU). 4. Del mismo modo, para reproducir el método de conjunto:
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
Si desea ejecutar en GPU, debe ejecutar el script secuencialmente eliminando '&' en el forloop, o deberá especificar diferentes GPU para cada ejecución del bucle for.
Tenga en cuenta que estos puntajes son del evaluador oficial (copiado en la carpeta de squad , squad/evaluate-v1.1.py ). Para más información, consulte 3.Test. Los puntajes aparecieron durante el entrenamiento podrían ser más bajos que los puntajes del evaluador oficial.
| Em (%) | F1 (%) | |
|---|---|---|
| soltero | 67.7 | 77.3 |
| conjunto | 72.6 | 80.7 |
| Em (%) | F1 (%) | |
|---|---|---|
| soltero | 68.0 | 77.3 |
| conjunto | 73.3 | 81.1 |
Consulte nuestro artículo para obtener más detalles. Vea la tabla de clasificación de escuadrones para comparar con otros modelos.
Nuestro modelo admite capacitación multi-GPU. Seguimos el paradigma de paralelización descrito en el tutorial de TensorFlow. En resumen, si desea usar un tamaño por lotes de 60 (predeterminado), pero si tiene 3 GPU con 4 GB de RAM, inicializa cada GPU con un tamaño por lotes de 20, y combina los gradientes en la CPU. Esto se puede hacer fácilmente ejecutando:
python -m basic.cli --mode train --noload --num_gpus 3 --batch_size 20
Del mismo modo, puede acelerar sus pruebas por:
python -m basic.cli --num_gpus 3 --batch_size 20
Por ahora, consulte la rama demo de este repositorio.