В этом репозитории представлены исходный код и данные нашей статьи GreaseLM : Graph REASoning Enhanced Language Models для ответов на вопросы (в центре внимания ICLR 2022). Если вы используете какой-либо наш код, обработанные данные или предварительно обученные модели, укажите:
@inproceedings { zhang2021 GreaseLM ,
title = { GreaseLM : Graph REASoning Enhanced Language Models } ,
author = { Zhang, Xikun and Bosselut, Antoine and Yasunaga, Michihiro and Ren, Hongyu and Liang, Percy and Manning, Christopher D and Leskovec, Jure } ,
booktitle = { International Conference on Learning Representations } ,
year = { 2021 }
}
Архитектура модели GreaseLM" alt="" style="max-width: 100%;">
Выполните следующие команды, чтобы создать среду conda (при условии, что CUDA 10.1):
conda create -y -n GreaseLM python=3.8
conda activate GreaseLM
pip install numpy==1.18.3 tqdm
pip install torch==1.8.0+cu101 torchvision -f https://download.pytorch.org/whl/torch_stable.html
pip install transformers==3.4.0 nltk spacy
pip install wandb
conda install -y -c conda-forge tensorboardx
conda install -y -c conda-forge tensorboard
# 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-cluster==1.5.9 -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-spline-conv==1.2.1 -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
Предварительная обработка данных самостоятельно может занять много времени, поэтому, если вы хотите напрямую загрузить предварительно обработанные данные, перейдите к следующему подразделу.
Загрузите необработанные данные ConceptNet, CommonsenseQA, OpenBookQA, используя
./download_raw_data.sh
Вы можете предварительно обработать эти необработанные данные, запустив
CUDA_VISIBLE_DEVICES=0 python preprocess.py -p <num_processes>
Вы можете указать графический процессор, который хотите использовать, в начале команды CUDA_VISIBLE_DEVICES=...
. Скрипт будет:
data/csqa/statement/
). Сценарий для загрузки и предварительной обработки данных MedQA-USMLE и графика биомедицинских знаний на основе базы данных заболеваний и банка лекарств представлен в utils_biomed/
.
Для вашего удобства, если вы не хотите предварительно обрабатывать данные самостоятельно, вы можете скачать все предварительно обработанные данные здесь. Загрузите их в каталог верхнего уровня этого репозитория и разархивируйте. Переместите папки medqa_usmle
и ddb
в каталог data/
.
Результирующая структура файла должна выглядеть следующим образом:
.
├── 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/
Чтобы обучить GreaseLM на CommonsenseQA, запустите
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh csqa --data_dir data/
Вы можете указать до двух графических процессоров, которые хотите использовать, в начале команды CUDA_VISIBLE_DEVICES=...
.
Аналогично, чтобы обучить GreaseLM на OpenbookQA, запустите
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh obqa --data_dir data/
Чтобы обучить GreaseLM на MedQA-USMLE, запустите
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM __medqa_usmle.sh
Вы можете скачать предварительно обученную модель GreaseLM на CommonsenseQA здесь, которая соответствует требованиям IH-dev. 79.0
и IH-тест в соотв. 74.0
.
Вы также можете скачать предварительно обученную модель GreaseLM на OpenbookQA здесь, которая соответствует требованиям теста. 84.8
.
Вы также можете скачать предварительно обученную модель GreaseLM на MedQA-USMLE здесь, которая соответствует тесту. 38.5
.
Чтобы оценить предварительно обученную контрольную точку модели GreaseLM в CommonsenseQA, запустите
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh csqa --data_dir data/ --load_model_path /path/to/checkpoint
Опять же, вы можете указать до двух графических процессоров, которые хотите использовать, в начале команды CUDA_VISIBLE_DEVICES=...
.
Аналогично, чтобы оценить предварительно обученную контрольную точку модели GreaseLM в OpenbookQA, запустите
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh obqa --data_dir data/ --load_model_path /path/to/checkpoint
Чтобы оценить предварительно обученную контрольную точку модели GreaseLM на MedQA-USMLE, запустите
INHERIT_BERT=1 CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh medqa_usmle --data_dir data/ --load_model_path /path/to/checkpoint
{train,dev,test}.statement.jsonl
в формате .jsonl (см. data/csqa/statement/train.statement.jsonl
).data/{yourdataset}/
для хранения файлов .jsonl.preprocess.py
и выполните извлечение подграфов для ваших данных.utils/parser_utils.py
для поддержки вашего собственного набора данных. Это репо построено на основе следующей работы:
QA-GNN: Question Answering using Language Models and Knowledge Graphs
https://github.com/michiyasunaga/qagnn
Огромное спасибо авторам и разработчикам!