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


เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างสภาพแวดล้อม 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เราใช้ชุดข้อมูลการตอบคำถาม ( PommonsenseQa , OpenBookqa ) และกราฟความรู้แนวคิด ดาวน์โหลดข้อมูลดิบทั้งหมดโดย
./download_raw_data.sh
ประมวลผลข้อมูลดิบล่วงหน้าด้วยการรัน
python preprocess.py -p <num_processes>
สคริปต์จะ:
data/csqa/statement/ )TL; DR (ข้ามขั้นตอนด้านบนและรับข้อมูลที่ประมวลผลล่วงหน้า) การประมวลผลล่วงหน้าอาจใช้เวลานาน เพื่อความสะดวกของคุณคุณสามารถดาวน์โหลดข้อมูลที่ประมวลผลทั้งหมดได้โดย
./download_preprocessed_data.sh
- ข่าว (เพิ่ม medqa-usmle) นอกเหนือจากชุดข้อมูล QA แบบทั่วไป ( PommonsenseQa , OpenBookQA ) ด้วยกราฟความรู้แนวคิดเราได้เพิ่มชุดข้อมูล QA ชีวการแพทย์ ( Medqa-USMLE ) ด้วยกราฟความรู้ด้านชีวการแพทย์บนฐานข้อมูลโรคและ DrugBank คุณสามารถดาวน์โหลดข้อมูลทั้งหมดสำหรับสิ่งนี้ได้จาก [ที่นี่] เปิดเครื่องซิปและใส่โฟลเดอร์ 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/
สำหรับ pommonsenseqa วิ่ง
./run_qagnn__csqa.sh
สำหรับ OpenBookqa, Run
./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 นั้นไม่เสถียร (เช่นความแม่นยำที่ดีที่สุดของ DEV นั้นแตกต่างกันไปเมื่อใช้เมล็ดพันธุ์ที่แตกต่างกันรุ่นที่แตกต่างกันของ Transformers / Torch-Geometric Libraries ฯลฯ ) อาจเป็นเพราะชุดข้อมูลมีขนาดเล็ก เราขอแนะนำให้ลองใช้เมล็ดพันธุ์ที่แตกต่างกัน อีกวิธีที่เป็นไปได้ในการฝึกอบรมเสถียรคือการเริ่มต้นโมเดลด้วยหนึ่งในจุดตรวจที่ประสบความสำเร็จด้านล่างเช่นการเพิ่มอาร์กิวเมนต์ --load_model_path obqa_model.pt
สำหรับ pommonsenseqa วิ่ง
./eval_qagnn__csqa.sh
ในทำนองเดียวกันสำหรับชุดข้อมูลอื่น ๆ (OpenBookQa, Medqa-USMLE), Run ./eval_qagnn__obqa.sh และ ./eval_qagnn__medqa_usmle.sh คุณสามารถดาวน์โหลดจุดตรวจสอบรุ่นที่ผ่านการฝึกอบรมในส่วนถัดไป
pomonsenseqa
| รูปแบบที่ผ่านการฝึกอบรม | dev in-house 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 [ลิงก์] | 0.3789 | 0.3810 |
หมายเหตุ : แบบจำลองได้รับการฝึกฝนและทดสอบด้วย HuggingFace Transformers == 3.4.0
{train,dev,test}.statement.jsonl ในรูปแบบ. jsonl (ดู data/csqa/statement/train.statement.jsonl )data/{yourdataset}/ เพื่อจัดเก็บไฟล์. jsonlpreprocess.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
ขอบคุณมากสำหรับผู้เขียนและนักพัฒนา!