download.sh ) Primeiro, prepare dados. Donwload Squad Data and Glove e NLTK Corpus (~ 850 MB, isso baixará arquivos para $HOME/data ):
chmod +x download.sh; ./download.sh
Segundo, o pré -processamento do conjunto de dados de QA Stanford (junto com vetores de luvas) e salvá -los em $PWD/data/squad (~ 5 minutos):
python -m squad.prepro
O modelo possui ~ 2,5m parâmetros. O modelo foi treinado com o Nvidia Titan X (Pascal Architecture, 2016). O modelo requer pelo menos 12 GB de RAM da GPU. Se a sua RAM da GPU for menor que 12 GB, você poderá diminuir o tamanho do lote (o desempenho pode degradar) ou pode usar o Multi GPU (veja abaixo). O treinamento converge em ~ 18k etapas e foram necessários ~ 4s por etapa (ou seja, ~ 20 horas).
Antes do treinamento, é recomendável tentar primeiro o código a seguir para verificar tudo está bem e a memória é suficiente:
python -m basic.cli --mode train --noload --debug
Então, para treinar completamente, correr:
python -m basic.cli --mode train --noload
Você pode acelerar o processo de treinamento com sinalizadores de otimização:
python -m basic.cli --mode train --noload --len_opt --cluster
Você ainda pode omitê -los, mas o treinamento será muito mais lento.
Observe que durante o treinamento, as pontuações EM e F1 da avaliação ocasional não são as mesmas com a pontuação do script oficial de avaliação de esquadrões. As pontuações impressas não são oficiais (nosso esquema de pontuação é um pouco mais duro). Para obter o número oficial, use o avaliador oficial (copiado na pasta squad , squad/evaluate-v1.1.py ). Para mais informações, consulte 3.Test.
Para testar, execute:
python -m basic.cli
Da mesma forma que o treinamento, você pode fornecer os sinalizadores de otimização para acelerar o teste (5 minutos em dados de dev):
python -m basic.cli --len_opt --cluster
Este comando carrega o modelo mais recentemente salvo durante o treinamento e começa a testar os dados do teste. Após o término do processo, ele imprime as pontuações de F1 e EM e também produz um arquivo JSON ( $PWD/out/basic/00/answer/test-####.json , onde #### é a etapa#que o modelo foi salvo). Observe que as pontuações impressas não são oficiais (nosso esquema de pontuação é um pouco mais duro). Para obter o número oficial, use o avaliador oficial (copiado na pasta squad ) e o arquivo JSON de saída:
python squad/evaluate-v1.1.py $HOME/data/squad/dev-v1.1.json out/basic/00/answer/test-####.json
Em vez de treinar o modelo, você pode optar por usar pesos pré-treinados que foram usados para o envio da tabela de classificação de esquadrões. Consulte esta planilha no Codalab para reproduzir os resultados. Se você não estiver familiarizado com o Codalab, siga estas etapas simples (dado que você conheceu todos os pré -requisitos acima):
save.zip da planilha e descompacte -a no diretório atual.glove.6B.100d.txt da pasta de dados da luva ( $HOME/data/glove/ ) para o diretório atual. basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
Isso escreve as respostas para o single.json no diretório atual. Você pode usar o avaliador oficial para obter pontuações EM e F1. Se você deseja executar na GPU (~ 5 minutos), altere o valor do sinalizador Batch_size no arquivo shell para um número maior (60 para RAM GPU de 12 GB). 4. Da mesma forma, para reproduzir o método do conjunto:
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
Se você deseja executar na GPU, execute o script sequencialmente removendo '&' no forloop, ou precisará especificar diferentes GPUs para cada execução do loop for.
NOTA Essas pontuações são do avaliador oficial (copiado na pasta squad , squad/evaluate-v1.1.py ). Para mais informações, consulte 3.Test. As pontuações apareceram durante o treinamento podem ser inferiores às pontuações do avaliador oficial.
| Em (%) | F1 (%) | |
|---|---|---|
| solteiro | 67.7 | 77.3 |
| conjunto | 72.6 | 80.7 |
| Em (%) | F1 (%) | |
|---|---|---|
| solteiro | 68.0 | 77.3 |
| conjunto | 73.3 | 81.1 |
Consulte o nosso artigo para obter mais detalhes. Consulte a tabela de classificação do esquadrão para comparar com outros modelos.
Nosso modelo suporta treinamento multi-GPU. Seguimos o paralelo paradigma descrito no Tensorflow Tutorial. Em resumo, se você deseja usar o tamanho do lote de 60 (padrão), mas se você tiver 3 GPUs com 4 GB de RAM, inicialize cada GPU com tamanho de lote de 20 e combine os gradientes na CPU. Isso pode ser feito facilmente executando:
python -m basic.cli --mode train --noload --num_gpus 3 --batch_size 20
Da mesma forma, você pode acelerar seus testes:
python -m basic.cli --num_gpus 3 --batch_size 20
Por enquanto, consulte o ramo demo deste repositório.