Этот репо содержит исходный код и данные нашей статьи: 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Мы используем наборы данных для ответов на вопрос ( ComonsenseQA , OpenBookqa ) и график знаний ConceptNet. Загрузите все необработанные данные
./download_raw_data.sh
Предварительно обрабатывать необработанные данные, запустив
python preprocess.py -p <num_processes>
Сценарий будет:
data/csqa/statement/ )TL; DR (пропустите выше шаги и просто получите предварительные данные) . Предварительная обработка может занять много времени. Для вашего удобства вы можете скачать все обработанные данные
./download_preprocessed_data.sh
? Новости (добавьте Medqa-USMLE) . Помимо наборов данных QA Commonsense ( CommonsenseQA , OpenBookQA ) с графом знаний ConceptNet, мы добавили биомедицинский набор данных 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/
Для здравого средства, беги
./run_qagnn__csqa.sh
Для OpenBookqa, запустите
./run_qagnn__obqa.sh
Для medqa-usmle, беги
./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 .
Для здравого средства, беги
./eval_qagnn__csqa.sh
Точно так же для других наборов данных (OpenBookqa, MedQA-USMLE), RUN ./eval_qagnn__obqa.sh и ./eval_qagnn__medqa_usmle.sh . Вы можете скачать обученные контрольные точки модели в следующем разделе.
Commonsenseqa
| Обученная модель | Внутренний Dev Acc. | Внутренний тест Acc. |
|---|---|---|
| Roberta-large + Qa-gnn [ссылка] | 0,7707 | 0,7405 |
OpenBookqa
| Обученная модель | Dev Acc. | Тестовый акк. |
|---|---|---|
| Roberta-large + Qa-gnn [ссылка] | 0,6960 | 0,6900 |
Medqa-Usmle
| Обученная модель | Dev Acc. | Тестовый акк. |
|---|---|---|
| Sapbert-Base + Qa-gnn [ссылка] | 0,3789 | 0,3810 |
Примечание . Модели были обучены и протестированы с помощью трансформаторов HuggingFace == 3.4.0.
{train,dev,test}.statement.jsonl data/csqa/statement/train.statement.jsonl .data/{yourdataset}/ для хранения файлов .jsonlpreprocess.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
Большое спасибо авторам и разработчикам!