Modelado de idiomas. Esta base de código contiene la implementación de células G-LSTM y F-LSTM de [1]. También podría contener algunos experimentos en curso.
Este código fue bifurcado de https://github.com/rafaljazefowicz/lm y contiene la línea de base del modelo de lenguaje "biglstm" de [2].
El código actual se ejecuta en TensorFlow R1.5 y admite el paralelismo de datos multi-GPU utilizando actualizaciones de gradiente sincronizadas.
En un billón de palabras de referencia usando 8 GPU en un DGX-1, Big G-LSTM G4 pudo alcanzar 24.29 después de 2 semanas de entrenamiento y 23.36 después de 3 semanas.
El 02/06/2018 encontramos un problema con nuestra configuración experimental que hace que los números de perplejidad sean inquietos en el documento inválido.
Vea los números actuales en la tabla a continuación.
En la estación DGX, después de 1 semana de entrenamiento utilizando las 4 GPU (Tesla V100) y el tamaño de lotes de 256 por GPU:
| Modelo | Perplejidad | Pasos | WPS |
|---|---|---|---|
| Biglstm | 35.1 | ~ 0.99m | ~ 33.8k |
| Big F-LSTM F512 | 36.3 | ~ 1.67m | ~ 56.5k |
| Big G-LSTM G4 | 40.6 | ~ 1.65m | ~ 56k |
| Big G-LSTM G2 | 36 | ~ 1.37m | ~ 47.1k |
| Big G-LSTM G8 | 39.4 | ~ 1.7m | ~ 58.5 |
Suponiendo que el directorio de datos está en: /raid/okuchaiev/Data/LM1B/1-billion-word-language-modeling-benchmark-r13output/ , ejecutar:
export CUDA_VISIBLE_DEVICES=0,1,2,3
SECONDS=604800
LOGSUFFIX=FLSTM-F512-1week
python /home/okuchaiev/repos/f-lm/single_lm_train.py --logdir=/raid/okuchaiev/Workspace/LM/GLSTM-G4/$LOGSUFFIX --num_gpus=4 --datadir=/raid/okuchaiev/Data/LM/LM1B/1-billion-word-language-modeling-benchmark-r13output/ --hpconfig run_profiler=False,float16_rnn=False,max_time=$SECONDS,num_steps=20,num_shards=8,num_layers=2,learning_rate=0.2,max_grad_norm=1,keep_prob=0.9,emb_size=1024,projected_size=1024,state_size=8192,num_sampled=8192,batch_size=256,fact_size=512 >> train_$LOGSUFFIX.log 2>&1
python /home/okuchaiev/repos/f-lm/single_lm_train.py --logdir=/raid/okuchaiev/Workspace/LM/GLSTM-G4/$LOGSUFFIX --num_gpus=1 --mode=eval_full --datadir=/raid/okuchaiev/Data/LM/LM1B/1-billion-word-language-modeling-benchmark-r13output/ --hpconfig run_profiler=False,float16_rnn=False,max_time=$SECONDS,num_steps=20,num_shards=8,num_layers=2,learning_rate=0.2,max_grad_norm=1,keep_prob=0.9,emb_size=1024,projected_size=1024,state_size=8192,num_sampled=8192,batch_size=1,fact_size=512
num_of_groups .fact_size .Tenga en cuenta que el lector de datos actual puede perder algunos tokens al construir mini lotes que pueden tener un efecto menor en la perplejidad final.
Para los resultados más precisos , use Batch_Size = 1 y Num_steps = 1 en evaluación. Gracias a Ciprian por notar esto.
El comando acepta y argumento adicional --hpconfig que permite anular varios hiperparametros, incluidos:
Código bifurcado y celdas GLSTM/FLSTM: [email protected]