Deep Semantic Role Labeling のソースコードを動かすまでの手順
nvidia-docker2でコンテナを作成。 –runtime=nvidiaを忘れないこと。
$ docker run -it --runtime=nvidia nvidia/cuda:7.5-cudnn5-devel-ubuntu14.04
ソースコードがtheano==0.9.0にしか対応しておらず、しかもtheano0.9.0はcuDNN5でしか動かない為、コンテナで新しい環境を作った。
作ったコンテナに入る。
$ docker start hoge $ docker attach hoge
ここから先の手順はコンテナ内で実行。
コンテナに標準搭載されていなかった必要パッケージを入れる
# apt update # apt install git # apt install unzip
コンテナ内でのライブラリ管理が面倒なので、Anaconda2をインストールすることにした。
Anacondaに必要パッケージのインストール
# apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev libpng-dev
pyenvのインストール
# git clone git://github.com/yyuu/pyenv.git ~/.pyenv # git clone https://github.com/yyuu/pyenv-pip-rehash.git ~/.pyenv/plugins/pyenv-pip-rehash # echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc # echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc # echo 'eval "$(pyenv init -)"' >> ~/.bashrc # source ~/.bashrc
まず、最新のAnaconda (Python2系)のバージョンを確認
# pyenv install -l | grep anaconda2 anaconda2-2.4.0 anaconda2-2.4.1 anaconda2-2.5.0 anaconda2-4.0.0 anaconda2-4.1.0 anaconda2-4.1.1 anaconda2-4.2.0 anaconda2-4.3.0 anaconda2-4.3.1 anaconda2-4.4.0 anaconda2-5.0.0 anaconda2-5.0.1 anaconda2-5.1.0 anaconda2-5.2.0
最新のAnaconda2 (ここではanaconda2-2.4.0) をインストールし、デフォルトとして設定。
# pyenv install anaconda2-2.4.0 # pyenv global anaconda2-2.4.0 # echo 'export PATH="$PYENV_ROOT/versions/anaconda2-2.4.0/bin:$PATH"' >> ~/.bashrc # source ~/.bashrc
Pythonの環境を確認
# python --version Python 2.7.10 :: Anaconda 2.4.0 (64-bit)
ここから、SRLのソースコードのインストールに移る
コンテナ内の適当なディレクトリで、git clone
# git clone https://github.com/luheng/deep_srl.git
コードを動かすため、パッケージをインストール
# conda install theano==0.9.0 pygpu protobuf nltk # apt install tcsh
Google ドライブのPretrainedファイル6つすべてダウンロードし、~/deep_srl/resources下に配置
https://drive.google.com/drive/folders/0B5zHXdvxrsjNZUx2YXJ5cEM0TW8?usp=sharing
先ほどダウンロードしたファイルの展開
# tar -zxvf conll05_ensemble.tar.gz # tar -zxvf conll05_model.tar.gz # tar -zxvf conll05_propid_model.tar.gz # tar -zxvf conll2012_ensemble.tar.gz # tar -zxvf conll2012_model.tar.gz # tar -zxvf conll2012_propid_model.tar.gz
GloVe のインストール
# ./scripts/fetch_required_data.sh
以上でインストール終了。
サンプルコードを動かす前に、モデルのパスを指定
# vi run_end2end.sh #!/bin/bash export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda:/usr/local/cuda/lib64:/opt/OpenBLAS/lib MODEL_PATH="./resources/conll05_propid_model" <- ここでパス指定。もともとはconll05_propid_modelとしか書かれていない。 MODEL_PATH2="./resources/conll05_ensemble" <- ここでパス指定 TEMP_PATH="temp" INPUT_PATH=$1 OUTPUT_PATH=$2 TH_FLAGS="optimizer=fast_compile,floatX=float32" if [ "$#" -gt 2 ] then TH_FLAGS="${TH_FLAGS},device=gpu$3,lib.cnmem=0.9" fi THEANO_FLAGS=$TH_FLAGS python python/predict.py \ --model=$MODEL_PATH \ --task="propid" \ --input="${INPUT_PATH}" \ --output="${TEMP_PATH}/sample.pp.txt" \ --outputprops="${TEMP_PATH}/sample.pred.props" THEANO_FLAGS=$TH_FLAGS python python/predict.py \ --model=$MODEL_PATH2 \ --task="srl" \ --input="${TEMP_PATH}/sample.pp.txt" \ --inputprops="${TEMP_PATH}/sample.pred.props" \ --output="${OUTPUT_PATH}"
サンプルコードを動かして動作確認
$ ./scripts/run_end2end.sh sample_data/sentences_with_predicates.txt temp/sample.out # (on CPU) $ ./scripts/run_end2end.sh sample_data/sentences_with_predicates.txt temp/sample.out ${gpu_id} # (on GPU)
出力
(省略) ('lstm_0_rdrop', 0.1, True) <neural_srl.theano.layer.HighwayLSTMLayer object at 0x7fe0940f7090> ('lstm_1_rdrop', 0.1, True) <neural_srl.theano.layer.HighwayLSTMLayer object at 0x7fe0940f7f90> ('lstm_2_rdrop', 0.1, True) <neural_srl.theano.layer.HighwayLSTMLayer object at 0x7fe0940f76d0> ('lstm_3_rdrop', 0.1, True) <neural_srl.theano.layer.HighwayLSTMLayer object at 0x7fe095dcd310> ('lstm_4_rdrop', 0.1, True) <neural_srl.theano.layer.HighwayLSTMLayer object at 0x7fe0b6b80690> ('lstm_5_rdrop', 0.1, True) <neural_srl.theano.layer.HighwayLSTMLayer object at 0x7fe0b6b80b10> ('lstm_6_rdrop', 0.1, True) <neural_srl.theano.layer.HighwayLSTMLayer object at 0x7fe0b6b80d50> ('lstm_7_rdrop', 0.1, True) <neural_srl.theano.layer.HighwayLSTMLayer object at 0x7fe0b6b80050> 32072 2 Loaded model from: ./resources/conll05_ensemble/model4.npz Model building and loading duration was 0:00:04. Running model duration was 0:00:00. Decoding duration was 0:00:00. Accuracy: 38.750 (31.0/80.0) Printing results to temp file: /root/script/deep_srl/python/neural_srl/shared/../../../temp/srl_pred_5859.tmp Number of Sentences : 5 Number of Propositions : 8 Percentage of perfect props : 0.00 corr. excess missed prec. rec. F1 ------------------------------------------------------------ Overall 0 19 0 0.00 0.00 0.00 ---------- A0 0 6 0 0.00 0.00 0.00 A1 0 8 0 0.00 0.00 0.00 A2 0 2 0 0.00 0.00 0.00 AM-DIR 0 2 0 0.00 0.00 0.00 AM-TMP 0 1 0 0.00 0.00 0.00 ------------------------------------------------------------ V 6 2 2 75.00 75.00 75.00 ------------------------------------------------------------ Fscore=0.0 Writing to human-readable file: temp/sample.out
結果はテキストファイルとして、temp/sample.outに保存される
temp/sample.out
1 John told Pat to cut off the tree . Predicate: told(2) A0: 1 John V: told A2: Pat A1: to cut off the tree 1 John told Pat to cut off the tree . Predicate: cut(5) A0: Pat V: cut off A1: the tree 4 John told Pat to cut off the tree . Predicate: told(2) A0: 4 John V: told A2: Pat A1: to cut off the tree 4 John told Pat to cut off the tree . Predicate: cut(5) A0: Pat V: cut off A1: the tree 1 We saw the Grand Canyon flying to Chicago . Predicate: saw(2) A0: We V: saw A1: the Grand Canyon flying to Chicago 1 We saw the Grand Canyon flying to Chicago . Predicate: flying(6) A1: the Grand Canyon V: flying AM-DIR: to Chicago 5 We saw the Grand Canyon flying to Chicago . Predicate: saw(2) AM-TMP: 5 A0: We V: saw A1: the Grand Canyon flying to Chicago 5 We saw the Grand Canyon flying to Chicago . Predicate: flying(6) A1: the Grand Canyon V: flying AM-DIR: to Chicago
こんな感じで、動詞を中心とした係り受け解析ができる。
ディスカッション
コメント一覧
まだ、コメントがありません