Este repositório fornece o código-fonte e os dados de nosso artigo GreaseLM : Graph REASoning Enhanced Language Models for Question Answering (destaque ICLR 2022). Se você usar algum de nossos códigos, dados processados ou modelos pré-treinados, 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 }
}
Arquitetura do modelo GreaseLM" alt="" style="max-width: 100%;">
Execute os seguintes comandos para criar um ambiente conda (assumindo 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
O pré-processamento dos dados por conta própria pode demorar muito, portanto, se você quiser baixar diretamente os dados pré-processados, vá para a próxima subseção.
Baixe os dados brutos do ConceptNet, CommonsenseQA, OpenBookQA usando
./download_raw_data.sh
Você pode pré-processar esses dados brutos executando
CUDA_VISIBLE_DEVICES=0 python preprocess.py -p <num_processes>
Você pode especificar a GPU que deseja usar no início do comando CUDA_VISIBLE_DEVICES=...
. O roteiro irá:
data/csqa/statement/
) O script para baixar e pré-processar os dados do MedQA-USMLE e o gráfico de conhecimento biomédico baseado no Disease Database e no DrugBank é fornecido em utils_biomed/
.
Para sua conveniência, se não quiser pré-processar os dados sozinho, você pode baixar todos os dados pré-processados aqui. Baixe-os no diretório de nível superior deste repositório e descompacte-os. Mova as pastas medqa_usmle
e ddb
para o diretório data/
.
A estrutura de arquivo resultante deve ficar assim:
.
├── 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 treinar GreaseLM no CommonsenseQA, execute
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh csqa --data_dir data/
Você pode especificar até 2 GPUs que deseja usar no início do comando CUDA_VISIBLE_DEVICES=...
.
Da mesma forma, para treinar GreaseLM no OpenbookQA, execute
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh obqa --data_dir data/
Para treinar GreaseLM no MedQA-USMLE, execute
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM __medqa_usmle.sh
Você pode baixar um modelo GreaseLM pré-treinado no CommonsenseQA aqui, que atinge uma conta IH-dev. de 79.0
e um teste IH de acordo. de 74.0
.
Você também pode baixar um modelo GreaseLM pré-treinado no OpenbookQA aqui, que atinge uma conta de teste. de 84.8
.
Você também pode baixar um modelo GreaseLM pré-treinado no MedQA-USMLE aqui, que atinge uma conta de teste. de 38.5
.
Para avaliar um ponto de verificação do modelo GreaseLM pré-treinado no CommonsenseQA, execute
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh csqa --data_dir data/ --load_model_path /path/to/checkpoint
Novamente, você pode especificar até 2 GPUs que deseja usar no início do comando CUDA_VISIBLE_DEVICES=...
.
Da mesma forma, para avaliar um ponto de verificação do modelo GreaseLM pré-treinado no OpenbookQA, execute
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh obqa --data_dir data/ --load_model_path /path/to/checkpoint
Para avaliar um ponto de verificação do modelo GreaseLM pré-treinado no MedQA-USMLE, execute
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
no formato .jsonl (consulte data/csqa/statement/train.statement.jsonl
)data/{yourdataset}/
para armazenar os arquivos .jsonlpreprocess.py
e execute a extração de subgráficos para seus dadosutils/parser_utils.py
para oferecer suporte ao seu próprio conjunto de dados Este repositório é baseado no seguinte trabalho:
QA-GNN: Question Answering using Language Models and Knowledge Graphs
https://github.com/michiyasunaga/qagnn
Muito obrigado aos autores e desenvolvedores!