此存儲庫提供了我們論文的源代碼和數據: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
非常感謝作者和開發人員!