Este repositório fornece o código-fonte e os dados do nosso artigo: QA-GNN: raciocínio com modelos de idiomas e gráficos de conhecimento para resposta a perguntas (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) } ,
}Página da Web: https://snap.stanford.edu/qagnn


Execute os seguintes comandos para criar um ambiente de conda (assumindo 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.htmlUtilizamos os conjuntos de dados de resposta a perguntas ( Commonsenseqa , OpenBookQA ) e o gráfico de conhecimento do conceito. Baixar todos os dados brutos por
./download_raw_data.sh
Pré -processo os dados brutos executando
python preprocess.py -p <num_processes>
O script irá:
data/csqa/statement/ )Tl; dr (pule acima etapas e apenas obtenha dados pré -processados) . O pré -processamento pode demorar muito. Para sua conveniência, você pode baixar todos os dados processados por
./download_preprocessed_data.sh
? Notícias (adicione MedQA-USMLE) . Além dos conjuntos de dados de controle de qualidade ( Commonsenseqa , OpenBookQA ) com o gráfico de conhecimento do conceito, adicionamos um conjunto de dados de controle de qualidade biomédico ( MedQA-USMLE ) com um gráfico de conhecimento biomédico baseado no banco de dados de doenças e no banco de dados. Você pode baixar todos os dados para isso de [aqui] . Descompacte -o e coloque as pastas medqa_usmle e ddb dentro do data/ diretório. Embora esses dados já estejam pré -processados, também fornecemos os scripts de pré -processamento que usamos no utils_biomed/ .
A estrutura de arquivo resultante será:
.
├── 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 Commonsenseqa, corra
./run_qagnn__csqa.sh
Para OpenBookQa, Run
./run_qagnn__obqa.sh
Para MedQA-USMLE, RUN
./run_qagnn__medqa_usmle.sh
Conforme configurado nesses scripts, o modelo precisa de dois tipos de arquivos de entrada
--{train,dev,test}_statements : declarações de perguntas pré-processadas no formato jsonl. Isso é carregado principalmente por load_input_tensors na função nos utils/data_utils.py .--{train,dev,test}_adj : Informações do subgrafista kg extraídas para cada pergunta. Isso é carregado principalmente por load_sparse_adj_data_with_contextnode função em utils/data_utils.py . Nota : descobrimos que o treinamento para o OpenBookQA é instável (por exemplo, a melhor precisão do desenvolvedor varia ao usar sementes diferentes, versões diferentes das bibliotecas transformadoras / tocha-geométrica etc.), provavelmente porque o conjunto de dados é pequeno. Sugerimos experimentar sementes diferentes. Outra maneira potencial de estabilizar o treinamento é inicializar o modelo com um dos pontos de verificação bem -sucedidos fornecidos abaixo, por exemplo, adicionando um argumento --load_model_path obqa_model.pt .
Para Commonsenseqa, corra
./eval_qagnn__csqa.sh
Da mesma forma, para outros conjuntos de dados (OpenBookqa, MedQA-USMLE), RUN ./eval_qagnn__obqa.sh e ./eval_qagnn__medqa_usmle.sh . Você pode baixar pontos de verificação do modelo treinado na próxima seção.
Commonsenseqa
| Modelo treinado | Dev Acc. | Teste interno Acc. |
|---|---|---|
| Roberta-Large + Qa-Gnn [Link] | 0,7707 | 0,7405 |
Openbookqa
| Modelo treinado | Dev Acc. | Teste acc. |
|---|---|---|
| Roberta-Large + Qa-Gnn [Link] | 0,6960 | 0,6900 |
MedQA-USMLE
| Modelo treinado | Dev Acc. | Teste acc. |
|---|---|---|
| SAPBERT-BASE + QA-GNN [link] | 0,3789 | 0,3810 |
NOTA : Os modelos foram treinados e testados com transformadores de huggingface == 3.4.0.
{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 subgrafias para seus dadosutils/parser_utils.py para apoiar seu próprio conjunto de dados Este repo é construído sobre o seguinte trabalho:
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
Muito obrigado aos autores e desenvolvedores!