このレポは、私たちの論文のソースコードとデータを提供します:QA-GNN:質問応答のための言語モデルと知識グラフを使用します(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) } ,
}Webページ:https://snap.stanford.edu/qagnn


次のコマンドを実行して、コンドラ環境を作成します(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.html質問に答えるデータセット( CommonsenseQA 、 OpenBookQA )とコンセプトネットの知識グラフを使用します。すべての生データをダウンロードしてください
./download_raw_data.sh
実行して生データを事前に処理します
python preprocess.py -p <num_processes>
スクリプトは次のとおりです。
data/csqa/statement/ )tl; dr(上記の手順をスキップし、前処理されたデータを取得するだけです) 。前処理には時間がかかる場合があります。あなたの便利さのために、あなたはすべての処理されたデータをによってダウンロードすることができます
./download_preprocessed_data.sh
?ニュース(Medqa-usmleを追加) 。コンセプトネットナレッジグラフを備えたCommonsense QAデータセット( CommonsenseQA 、 OpenBookQA )に加えて、疾患データベースとドラッグバンクに基づいた生物医学的知識グラフを備えた生物医学QAデータセット( MEDQA-USMLE )を追加しました。 [こちら]からこのすべてのデータをダウンロードできます。それを解凍し、 medqa_usmleおよびddbフォルダーをdata/ディレクトリ内に配置します。このデータは既に前処理されていますが、 utils_biomed/で使用した前処理スクリプトも提供します。
結果のファイル構造は次のようになります。
.
├── 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/
Commonsenseqaの場合、実行してください
./run_qagnn__csqa.sh
OpenBookqaの場合は、実行してください
./run_qagnn__obqa.sh
medqa-usmleについては、実行してください
./run_qagnn__medqa_usmle.sh
これらのスクリプトで構成されているように、モデルには2種類の入力ファイルが必要です
--{train,dev,test}_statements :JSONL形式の前処理された質問ステートメント。これは主にutils/data_utils.pyのload_input_tensors関数によってロードされます。--{train,dev,test}_adj :各質問に対して抽出されたkgサブグラフの情報。これは主にload_sparse_adj_data_with_contextnode関数によってutils/data_utils.pyによってロードされます。注:OpenBookQAのトレーニングは不安定であることがわかります(たとえば、DEVSの精度は、データセットが小さいために、おそらくさまざまな種子、変圧器 /トーチの幾何学的ライブラリなどを使用する場合に異なります)。さまざまな種を試すことをお勧めします。トレーニングを安定させるもう1つの潜在的な方法は、以下に示されている成功したチェック--load_model_path obqa_model.ptの1つでモデルを初期化することです。
Commonsenseqaの場合、実行してください
./eval_qagnn__csqa.sh
同様に、他のデータセット(openbookqa、medqa-usmle)の場合、run ./eval_qagnn__obqa.shおよび./eval_qagnn__medqa_usmle.sh 。次のセクションで、訓練されたモデルチェックポイントをダウンロードできます。
Commonsenseqa
| 訓練されたモデル | 社内開発ACC。 | 社内テストACC。 |
|---|---|---|
| roberta-large + qa-gnn [link] | 0.7707 | 0.7405 |
openbookqa
| 訓練されたモデル | dev acc。 | テストACC。 |
|---|---|---|
| roberta-large + qa-gnn [link] | 0.6960 | 0.6900 |
Medqa-usmle
| 訓練されたモデル | dev acc。 | テストACC。 |
|---|---|---|
| sapbert-base + qa-gnn [link] | 0.3789 | 0.3810 |
注:モデルはトレーニングされ、Huggingface Transformers == 3.4.0でテストされました。
{train,dev,test}.statement.jsonl in .jsonl形式に変換します( data/csqa/statement/train.statement.jsonlを参照)data/{yourdataset}/にディレクトリを作成して.jsonlファイルを保存するにはpreprocess.pyを変更し、データのサブグラフ抽出を実行しますutils/parser_utils.pyを変更して、独自のデータセットをサポートしますこのレポは、次の作業に基づいて構築されています。
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
著者と開発者に感謝します!