前回、サンプルの日本語のトレーニングが終了したので、今度は通常の日本語を入力して、上手く解析できるか挑戦してみる。
例えば、以下のような日本語を解析してみる。SyntaxNetでは、日本語の入力ではCONLL形式での入力が必須(or English-text)なので、文節訳は自分で行う。
美しい表現方法を正しい文法で書くことによって、読みやすい文章となります。 美しい 表現方法を 正しい 文法で 書くことによって、 読みやすい 文章と なります。
まずはCONLLの形式にする。
1 美しい _ _ _ _ _ _ _ _ 2 表現方法を _ _ _ _ _ _ _ _ 3 正しい _ _ _ _ _ _ _ _ 4 文法で _ _ _ _ _ _ _ _ 5 書くことによって、 _ _ _ _ _ _ _ _ 6 読みやすい _ _ _ _ _ _ _ _ 7 文章と _ _ _ _ _ _ _ _ 8 なります。 _ _ _ _ _ _ _ _
そのまま、SyntaxNetの解析器に食わせてみよう。
PARAMS=200x200-0.08-4400-0.85-6 bazel-bin/syntaxnet/parser_eval \ --task_context=models/brain_pos/greedy/$PARAMS/context \ --hidden_layer_sizes=128 \ --input=dev-corpus \ --output=tagged-$SET-corpus \ --arg_prefix=brain_pos \ --graph_builder=greedy \ --model_path=models/brain_pos/greedy/$PARAMS/model
前回編集した、syntaxnet/context_ja2.pbtxt
で、devの部分を当該CONLL文を指すように変えておくこと。
input { name: 'dev-corpus' record_format: 'conll-sentence' Part { file_pattern: '/home/vagrant/work/test_ja.conll' } }
解析結果は以下のようになった。
分類 | 詳細分類 | ||
---|---|---|---|
1 | 美しい | ADJ | ADJ-AUX |
2 | 表現方法を | NOUN | NOUN-PRT |
3 | 正しい | ADJ | ADJ-AUX |
4 | 文法で | NOUN | NOUN-POSTP |
5 | 書くことによって、 | NOUN | NOUN |
6 | 読みやすい | NOUN | NOUN |
7 | 文章と | NOUN | NOUN-POSTP |
8 | なります。 | VERB | VERB-AUX |
形容詞とかなかなかいい感じにあっているよね。「書くことによって」が名詞になってしまった。長い単語は弱いのかな。
次に、構文解析をしてみる。同様に、構文解析器に食わせるだけである。
PARAMS=200x200-0.08-4400-0.85-6 bazel-bin/syntaxnet/parser_eval \ --task_context=models/brain_parser/greedy/$PARAMS/context \ --hidden_layer_sizes=200,200 \ --input=tagged-dev-corpus \ --output=parsed-dev-corpus \ --arg_prefix=brain_parser \ --graph_builder=greedy \ --model_path=models/brain_parser/greedy/$PARAMS/model
実行結果は以下のようになった。早速、関係図を作ってみよう。
1 美しい _ ADJ ADJ-AUX _ 2 rcmod _ _ 2 表現方法を _ NOUN NOUN-PRT _ 8 adpmod _ _ 3 正しい _ ADJ ADJ-AUX _ 4 rcmod _ _ 4 文法で _ NOUN NOUN-POSTP _ 5 adpmod _ _ 5 書くことによって、 _ NOUN NOUN _ 6 appos _ _ 6 読みやすい _ NOUN NOUN _ 7 compmod _ _ 7 文章と _ NOUN NOUN-POSTP _ 8 adpmod _ _ 8 なります。 _ VERB VERB-AUX _ 0 ROOT _ _
2.から8.への矢印は、さすがに違うだろう?とはいえ、形容詞と名詞の関係性とかは、上手くつかめている気がするね。もっとデータを使って大量に学習させると、かなり良いものができるのかもしれない。