Repo ini menyediakan kode sumber & data dari makalah kami: QA-GNN: Penalaran dengan model bahasa dan grafik pengetahuan untuk menjawab pertanyaan (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) } ,
}Webpage: https://snap.stanford.edu/qagnn


Jalankan perintah berikut untuk membuat lingkungan Conda (dengan asumsi 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.htmlKami menggunakan Dataset Penjawab Pertanyaan ( CommonsenseQA , OpenBookQA ) dan Grafik Pengetahuan ConceptNet. Unduh semua data mentah oleh
./download_raw_data.sh
Preprocess data mentah dengan berjalan
python preprocess.py -p <num_processes>
Skrip akan:
data/csqa/statement/ )Tl; dr (lewati langkah -langkah di atas dan hanya mendapatkan data preprosesed) . Preprocessing mungkin memakan waktu lama. Untuk kenyamanan Anda, Anda dapat mengunduh semua data yang diproses oleh
./download_preprocessed_data.sh
? Berita (tambahkan medqa-usmle) . Selain kumpulan data QA ( CommonsenseQA , OpenBookQA ) dengan grafik pengetahuan ConceptNet, kami menambahkan dataset QA biomedis ( MEDQA-USMLE ) dengan grafik pengetahuan biomedis berdasarkan database penyakit dan bank obat. Anda dapat mengunduh semua data untuk ini dari [di sini] . Buka ritsleting dan masukkan folder medqa_usmle dan ddb di dalam data/ direktori. Meskipun data ini sudah preprosesed, kami juga menyediakan skrip preprocessing yang kami gunakan di utils_biomed/ .
Struktur file yang dihasilkan akan terlihat seperti:
.
├── 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/
Untuk Commonsenseqa, jalankan
./run_qagnn__csqa.sh
Untuk OpenBookQA, jalankan
./run_qagnn__obqa.sh
Untuk Medqa-Usmle, jalankan
./run_qagnn__medqa_usmle.sh
Seperti yang dikonfigurasi dalam skrip ini, model membutuhkan dua jenis file input
--{train,dev,test}_statements : pernyataan pertanyaan preprocessed dalam format JSONL. Ini terutama dimuat oleh fungsi load_input_tensors di utils/data_utils.py .--{train,dev,test}_adj : Informasi subgraph kg yang diekstraksi untuk setiap pertanyaan. Ini terutama dimuat oleh Fungsi load_sparse_adj_data_with_contextnode di utils/data_utils.py . Catatan : Kami menemukan bahwa pelatihan untuk OpenBookQA tidak stabil (misalnya akurasi dev terbaik bervariasi saat menggunakan benih yang berbeda, versi berbeda dari pustaka transformer / obor-geometri, dll.), Kemungkinan karena datasetnya kecil. Kami sarankan mencoba benih yang berbeda. Cara potensial lain untuk menstabilkan pelatihan adalah dengan menginisialisasi model dengan salah satu pos pemeriksaan yang disediakan di bawah ini, misalnya dengan menambahkan argumen --load_model_path obqa_model.pt .
Untuk Commonsenseqa, jalankan
./eval_qagnn__csqa.sh
Demikian pula, untuk kumpulan data lain (OpenBookQA, Medqa-Usmle), run ./eval_qagnn__obqa.sh dan ./eval_qagnn__medqa_usmle.sh . Anda dapat mengunduh pos pemeriksaan model terlatih di bagian berikutnya.
Commonsenseqa
| Model terlatih | In-house dev acc. | Uji in-house Acc. |
|---|---|---|
| Roberta-Large + Qa-gnn [tautan] | 0.7707 | 0.7405 |
OpenBookQA
| Model terlatih | Dev Acc. | Tes Acc. |
|---|---|---|
| Roberta-Large + Qa-gnn [tautan] | 0.6960 | 0.6900 |
Medqa-usmle
| Model terlatih | Dev Acc. | Tes Acc. |
|---|---|---|
| Sapbert-base + qa-gnn [tautan] | 0.3789 | 0.3810 |
CATATAN : Model dilatih dan diuji dengan transformator huggingface == 3.4.0.
{train,dev,test}.statement.jsonl dalam format .jsonl (lihat data/csqa/statement/train.statement.jsonl )data/{yourdataset}/ untuk menyimpan file .jsonlpreprocess.py dan lakukan ekstraksi subgraph untuk data Andautils/parser_utils.py untuk mendukung dataset Anda sendiri Repo ini dibangun di atas pekerjaan berikut:
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
Terima kasih banyak kepada penulis dan pengembang!