前回に続き、今度は実際にチュートリアルを使用して構文解析に挑戦する。
英単語のタグ付けまでが完了しており、その時のモデルパラメータは128-0.08-3600-0.9-1
として登録してある。
まずはローカルトレーニングだ。ローカルトレーニングは、以下のコマンドで実行できる。PARAMは上記の通り128-0.08-3600-0.9-1
だ。
$ PARAMS=128-0.08-3600-0.9-1 $ bazel-bin/syntaxnet/parser_trainer \ --arg_prefix=brain_parser \ --batch_size=32 \ --projectivize_training_set \ --decay_steps=4400 \ --graph_builder=greedy \ --hidden_layer_sizes=200,200 \ --learning_rate=0.08 \ --momentum=0.85 \ --output_path=models \ --task_context=models/brain_pos/greedy/$PARAMS/context \ --seed=4 \ --training_corpus=tagged-training-corpus \ --tuning_corpus=tagged-tuning-corpus \ --params=200x200-0.08-4400-0.85-4
かなり時間がかかるが完了できる。このトレーニングにより、モデルパラメータ名200x200-0.08-4400-0.85-4
のモデルが完成したことになる。
次に、パラメータのチューニングとテストが以下のコマンドにより実行される。
PARAMS=200x200-0.08-4400-0.85-4 for SET in training tuning dev; do bazel-bin/syntaxnet/parser_eval \ --task_context=models/brain_parser/greedy/$PARAMS/context \ --hidden_layer_sizes=200,200 \ --input=tagged-$SET-corpus \ --output=parsed-$SET-corpus \ --arg_prefix=brain_parser \ --graph_builder=greedy \ --model_path=models/brain_parser/greedy/$PARAMS/model done
さらにグローバルトレーニングを実行する。この辺は、チュートリアルをさらに進めていけばよい。
$ bazel-bin/syntaxnet/parser_trainer \ --arg_prefix=brain_parser \ --batch_size=8 \ --decay_steps=100 \ --graph_builder=structured \ --hidden_layer_sizes=200,200 \ --learning_rate=0.02 \ --momentum=0.9 \ --output_path=models \ --task_context=models/brain_parser/greedy/$PARAMS/context \ --seed=0 \ --training_corpus=projectivized-training-corpus \ --tuning_corpus=tagged-tuning-corpus \ --params=200x200-0.02-100-0.9-0 \ --pretrained_params=models/brain_parser/greedy/$PARAMS/model \ --pretrained_params_names=\ embedding_matrix_0,embedding_matrix_1,embedding_matrix_2,\ bias_0,weights_0,bias_1,weights_1 $ PARAMS=200x200-0.02-100-0.9-0 $ for SET in training tuning dev; do bazel-bin/syntaxnet/parser_eval \ --task_context=models/brain_parser/structured/$PARAMS/context \ --hidden_layer_sizes=200,200 \ --input=tagged-$SET-corpus \ --output=beam-parsed-$SET-corpus \ --arg_prefix=brain_parser \ --graph_builder=structured \ --model_path=models/brain_parser/structured/$PARAMS/model done
ここまででかれこれ1時間くらい実行していたのだが、無事に学習とテストが実行できていたようだ。
そもそも、コンテキストに前回使用したニュースの英語テキストが入っていたため、そのテキストも構文解析ができていたようだった。早速開いてみよう。
less models/brain_parser/greedy/200x200-0.08-4400-0.85-4/parsed-dev-corpus 1 US _ PROPN NNP _ 3 compound _ _ 2 pharmaceutical _ ADJ JJ _ 3 amod _ _ 3 company _ NOUN NN _ 5 compound _ _ 4 Pfizer _ NUM CD _ 5 nummod _ _ 5 backs _ NOUN NNS _ 0 ROOT _ _ 6 out _ ADP IN _ 9 case _ _ 7 of _ ADP IN _ 9 case _ _ 8 a _ DET DT _ 9 det _ _ 9 merger _ NOUN NN _ 5 nmod _ _ 10 with _ ADP IN _ 14 case _ _ 11 Irish _ ADJ JJ _ 14 amod _ _ 12 drug _ NOUN NN _ 13 compound _ _ 13 company _ NOUN NN _ 14 compound _ _ 14 Allergan _ PROPN NNP _ 9 nmod _ _ 15 after _ ADP IN _ 20 case _ _ 16 the _ DET DT _ 20 det _ _ 17 US _ PROPN NNP _ 18 compound _ _ 18 Treasury _ PROPN NNP _ 19 compound _ _ 19 announced _ VERB VBN _ 20 amod _ _ 20 plans _ NOUN NNS _ 5 nmod _ _ 21 to _ ADP IN _ 22 mark _ _ 22 amend _ VERB VB _ 20 acl _ _ 23 US _ PROPN NNP _ 25 compound _ _ 24 tax _ NOUN NN _ 25 compound _ _ 25 laws _ NOUN NNS _ 22 dobj _ _ 26 . _ PUNCT . _ 5 punct _ _
お、ちゃんと番号がついている。構文解析は実行できているようだ。ついでに、リンク付けも頑張ってパワポで書いてみた。
あっているのかよく分からんね!でもまあそれっぽいし良いんじゃない!!