Este repositorio proporciona el código fuente y los datos de nuestro documento: Qa-GNN: Razonamiento con modelos de idiomas y gráficos de conocimiento para la respuesta de preguntas (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 web: https://snap.stanford.edu/qagnn


Ejecute los siguientes comandos para crear un entorno de conda (suponiendo 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 los conjuntos de datos de respuesta de preguntas ( CommonSenseqa , OpenBookqa ) y el gráfico de conocimiento de conceptnet. Descargue todos los datos sin procesar por
./download_raw_data.sh
Preprocese los datos sin procesar ejecutando
python preprocess.py -p <num_processes>
El guión:
data/csqa/statement/ )TL; DR (omita los pasos de arriba y simplemente obtenga datos preprocesados) . El preprocesamiento puede llevar mucho tiempo. Para su conveniencia, puede descargar todos los datos procesados por
./download_preprocessed_data.sh
? Noticias (agregue Medqa-Usmle) . Además de los conjuntos de datos de control de calidad de sentido común ( Commonsenseqa , OpenBookqa ) con el gráfico de conocimiento de conceptnet, agregamos un conjunto de datos de QA biomédico ( MEDQA-USMLE ) con un gráfico de conocimiento biomédico basado en la base de datos de enfermedades y el banco de medicamentos. Puede descargar todos los datos para esto desde [aquí] . Deséjelo y coloque las carpetas medqa_usmle y ddb dentro del directorio data/ . Si bien estos datos ya están preprocesados, también proporcionamos los scripts de preprocesamiento que utilizamos en utils_biomed/ .
La estructura del archivo resultante se verá como:
.
├── 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 comunessenseqa, corre
./run_qagnn__csqa.sh
Para OpenBookqa, ejecute
./run_qagnn__obqa.sh
Para Medqa-Usmle, corre
./run_qagnn__medqa_usmle.sh
Como se configuró en estos scripts, el modelo necesita dos tipos de archivos de entrada
--{train,dev,test}_statements : Preguntas preprocesadas en formato JSONL. Esto se carga principalmente por la función load_input_tensors en utils/data_utils.py .--{train,dev,test}_adj : Información del subgrafio KG extraído para cada pregunta. Esto se carga principalmente por load_sparse_adj_data_with_contextnode función en utils/data_utils.py . Nota : Encontramos que la capacitación para OpenBookqa es inestable (por ejemplo, la mejor precisión del desarrollo varía cuando se usa diferentes semillas, diferentes versiones de las bibliotecas de transformadores / antorcha-geometría, etc.), probablemente porque el conjunto de datos es pequeño. Sugerimos probar diferentes semillas. Otra forma potencial de estabilizar el entrenamiento es inicializar el modelo con uno de los puntos de control exitosos que se proporcionan a continuación, por ejemplo, agregando un argumento --load_model_path obqa_model.pt .
Para comunessenseqa, corre
./eval_qagnn__csqa.sh
Del mismo modo, para otros conjuntos de datos (OpenBookqa, Medqa-usmle), ejecutar ./eval_qagnn__obqa.sh y ./eval_qagnn__medqa_usmle.sh . Puede descargar puntos de control de modelos capacitados en la siguiente sección.
Comunessenseqa
| Modelo capacitado | Dev Acc. | Prueba interna Acc. |
|---|---|---|
| Roberta-Large + Qa-Gnn [enlace] | 0.7707 | 0.7405 |
OpenBookqa
| Modelo capacitado | Dev acc. | Prueba acc. |
|---|---|---|
| Roberta-Large + Qa-Gnn [enlace] | 0.6960 | 0.6900 |
Medqa-Usmle
| Modelo capacitado | Dev acc. | Prueba acc. |
|---|---|---|
| SAPBERT-BASE + QA-GNN [enlace] | 0.3789 | 0.3810 |
Nota : Los modelos fueron entrenados y probados con Huggingface Transformers == 3.4.0.
{train,dev,test}.statement.jsonl en el formato .jsonl (consulte data/csqa/statement/train.statement.jsonl )data/{yourdataset}/ para almacenar los archivos .jsonlpreprocess.py y realizar la extracción de subgrafías para sus datosutils/parser_utils.py para admitir su propio conjunto de datos Este repositorio se basa en el siguiente trabajo:
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
¡Muchas gracias a los autores y desarrolladores!