研究員や学生さんが最近実験に使っている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%程度であり,事前学習モデルと同じぐらいの性能は出ている.