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分支。