download.sh ) 首先,準備數據。 Donwload Squad Data和Glove and NLTK語料庫(〜850 MB,將文件下載到$HOME/data ):
chmod +x download.sh; ./download.sh
其次,預處理Stanford QA數據集(以及手套向量),並將其保存在$PWD/data/squad (〜5分鐘)中:
python -m squad.prepro
該模型的參數約為250萬。該模型接受了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,請按照以下簡單步驟(鑑於您遇到了上面的所有前提):
save.zip ,然後在當前目錄中解壓縮。$HOME/data/glove/ )複製glove.6B.100d.txt到當前目錄。 basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
這在當前目錄中寫下了single.json的答案。然後,您可以使用官方評估者獲得EM和F1分數。如果您想在GPU上運行(〜5分鐘),請將Shell文件中的batch_size標誌的值更改為更高的數字(12GB GPU RAM的60)。 4。同樣,重現集合方法:
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
如果您想在GPU上運行,則應通過在Forloop中刪除'&”來順序運行腳本,否則您需要為每次for循環的每次運行指定不同的GPU。
請注意,這些分數來自官方評估者(在squad文件夾, 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個批次大小(默認),但是如果您的3 GPU和4GB RAM,則將每個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分支。