このリポジトリは、論文GreaseLM : Graph REASoning Enhanced Language Models for Question Answering (ICLR 2022 スポットライト)」のソース コードとデータを提供します。当社のコード、処理されたデータ、または事前トレーニングされたモデルのいずれかを使用する場合は、次のように引用してください。
@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 }
}
GreaseLM モデル アーキテクチャ" alt="" style="max-width: 100%;">
次のコマンドを実行して conda 環境を作成します (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
データを自分で前処理すると時間がかかる場合があるため、前処理されたデータを直接ダウンロードしたい場合は、次のサブセクションに進んでください。
以下を使用して、生の ConceptNet、CommonsenseQA、OpenBookQA データをダウンロードします。
./download_raw_data.sh
これらの生データを前処理するには、次のコマンドを実行します。
CUDA_VISIBLE_DEVICES=0 python preprocess.py -p <num_processes>
コマンドCUDA_VISIBLE_DEVICES=...
の先頭で使用する GPU を指定できます。スクリプトは次のことを行います。
data/csqa/statement/
に保存されます)。MedQA-USMLE データと、疾病データベースと DrugBank に基づく生物医学知識グラフをダウンロードして前処理するスクリプトは、 utils_biomed/
で提供されます。
便宜上、データを自分で前処理したくない場合は、前処理されたすべてのデータをここでダウンロードできます。これらをこのリポジトリの最上位ディレクトリにダウンロードして解凍します。 medqa_usmle
とddb
フォルダーをdata/
ディレクトリに移動します。
結果のファイル構造は次のようになります。
.
├── 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 でGreaseLMトレーニングするには、次のコマンドを実行します。
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh csqa --data_dir data/
コマンドCUDA_VISIBLE_DEVICES=...
の先頭で、使用する GPU を最大 2 つ指定できます。
同様に、OpenbookQA でGreaseLMトレーニングするには、次のコマンドを実行します。
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM .sh obqa --data_dir data/
MedQA-USMLE でGreaseLMトレーニングするには、次を実行します。
CUDA_VISIBLE_DEVICES=0 ./run_ GreaseLM __medqa_usmle.sh
CommonsenseQA で事前トレーニングされたGreaseLMモデルをここからダウンロードできます。これにより、IH-dev ACC が実現されます。 79.0
および IH テスト準拠。 74.0
の。
OpenbookQA で事前トレーニング済みのGreaseLMモデルをここからダウンロードすることもできます。これにより、テスト準拠が達成されます。 84.8
の。
ここから、MedQA-USMLE で事前トレーニングされたGreaseLMモデルをダウンロードすることもできます。これにより、テスト準拠が達成されます。 38.5
の。
CommonsenseQA で事前トレーニングされたGreaseLMモデル チェックポイントを評価するには、次を実行します。
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh csqa --data_dir data/ --load_model_path /path/to/checkpoint
ここでも、コマンドCUDA_VISIBLE_DEVICES=...
の先頭で使用する GPU を最大 2 つ指定できます。
同様に、OpenbookQA で事前トレーニングされたGreaseLMモデル チェックポイントを評価するには、次を実行します。
CUDA_VISIBLE_DEVICES=0 ./eval_ GreaseLM .sh obqa --data_dir data/ --load_model_path /path/to/checkpoint
MedQA-USMLE で事前トレーニングされたGreaseLMモデル チェックポイントを評価するには、次を実行します。
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
に変換します ( data/csqa/statement/train.statement.jsonl
を参照)data/{yourdataset}/
に .jsonl ファイルを保存するディレクトリを作成します。preprocess.py
変更し、データのサブグラフ抽出を実行します。utils/parser_utils.py
を変更します。 このリポジトリは次の作業に基づいて構築されています。
QA-GNN: Question Answering using Language Models and Knowledge Graphs
https://github.com/michiyasunaga/qagnn
作者と開発者に感謝します!