Uma implementação do TensorFlow do QANET do Google (compreensão anterior de leitura rápida (FRC)) do ICLR2018. (Nota: Esta não é uma implementação oficial dos autores do artigo)
Eu escrevi um post sobre a implementação da Qanet. Confira aqui para obter mais informações!
O pipeline de treinamento e pré-processamento foi adotado da R-Net pelo HKUST-KnowComp. O modo de demonstração está funcionando. Após o treinamento, basta usar python config.py --mode demo para executar um servidor de demonstração interativo.
Devido a um problema de memória, é usada uma atenção de um único número de pontos de cabeça em oposição a uma atenção de 8 cabeças de várias cabeças, como no artigo original. O tamanho oculto também é reduzido para 96 de 128 devido ao uso de um GTX1080 em comparação com um P100 usado no papel. (8 GB de memória GPU é insuficiente. Se você tiver uma GPU de memória de 12 GB, compartilhe seus resultados de treinamento conosco.)
Atualmente, o melhor modelo atinge em/f1 = 70,8/80,1 em 60k etapas (6 ~ 8 horas). Resultados detalhados estão listados abaixo.

O conjunto de dados usado para esta tarefa é o conjunto de dados Stanford Question. Incorporações de luvas pré -gravadas obtidas de rastreamento comum com 840b tokens usados para palavras.
Para baixar e pré -processar os dados, execute
# download SQuAD and Glove
sh download.sh
# preprocess the data
python config.py --mode preproAssim como o R-Net do HKUST-KnowComp, os parâmetros hiper são armazenados em config.py. Para depurar/trem/test/demonstração, execute
python config.py --mode debug/train/test/demoPara avaliar o modelo com o código oficial, execute
python evaluate-v1.1.py ~ /data/squad/dev-v1.1.json train/{model_name}/answer/answer.json O diretório padrão do arquivo de log do Tensorboard é train/{model_name}/event
Para construir a imagem do Docker (requer Nvidia-Docker), execute
nvidia-docker build -t tensorflow/qanet .
Defina caminhos de montagem de volume e mapeamentos de porta (para o modo de demonstração)
export QANETPATH={/path/to/cloned/QANet}
export CONTAINERWORKDIR=/home/QANet
export HOSTPORT=8080
export CONTAINERPORT=8080
BASH no recipiente
nvidia-docker run -v $QANETPATH:$CONTAINERWORKDIR -p $HOSTPORT:$CONTAINERPORT -it --rm tensorflow/qanet bash
Uma vez dentro do contêiner, siga os comandos fornecidos acima, começando com o download dos conjuntos de dados de esquadrão e luvas.
Os pesos do modelo pré -ridículo não estão temporariamente disponíveis.
Aqui estão os resultados coletados deste repositório e do artigo original.
| Modelo | Etapas de treinamento | Tamanho | Cabeças de atenção | Tamanho dos dados (agosto) | Em | F1 |
|---|---|---|---|---|---|---|
| Meu modelo | 35.000 | 96 | 1 | 87k (sem agosto) | 69.0 | 78.6 |
| Meu modelo | 60.000 | 96 | 1 | 87k (sem agosto) | 70.4 | 79.6 |
| Meu modelo (relatado por @jasonbw) | 60.000 | 128 | 1 | 87k (sem agosto) | 70.7 | 79.8 |
| Meu modelo (relatado por @chesterkuo) | 60.000 | 128 | 8 | 87k (sem agosto) | 70.8 | 80.1 |
| Papel original | 35.000 | 128 | 8 | 87k (sem agosto) | N / D | 77.0 |
| Papel original | 150.000 | 128 | 8 | 87k (sem agosto) | 73.6 | 82.7 |
| Papel original | 340.000 | 128 | 8 | 240K (agosto) | 75.1 | 83.8 |
Execute o Tensorboard para visualização.
$ tensorboard --logdir=./