FPGA開発日記

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

SyntaxNetで学習させたモデルを使って英文の文法識別に挑戦

f:id:msyksphinz:20160520003556j:plain

前回で、SyntaxNetを用いた文法の学習と、簡単なテストは完了した。

msyksphinz.hatenablog.com

これ、普通のテキストを入力して学習させることは可能だろうか?挑戦してみよう。

前回使った、トレーニングのモデルを応用すれば簡単に実現できそうな気がする。

SyntaxNetのモデルパラメータを変更

前回は、SyntaxNetでトレーニングおよびテストを実行するために、以下のようなコマンドを使ったのだった。

$ for SET in training tuning dev
do
   bazel-bin/syntaxnet/parser_eval    \
   --task_context=models/brain_pos/greedy/$PARAMS/context  \
   --hidden_layer_sizes=128   \
   --input=$SET-corpus  \
   --output=tagged-$SET-corpus  \
   --arg_prefix=brain_pos  \
   --graph_builder=greedy  \
   --model_path=models/brain_pos/greedy/$PARAMS/model
done

このとき、コンテキストの設定はmodels/brain_pos/greedy/128-0.08-3600-0.9-1/contextに格納されている。

input {
  name: "dev-corpus"
- record_format: "conll-sentence"
+ record_format: "english-text"
  Part {
-    file_pattern: "/home/vagrant/work/ud-treebanks-v1.3/UD_English/en-ud-dev.conllu"
+    file_pattern: "/home/vagrant/work/test.txt"
  }
}

この部分を変更して、入力ファイルのフォーマットもenglish-textに変更した。

ちなみに、テキストには本日のニュースを格納しておいた。

rarejobdailynewsarticle.blogspot.jp

早速、テストしてみよう。

$ for SET in training tuning dev
do
   bazel-bin/syntaxnet/parser_eval    \
   --task_context=models/brain_pos/greedy/$PARAMS/context  \
   --hidden_layer_sizes=128   \
   --input=$SET-corpus  \
   --output=tagged-$SET-corpus  \
   --arg_prefix=brain_pos  \
   --graph_builder=greedy  \
   --model_path=models/brain_pos/greedy/$PARAMS/model
done

完成したテキストは、models/brain_pos/greedy/128-0.08-3600-0.9-1/tagged-dev-corpusに格納されている。

1       US      _       PROPN   NNP     _       0               _       _
2       pharmaceutical  _       ADJ     JJ      _       0               _       _
3       company _       NOUN    NN      _       0               _       _
4       Pfizer  _       NUM     CD      _       0               _       _
5       backs   _       NOUN    NNS     _       0               _       _
6       out     _       ADP     IN      _       0               _       _
7       of      _       ADP     IN      _       0               _       _
8       a       _       DET     DT      _       0               _       _
9       merger  _       NOUN    NN      _       0               _       _
10      with    _       ADP     IN      _       0               _       _
11      Irish   _       ADJ     JJ      _       0               _       _
12      drug    _       NOUN    NN      _       0               _       _
13      company _       NOUN    NN      _       0               _       _
14      Allergan        _       PROPN   NNP     _       0               _       _
15      after   _       ADP     IN      _       0               _       _
16      the     _       DET     DT      _       0               _       _
17      US      _       PROPN   NNP     _       0               _       _
18      Treasury        _       PROPN   NNP     _       0               _       _
19      announced       _       VERB    VBN     _       0               _       _
20      plans   _       NOUN    NNS     _       0               _       _
21      to      _       ADP     IN      _       0               _       _
22      amend   _       VERB    VB      _       0               _       _
23      US      _       PROPN   NNP     _       0               _       _
24      tax     _       NOUN    NN      _       0               _       _
25      laws    _       NOUN    NNS     _       0               _       _
26      .       _       PUNCT   .       _       0               _       _

...

おお、かなり上手く分類できているんじゃない?まだ分類だけなので構文解析までは出来ていないけど、かなり良さそうだ。

これで、通常の英語平文の分類がSyntaxNetで出来るようになった。