이 repo는 본 논문의 소스 코드 및 데이터를 제공합니다. 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


다음 명령을 실행하여 콘다 환경을 만듭니다 (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 ) 및 ConceptNet Knowledge 그래프를 사용합니다. 모든 원시 데이터를 다운로드하십시오
./download_raw_data.sh
실행하여 원시 데이터를 전처리하십시오
python preprocess.py -p <num_processes>
스크립트는 다음과 같습니다.
data/csqa/statement/ 에 저장tl; dr (단계를 건너 뛰고 전처리 데이터를 얻습니다) . 전처리가 오래 걸릴 수 있습니다. 편의를 위해 처리 된 모든 데이터를
./download_preprocessed_data.sh
? 뉴스 (Medqa-Usmle 추가) . Commonsense QA 데이터 세트 ( CommonsenseQA , OpenBookQA ) 외에도 ConceptNet Knowledge Graph가있는 우리는 질병 데이터베이스 및 약물 뱅크를 기반으로 생체 의학 지식 그래프와 함께 생물 의학 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_qagnn__medqa_usmle.sh
이 스크립트에서 구성된대로 모델에는 두 가지 유형의 입력 파일이 필요합니다.
--{train,dev,test}_statements : JSONL 형식의 전처리 질문 문. 이것은 주로 utils/data_utils.py 의 load_input_tensors 함수에 의해로드됩니다.--{train,dev,test}_adj : 각 질문에 대해 추출 된 KG 하위 그래프의 정보. 이것은 주로 utils/data_utils.py 의 load_sparse_adj_data_with_contextnode 함수에 의해로드됩니다. 참고 : OpenBookQA에 대한 교육은 불안정하다 (예 : 다른 종자, 다른 버전의 변압기 / 토치-지오메트리 라이브러리 등을 사용할 때 가장 적합한 Dev 정확도는 다양합니다). 우리는 다른 씨앗을 시험해 보는 것이 좋습니다. 교육을 안정화시키는 또 다른 잠재적 인 방법은 인수 --load_model_path obqa_model.pt 추가하여 아래에 제공된 성공적인 검문소 중 하나로 모델을 초기화하는 것입니다.
CommonsenseQa의 경우 달리기
./eval_qagnn__csqa.sh
마찬가지로, 다른 데이터 세트 (OpenBookqa, Medqa-usmle)의 경우 ./eval_qagnn__obqa.sh 및 ./eval_qagnn__medqa_usmle.sh 실행하십시오. 다음 섹션에서 숙련 된 모델 체크 포인트를 다운로드 할 수 있습니다.
CommonsenseQa
| 훈련 된 모델 | 사내 Dev Acc. | 사내 테스트 ACC. |
|---|---|---|
| Roberta-Large + QA-GNN [Link] | 0.7707 | 0.7405 |
OpenBookqa
| 훈련 된 모델 | Dev Acc. | 테스트 ACC. |
|---|---|---|
| Roberta-Large + QA-GNN [Link] | 0.6960 | 0.6900 |
Medqa-usmle
| 훈련 된 모델 | Dev Acc. | 테스트 ACC. |
|---|---|---|
| Sapbert-Base + QA-GNN [Link] | 0.3789 | 0.3810 |
참고 : 모델은 Huggingface Transformers == 3.4.0으로 훈련 및 테스트되었습니다.
{train,dev,test}.statement.jsonl in .jsonl 형식으로 변환합니다 ( data/csqa/statement/train.statement.jsonl 참조)data/{yourdataset}/ 에서 디렉토리 생성preprocess.py 수정하고 데이터에 대한 서브 그래프 추출을 수행하십시오utils/parser_utils.py 수정하십시오 이 repo는 다음 작업에 기반을두고 있습니다.
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
저자와 개발자에게 감사드립니다!