download.sh 실행을 위해) 먼저 데이터를 준비하십시오. Donwload Squad 데이터 및 장갑 및 NLTK 코퍼스 (~ 850MB, $HOME/data 로 파일을 다운로드 할 것입니다) :
chmod +x download.sh; ./download.sh
둘째, Preprocess Stanford QA 데이터 세트 (장갑 벡터와 함께)를 $PWD/data/squad (~ 5 분)로 저장합니다.
python -m squad.prepro
이 모델에는 ~ 2.5m 매개 변수가 있습니다. 이 모델은 Nvidia Titan X (Pascal Architecture, 2016)로 훈련되었습니다. 이 모델에는 12GB 이상의 GPU RAM이 필요합니다. GPU RAM이 12GB보다 작 으면 배치 크기를 줄이거나 (성능 저하 될 수 있음) 멀티 GPU를 사용할 수 있습니다 (아래 참조). 훈련은 ~ 18k 단계로 수렴되며 단계당 ~ 4s (예 : ~ 20 시간).
훈련하기 전에 먼저 다음 코드를 시도하여 모든 것이 정상인지 확인하고 메모리가 충분합니다.
python -m basic.cli --mode train --noload --debug
그런 다음 완전히 훈련하고 실행하십시오.
python -m basic.cli --mode train --noload
최적화 플래그로 교육 프로세스 속도를 높일 수 있습니다.
python -m basic.cli --mode train --noload --len_opt --cluster
당신은 여전히 그것들을 생략 할 수 있지만 훈련은 훨씬 느려질 것입니다.
훈련 중에 가끔 평가의 EM 및 F1 점수는 공식 분대 평가 스크립트의 점수와 동일하지 않습니다. 인쇄 된 점수는 공식적이지 않습니다 (우리의 점수 체계는 약간 가혹합니다). 공식 번호를 얻으려면 공식 평가자를 사용하십시오 ( squad 폴더, squad/evaluate-v1.1.py 에 복사). 자세한 내용은 3.test를 참조하십시오.
테스트, 실행 :
python -m basic.cli
교육과 마찬가지로 최적화 플래그를 제공하여 테스트 속도를 높일 수 있습니다 (DEV 데이터의 5 분).
python -m basic.cli --len_opt --cluster
이 명령은 교육 중 가장 최근에 저장된 모델을로드하고 테스트 데이터에 대한 테스트를 시작합니다. 프로세스가 종료 된 후 F1 및 EM 점수를 인쇄하고 JSON 파일 ( $PWD/out/basic/00/answer/test-####.json #### 인쇄 된 점수는 공식적이지 않습니다 (우리의 점수 체계는 약간 가혹합니다). 공식 번호를 얻으려면 공식 평가자 ( squad 폴더에 복사)와 출력 JSON 파일을 사용하십시오.
python squad/evaluate-v1.1.py $HOME/data/squad/dev-v1.1.json out/basic/00/answer/test-####.json
모델을 직접 훈련시키는 대신 분대장 제출에 사용 된 미리 훈련 된 무게를 사용하도록 선택할 수 있습니다. 결과를 재현하려면 Codalab 의이 워크 시트를 참조하십시오. Codalab에 익숙하지 않은 경우, 간단한 단계를 따르십시오 (위의 모든 prereqs를 충족하는 것이 주어지면).
save.zip 다운로드하고 현재 디렉토리에서 압축을 풀습니다.glove.6B.100d.txt Glove Data Folder ( $HOME/data/glove/ )에서 현재 디렉토리로 복사하십시오. basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
이것은 현재 디렉토리의 single.json 에 대한 답을 씁니다. 그런 다음 공식 평가자를 사용하여 EM 및 F1 점수를 얻을 수 있습니다. GPU에서 실행하려면 (~ 5 분) 쉘 파일의 Batch_Size 플래그 값을 더 높은 숫자 (12GB GPU RAM의 경우 60)로 변경하십시오. 4. 마찬가지로, 앙상블 방법을 재현하기 위해 :
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
GPU에서 실행하려면 Forloop에서 '&'를 제거하여 스크립트를 순차적으로 실행하거나 For Loop의 각 실행에 대해 다른 GPU를 지정해야합니다.
이 점수는 공식 평가자 ( squad Folder, squad/evaluate-v1.1.py 에 복사)에서 나온 것입니다. 자세한 내용은 3.test를 참조하십시오. 훈련 중에 나타난 점수는 공식 평가자의 점수보다 낮을 수 있습니다.
| em (%) | F1 (%) | |
|---|---|---|
| 하나의 | 67.7 | 77.3 |
| 앙상블 | 72.6 | 80.7 |
| em (%) | F1 (%) | |
|---|---|---|
| 하나의 | 68.0 | 77.3 |
| 앙상블 | 73.3 | 81.1 |
자세한 내용은 논문을 참조하십시오. 다른 모델과 비교하려면 분대장 리더 보드를 참조하십시오.
우리의 모델은 다중 GPU 교육을 지원합니다. 우리는 Tensorflow 튜토리얼에 설명 된 병렬화 패러다임을 따릅니다. 요컨대, 배치 크기 60 (기본값)을 사용하려면 4GB RAM이있는 3 개의 GPU가있는 경우 배치 크기가 20 인 각 GPU를 초기화하고 CPU의 그라디언트를 결합합니다. 이것은 실행을 통해 쉽게 수행 할 수 있습니다.
python -m basic.cli --mode train --noload --num_gpus 3 --batch_size 20
마찬가지로 테스트 속도를 높일 수 있습니다.
python -m basic.cli --num_gpus 3 --batch_size 20
지금은이 저장소의 demo 브랜치를 참조하십시오.