Modelagem de idiomas. Esta base de código contém a implementação de células G-LSTM e F-LSTM de [1]. Também pode conter alguns experimentos em andamento.
Este código foi bifurcado em https://github.com/rafaljozefowicz/lm e contém a linha de base do modelo de idioma "biglstm" de [2].
O código atual é executado no Tensorflow R1.5 e suporta o paralelismo de dados multi-GPU usando atualizações de gradiente sincronizado.
Em um bilhão de palavras benchmark usando 8 GPUs em um DGX-1, o Big G-LSTM G4 conseguiu obter 24,29 após 2 semanas de treinamento e 23,36 após 3 semanas.
Em 02/06/2018, encontramos um problema com nossa configuração experimental, que torna inválido os números de perplexidade listados no artigo.
Consulte os números atuais na tabela abaixo.
Na estação DGX, após 1 semana de treinamento usando todos os 4 GPUs (Tesla v100) e tamanho de lote de 256 por GPU:
| Modelo | Perplexidade | Passos | WPS |
|---|---|---|---|
| Biglstm | 35.1 | ~ 0,99m | ~ 33,8k |
| Big F-LSTM F512 | 36.3 | ~ 1,67m | ~ 56,5k |
| Grande g-lstm g4 | 40.6 | ~ 1,65m | ~ 56k |
| Big G-LSTM G2 | 36 | ~ 1,37m | ~ 47.1k |
| Grande g-lstm g8 | 39.4 | ~ 1,7m | ~ 58,5 |
Supondo que o diretório de dados esteja em: /raid/okuchaiev/Data/LM1B/1-billion-word-language-modeling-benchmark-r13output/ , execute:
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 parâmetro.Observe que o leitor de dados atual pode perder alguns tokens ao construir mini-lotes que podem ter um efeito menor na perplexidade final.
Para obter resultados mais precisos , use batch_size = 1 e num_steps = 1 na avaliação. Obrigado a Ciprian por perceber isso.
O comando aceita e argumentos adicionais --hpconfig , que permitem substituir vários hiper-parâmetros, incluindo:
Código bifurcado e células GLSTM/FLSTM: [email protected]