DyGIE++備忘録

研究員や学生さんが最近実験に使っているDyGIE++を自分のGPUボックスにインストールしたときの備忘録.

DyGIE++はPyTorchで書かれた固有表現・関係・イベント抽出ツールでインストール法や使い方は下記に書かれている.
github.com

ここでは捕捉を書いておく.

  • インストール

上記本家からDyGIE++をダウンロードし展開(またはclone)したディレクトリに移動して以下を実行

conda create --name dygiepp python=3.7
conda activate dygiepp
pip install -r requirements.txt
conda develop . # Adds DyGIE to your PYTHONPATH

AllenNLPを使っているので,allennlpをインストール

pip install allennlp

  • 動作確認のためsciercデータで学習

手元のマシンはGPUが1枚しかないので(うちの研究室でもGPU4枚刺しのサーバーを何台か使えますが,多くの人は1枚でしょうから),training_config/scierc.jasonnetを編集

なぜかインストールしたscierc.jasonnetのcuda_deviceの設定が1(gpu1を指定)になっていたので,この数値を0に置き換えてファイルを保存する.ちなみにこのファイルにはNERとREとERとCorefのバランスをとるパラメータの設定がある.データセットにないものについては0にする.SciERCはNEとREとCorefのアノテーションが付いていて,Eventはない.

sciercのデータをダウンロード

bash ./scripts/data/get_scierc.sh

  • 学習

bash scripts/train.sh scierc

もし,何かの手順が悪いか,または途中で学習をとめたり,再度学習をする場合は,下記のエラーが出る.

allennlp.common.checks.ConfigurationError: Serialization directory (models/scierc) already exists and is not empty. Specify --recover to recover from an existing output folder.

この場合は,modelsディレクトリに行って,sciercディレクトリの名前を変えるか,必要なければ削除すると,エラーが解消される.

学習にはGPUメモリを5.4GB程度使用.学習時間はTitan Xで1時間ぐらい.学習されたモデルファイルは models/scierc/model.tar.gzとして保存される.

  • テスト

テストデータによる評価の例は下記のようになる.

allennlp evaluate models/scierc/model.tar.gz data/scierc/normalized_data/json/test.json --cuda-device 0 --include-package dygie --output-file models/scierc/metrics_test.json

評価結果は --output-fileで指定したファイルに出力される.今回の学習では,NERが65%, REが45%程度であり,事前学習モデルと同じぐらいの性能は出ている.