FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

SyntaxNetを使った構文解析のチュートリアルに挑戦(2)

f:id:msyksphinz:20160520003556j:plain

前回に続き、今度は実際にチュートリアルを使用して構文解析に挑戦する。

英単語のタグ付けまでが完了しており、その時のモデルパラメータは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   _       _

お、ちゃんと番号がついている。構文解析は実行できているようだ。ついでに、リンク付けも頑張ってパワポで書いてみた。

f:id:msyksphinz:20160523010905p:plain

あっているのかよく分からんね!でもまあそれっぽいし良いんじゃない!!