Este repositorio proporciona el código fuente y los datos de nuestro artículo GreaseLM : Graph REASoning Enhanced Language Models for Question Answering (ICLR 2022 Spotlight). Si utiliza alguno de nuestros códigos, datos procesados o modelos previamente entrenados, cite:
@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 }
}
Arquitectura del modelo GreaseLM" alt="" style="max-width: 100%;">
Ejecute los siguientes comandos para crear un entorno conda (asumiendo 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
El preprocesamiento de los datos usted mismo puede llevar mucho tiempo, por lo que si desea descargar directamente los datos preprocesados, pase a la siguiente subsección.
Descargue los datos sin procesar de ConceptNet, CommonsenseQA y OpenBookQA utilizando
./download_raw_data.sh
Puede preprocesar estos datos sin procesar ejecutando
CUDA_VISIBLE_DEVICES=0 python preprocess.py -p <num_processes>
Puede especificar la GPU que desea usar al comienzo del comando CUDA_VISIBLE_DEVICES=...
. El guión:
data/csqa/statement/
). El script para descargar y preprocesar los datos de MedQA-USMLE y el gráfico de conocimiento biomédico basado en la base de datos de enfermedades y el DrugBank se proporciona en utils_biomed/
.
Para su comodidad, si no desea preprocesar los datos usted mismo, puede descargar todos los datos preprocesados aquí. Descárguelos en el directorio de nivel superior de este repositorio y descomprímalos. Mueva las carpetas medqa_usmle
y ddb
al directorio data/
.
La estructura de archivos resultante debería verse así:
.
├── 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/
Para entrenar GreaseLM en CommonsenseQA, ejecute
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh csqa --data_dir data/
Puede especificar hasta 2 GPU que desee utilizar al comienzo del comando CUDA_VISIBLE_DEVICES=...
.
De manera similar, para entrenar GreaseLM en OpenbookQA, ejecute
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh obqa --data_dir data/
Para entrenar GreaseLM en MedQA-USMLE, ejecute
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM __medqa_usmle.sh
Puede descargar un modelo GreaseLM previamente entrenado en CommonsenseQA aquí, que logra una certificación IH-dev. de 79.0
y una prueba IH según. de 74.0
.
También puede descargar un modelo GreaseLM previamente entrenado en OpenbookQA aquí, que logra una prueba según. de 84.8
.
También puede descargar un modelo GreaseLM previamente entrenado en MedQA-USMLE aquí, que logra una prueba según. de 38.5
.
Para evaluar un punto de control del modelo GreaseLM previamente entrenado en CommonsenseQA, ejecute
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh csqa --data_dir data/ --load_model_path /path/to/checkpoint
Nuevamente, puede especificar hasta 2 GPU que desea usar al comienzo del comando CUDA_VISIBLE_DEVICES=...
.
De manera similar, para evaluar un punto de control del modelo GreaseLM previamente entrenado en OpenbookQA, ejecute
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh obqa --data_dir data/ --load_model_path /path/to/checkpoint
Para evaluar un punto de control del modelo GreaseLM previamente entrenado en MedQA-USMLE, ejecute
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
en formato .jsonl (consulte data/csqa/statement/train.statement.jsonl
).data/{yourdataset}/
para almacenar los archivos .jsonlpreprocess.py
y realice la extracción de subgrafos para sus datosutils/parser_utils.py
para admitir su propio conjunto de datos Este repositorio se basa en el siguiente trabajo:
QA-GNN: Question Answering using Language Models and Knowledge Graphs
https://github.com/michiyasunaga/qagnn
¡Muchas gracias a los autores y desarrolladores!