diff --git a/PaddleNLP/machine_reading_comprehension/README.md b/PaddleNLP/machine_reading_comprehension/README.md index 33e2aa08871ad1c7a642d5e915ed3e76d7280db1..228291d47c9a350c5f515f60e46c40ba4d1be507 100644 --- a/PaddleNLP/machine_reading_comprehension/README.md +++ b/PaddleNLP/machine_reading_comprehension/README.md @@ -1,4 +1,4 @@ -DuReader是一个端到端的机器阅读理解神经网络模型,能够在给定文档和问题的情况,定位文档中问题的答案。我们首先利用双向注意力网络获得文档和问题的相同向量空间的表示,然后使用`point network` 定位文档中答案的位置。实验显示,我们的模型能够获得在Dureader数据集上SOTA的结果。 +DuReader是一个端到端的机器阅读理解神经网络模型,能够在给定文档和问题的情况下,定位文档中问题的答案。我们首先利用双向注意力网络获得文档和问题的相同向量空间的表示,然后使用`point network` 定位文档中答案的位置。实验显示,我们的模型能够获得在Dureader数据集上SOTA的结果。 # 算法介绍 DuReader模型主要实现了论文[BiDAF](https://arxiv.org/abs/1611.01603), [Match-LSTM](https://arxiv.org/abs/1608.07905)中的模型结构。 @@ -32,23 +32,27 @@ cd utils && bash download_thirdparty.sh ### 段落抽取 在段落抽取阶段,主要是使用文档相关性score对文档内容进行优化, 抽取的结果将会放到`data/extracted/`目录下。如果你用demo数据测试,可以跳过这一步。如果你用dureader数据,需要指定抽取的数据目录,命令如下: ``` -sh run.sh --para_extraction --trainset data/preprocessed/trainset/zhidao.train.json data/preprocessed/trainset/search.train.json --devset data/preprocessed/devset/zhidao.dev.json data/preprocessed/devset/search.dev.json --testset data/preprocessed/testset/zhidao.test.json data/preprocessed/testset/search.test.json +bash run.sh --para_extraction --trainset data/preprocessed/trainset/zhidao.train.json data/preprocessed/trainset/search.train.json --devset data/preprocessed/devset/zhidao.dev.json data/preprocessed/devset/search.dev.json --testset data/preprocessed/testset/zhidao.test.json data/preprocessed/testset/search.test.json ``` 其中参数 `trainset`/`devset`/`testset`分别对应训练、验证和测试数据集(下同)。 ### 词典准备 在训练模型之前,我们应该确保数据已经准备好。在准备阶段,通过全部数据文件生成一个词典,这个词典会在后续的训练和预测中用到。你可以通过如下命令生成词典: ``` -run.sh --prepare +bash run.sh --prepare ``` 上面的命令默认使用demo数据,如果想使用dureader数据集,应该按照如下方式指定: ``` -run.sh --prepare --trainset data/extracted/trainset/zhidao.train.json data/extracted/trainset/search.train.json --devset data/extracted/devset/zhidao.dev.json data/extracted/devset/search.dev.json --testset data/extracted/testset/zhidao.test.json data/extracted/testset/search.test.json +bash run.sh --prepare --trainset data/extracted/trainset/zhidao.train.json data/extracted/trainset/search.train.json --devset data/extracted/devset/zhidao.dev.json data/extracted/devset/search.dev.json --testset data/extracted/testset/zhidao.test.json data/extracted/testset/search.test.json ``` 其中参数 `trainset`/`devset`/`testset`分别对应训练、验证和测试数据集。 ### 模型训练 训练模型的启动命令如下: ``` -sh run.sh --train +bash run.sh --train +``` +上面的命令默认使用demo数据,如果想使用dureader数据集,应该按照如下方式指定: +``` +bash run.sh --train --trainset data/extracted/trainset/zhidao.train.json data/extracted/trainset/search.train.json --devset data/extracted/devset/zhidao.dev.json data/extracted/devset/search.dev.json --testset data/extracted/testset/zhidao.test.json data/extracted/testset/search.test.json ``` 可以通过设置超参数更改训练的配置,比如通过`--learning_rate NUM`更改学习率,通过`--pass_num NUM`更改训练的轮数 训练的过程中,每隔一定迭代周期,会测试在验证集上的性能指标, 通过`--dev_interval NUM`设置周期大小 @@ -56,21 +60,30 @@ sh run.sh --train ### 模型评测 在模型训练结束后,如果想使用训练好的模型进行评测,获得度量指标,可以使用如下命令: ``` -sh run.sh --evaluate --load_dir data/models/1 +bash run.sh --evaluate --load_dir data/models/1 ``` 其中,`--load_dir data/models/1`是模型的checkpoint目录 +上面的命令默认使用demo数据,如果想使用dureader数据集,应该按照如下方式指定: +``` +bash run.sh --evaluate --load_dir data/models/1 --devset data/extracted/devset/zhidao.dev.json data/extracted/devset/search.dev.json --testset data/extracted/testset/zhidao.test.json data/extracted/testset/search.test.json +``` + ### 预测 使用训练好的模型,对问答文档数据直接预测结果,获得答案,可以使用如下命令: ``` -sh run.sh --predict --load_dir data/models/1 --testset data/extracted/testset/search.dev.json +bash run.sh --predict --load_dir data/models/1 +``` +上面的命令默认使用demo数据,如果想使用dureader数据集,应该按照如下方式指定: +``` +bash run.sh --predict --load_dir data/models/1 --testset data/extracted/testset/search.test.json data/extracted/testset/zhidao.test.json ``` 其中`--testset`指定了预测用的数据集,生成的问题答案默认会放到`data/results/` 目录,你可以通过参数`--result_dir DIR_PATH`更改配置 ### 实验结果 -验证集 ROUGE-L:47.65,测试集 ROUGE-L:54.58。 +验证集 ROUGE-L:47.65。 -这是在P40上,使用4卡GPU,batch size=4*32的训练结果,如果使用单卡,指标可能会略有降低,但在验证集上的ROUGE-L也不小于47。 +这是在P40上,使用4卡GPU,batch size=4*32的训练5个epoch(约30个小时)的结果,如果使用单卡,指标可能会略有降低,但在验证集上的ROUGE-L也不小于47。 ## 参考文献 [Machine Comprehension Using Match-LSTM and Answer Pointer](https://arxiv.org/abs/1608.07905)