前回で、SyntaxNetを用いた文法の学習と、簡単なテストは完了した。
これ、普通のテキストを入力して学習させることは可能だろうか?挑戦してみよう。
前回使った、トレーニングのモデルを応用すれば簡単に実現できそうな気がする。
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で出来るようになった。