此存储库提供了我们论文的源代码和数据:QA-GNN:使用语言模型和知识图的推理,以回答(NAACL 2021)。
@InProceedings { yasunaga2021qagnn ,
author = { Michihiro Yasunaga and Hongyu Ren and Antoine Bosselut and Percy Liang and Jure Leskovec } ,
title = { QA-GNN: Reasoning with Language Models and Knowledge Graphs for Question Answering } ,
year = { 2021 } ,
booktitle = { North American Chapter of the Association for Computational Linguistics (NAACL) } ,
}网页:https://snap.stanford.edu/qagnn


运行以下命令来创建CONDA环境(假设CUDA10.1):
conda create -n qagnn python=3.7
source activate qagnn
pip install torch==1.8.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
pip install transformers==3.4.0
pip install nltk spacy==2.1.6
python -m spacy download en
# for torch-geometric
pip install torch-scatter==2.0.7 -f https://pytorch-geometric.com/whl/torch-1.8.0+cu101.html
pip install torch-sparse==0.6.9 -f https://pytorch-geometric.com/whl/torch-1.8.0+cu101.html
pip install torch-geometric==1.7.0 -f https://pytorch-geometric.com/whl/torch-1.8.0+cu101.html我们使用答案数据集( CommonSenseQA , OpenBookQa )和概念网知识图。通过下载所有原始数据
./download_raw_data.sh
通过运行预处理原始数据
python preprocess.py -p <num_processes>
脚本将:
data/csqa/statement/ )中tl; dr(跳过步骤,只需获得预处理数据) 。预处理可能需要很长时间。为了方便起见,您可以通过
./download_preprocessed_data.sh
?新闻(添加MEDQA-USMLE) 。除了使用概念网知识图的常识性质量编号数据集( CommonsenseQA , OpenBookQA )外,我们还添加了一个基于疾病数据库和药品库的生物医学知识图,添加了一个生物医学QA数据集( MEDQA-USMLE )。您可以从[此处]下载所有数据。将其解压缩,然后将medqa_usmle和ddb文件夹放在data/目录中。尽管这些数据已经进行了预处理,但我们还提供了我们在utils_biomed/中使用的预处理脚本。
结果文件结构看起来像:
.
├── README.md
├── data/
├── cpnet/ (prerocessed ConceptNet)
├── csqa/
├── train_rand_split.jsonl
├── dev_rand_split.jsonl
├── test_rand_split_no_answers.jsonl
├── statement/ (converted statements)
├── grounded/ (grounded entities)
├── graphs/ (extracted subgraphs)
├── ...
├── obqa/
├── medqa_usmle/
└── ddb/
对于CommonSenseqa,运行
./run_qagnn__csqa.sh
对于OpenBookQa,运行
./run_qagnn__obqa.sh
对于Medqa-usmle,Run
./run_qagnn__medqa_usmle.sh
正如这些脚本所配置的,模型需要两种类型的输入文件
--{train,dev,test}_statements :JSONL格式的预处理问题语句。这主要由load_input_tensors函数在utils/data_utils.py中加载。--{train,dev,test}_adj :每个问题提取的kg子图的信息。这主要由load_sparse_adj_data_with_contextnode函数在utils/data_utils.py中加载。注意:我们发现openbookQa的培训是不稳定的(例如,使用不同的种子,变压器 /火炬几何库等不同版本时,最佳开发精度会有所不同),可能是因为数据集很小。我们建议尝试不同的种子。稳定培训的另一种潜在方法是使用下面提供的成功检查点之一初始化模型,例如添加参数--load_model_path obqa_model.pt 。
对于CommonSenseqa,运行
./eval_qagnn__csqa.sh
同样,对于其他数据集(OpenBookQA,MEDQA-USMLE),运行./eval_qagnn__obqa.sh和./eval_qagnn__medqa_usmle.sh 。您可以在下一节下载训练有素的模型检查点。
CONSENSENSESQA
| 训练有素的模型 | 内部Dev Acc。 | 内部测试ACC。 |
|---|---|---|
| Roberta-Large + QA-GNN [链接] | 0.7707 | 0.7405 |
OpenBookQa
| 训练有素的模型 | DEV ACC。 | 测试ACC。 |
|---|---|---|
| Roberta-Large + QA-GNN [链接] | 0.6960 | 0.6900 |
MEDQA-USMLE
| 训练有素的模型 | DEV ACC。 | 测试ACC。 |
|---|---|---|
| Sapbert-base + QA-GNN [链接] | 0.3789 | 0.3810 |
注意:对型号进行了训练和测试,并用拥抱面变压器== 3.4.0进行了测试。
{train,dev,test}.statement.jsonl in .jsonl格式(请参阅data/csqa/statement/train.statement.jsonl )data/{yourdataset}/以存储.jsonl文件中创建一个目录preprocess.py并为数据执行子图提取utils/parser_utils.py以支持您自己的数据集此存储库是基于以下工作的:
Scalable Multi-Hop Relational Reasoning for Knowledge-Aware Question Answering. Yanlin Feng*, Xinyue Chen*, Bill Yuchen Lin, Peifeng Wang, Jun Yan and Xiang Ren. EMNLP 2020.
https://github.com/INK-USC/MHGRN
非常感谢作者和开发人员!