Ce référentiel fournit le code source et les données de notre article GreaseLM : Graph REASoning Enhanced Language Models for Question Answering (projecteur ICLR 2022). Si vous utilisez l'un de nos codes, données traitées ou modèles pré-entraînés, veuillez citer :
@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 }
}
Architecture du modèle GreaseLM" alt="" style="max-width : 100%;">
Exécutez les commandes suivantes pour créer un environnement conda (en supposant que 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
Le prétraitement des données vous-même peut prendre du temps, donc si vous souhaitez télécharger directement les données prétraitées, veuillez passer à la sous-section suivante.
Téléchargez les données brutes ConceptNet, CommonsenseQA, OpenBookQA en utilisant
./download_raw_data.sh
Vous pouvez prétraiter ces données brutes en exécutant
CUDA_VISIBLE_DEVICES=0 python preprocess.py -p <num_processes>
Vous pouvez spécifier le GPU que vous souhaitez utiliser au début de la commande CUDA_VISIBLE_DEVICES=...
. Le script va :
data/csqa/statement/
) Le script permettant de télécharger et de prétraiter les données MedQA-USMLE et le graphique des connaissances biomédicales basé sur la base de données sur les maladies et la DrugBank est fourni dans utils_biomed/
.
Pour votre commodité, si vous ne souhaitez pas prétraiter les données vous-même, vous pouvez télécharger toutes les données prétraitées ici. Téléchargez-les dans le répertoire de niveau supérieur de ce dépôt et décompressez-les. Déplacez les dossiers medqa_usmle
et ddb
dans le répertoire data/
.
La structure du fichier résultant devrait ressembler à ceci :
.
├── 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/
Pour entraîner GreaseLM sur CommonsenseQA, exécutez
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh csqa --data_dir data/
Vous pouvez spécifier jusqu'à 2 GPU que vous souhaitez utiliser au début de la commande CUDA_VISIBLE_DEVICES=...
.
De même, pour entraîner GreaseLM sur OpenbookQA, exécutez
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh obqa --data_dir data/
Pour entraîner GreaseLM sur MedQA-USMLE, exécutez
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM __medqa_usmle.sh
Vous pouvez télécharger ici un modèle GreaseLM pré-entraîné sur CommonsenseQA, qui obtient un acc. IH-dev. de 79.0
et un test IH selon. de 74.0
.
Vous pouvez également télécharger ici un modèle GreaseLM pré-entraîné sur OpenbookQA, qui réalise un test selon. de 84.8
.
Vous pouvez également télécharger ici un modèle GreaseLM pré-entraîné sur MedQA-USMLE, qui réalise un test selon. de 38.5
.
Pour évaluer un point de contrôle de modèle GreaseLM pré-entraîné sur CommonsenseQA, exécutez
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh csqa --data_dir data/ --load_model_path /path/to/checkpoint
Encore une fois, vous pouvez spécifier jusqu'à 2 GPU que vous souhaitez utiliser au début de la commande CUDA_VISIBLE_DEVICES=...
.
De même, pour évaluer un point de contrôle de modèle GreaseLM pré-entraîné sur OpenbookQA, exécutez
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh obqa --data_dir data/ --load_model_path /path/to/checkpoint
Pour évaluer un point de contrôle de modèle GreaseLM pré-entraîné sur MedQA-USMLE, exécutez
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
au format .jsonl (voir data/csqa/statement/train.statement.jsonl
)data/{yourdataset}/
pour stocker les fichiers .jsonlpreprocess.py
et effectuez une extraction de sous-graphe pour vos donnéesutils/parser_utils.py
pour prendre en charge votre propre ensemble de données Ce dépôt est construit sur les travaux suivants :
QA-GNN: Question Answering using Language Models and Knowledge Graphs
https://github.com/michiyasunaga/qagnn
Un grand merci aux auteurs et développeurs !