FPGA開発日記

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

SyntaxNetを使って日本語の構文解析にトライ(2. 日本語文章のトレーニング)

f:id:msyksphinz:20160520003556j:plain

前回、サンプルの日本語のトレーニングが終了したので、今度は通常の日本語を入力して、上手く解析できるか挑戦してみる。

msyksphinz.hatenablog.com

例えば、以下のような日本語を解析してみる。SyntaxNetでは、日本語の入力ではCONLL形式での入力が必須(or English-text)なので、文節訳は自分で行う。

美しい表現方法を正しい文法で書くことによって、読みやすい文章となります。
美しい 表現方法を 正しい 文法で 書くことによって、 読みやすい 文章と なります。

www.kiji-check.com

まずは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    _   _

f:id:msyksphinz:20160525234130p:plain

2.から8.への矢印は、さすがに違うだろう?とはいえ、形容詞と名詞の関係性とかは、上手くつかめている気がするね。もっとデータを使って大量に学習させると、かなり良いものができるのかもしれない。