前回はSyntaxNetを使って何か構文解析を試行しようとして、上手くいかなくて終了したのだった。
よくよく読んでみると、CONLLというフォーマットの資料を利用して構文解析ツールのトレーニングをしてやる必要があるらしい。
CONLLとは
CONLLとは、"Conference on Natural Language Learning"という学会て規定された(?)自然言語の構文を表記するためのフォーマットらしい。
ある文章があると、それを品詞、詳細な品詞、さらに係りの関係などを表現する。
ID: 文内のトークン番号で、1から開始される。 FORM: 表層形(句読点等も含む) LEMMA: 基本形 CPOSTAG: 品詞の上位分類 POSTAG: 品詞の詳細分類 FEATS: 付加的属性。属性は制御文字および"|"以外の文字列で表される。複数の属性を持つ場合、"|"によって結合して一つの文字列とする。 HEAD: 現トークンのHEAD(係り先)トークンのID。なければ0。 DEPREL: 係りの種別(文字列)。 PHEAD: 使用しません。 PDEPREL: 使用しません。
となっており、SyntaxNetでは以下のセットを使用していると書いてある(これが無料で使用可能だから)。
中身を見てみると、なるほど、英文が構文の情報を示した形で格納してある。以下は、"Two of them were being run by 2 officials of the Ministry of the Interior!"を構文解析したときの情報。
1 Two two NUM CD NumType=Card 6 nsubjpass _ _ 2 of of ADP IN _ 3 case _ _ 3 them they PRON PRP Case=Acc|Number=Plur|Person=3|PronType=Prs 1 nmod _ _ 4 were be AUX VBD Mood=Ind|Tense=Past|VerbForm=Fin 6 aux _ _ 5 being be AUX VBG VerbForm=Ger 6 auxpass _ _ 6 run run VERB VBN Tense=Past|VerbForm=Part|Voice=Pass 0 root _ _ 7 by by ADP IN _ 9 case _ _ 8 2 2 NUM CD NumType=Card 9 nummod _ _ 9 officials official NOUN NNS Number=Plur 6 nmod _ _ 10 of of ADP IN _ 12 case _ _ 11 the the DET DT Definite=Def|PronType=Art 12 det _ _ 12 Ministry Ministry PROPN NNP Number=Sing 9 nmod _ _ 13 of of ADP IN _ 15 case _ _ 14 the the DET DT Definite=Def|PronType=Art 15 det _ _ 15 Interior Interior PROPN NNP Number=Sing 12 nmod _ SpaceAfter=No 16 ! ! PUNCT . _ 6 punct _ _
これらの情報を使ってまずは訓練してやらないといけないということか。 まずは、bazelのparser_trainingを使って実行してみよう。
syntaxnet/context.pbtxtを編集して、trainingのコンテキストを設定してみよう。training-corpus, tuning-corpus, dev-corpus を書き換えてみる。
input { name: 'training-corpus' record_format: 'conll-sentence' Part { file_pattern: '/home/vagrant/work/ud-treebanks-v1.3/UD_English/en-ud-train.conllu' } } input { name: 'tuning-corpus' record_format: 'conll-sentence' Part { file_pattern: '/home/vagrant/work/ud-treebanks-v1.3/UD_English/en-ud-dev.conllu' } } input { name: 'dev-corpus' record_format: 'conll-sentence' Part { file_pattern: '/home/vagrant/work/ud-treebanks-v1.3/UD_English/en-ud-test.conllu' } }
これで、トレーニングを実行してみたのだが、エラーで落ちてしまった。
bazel-bin/syntaxnet/parser_trainer \ --task_context=syntaxnet/context.pbtxt \ --compute_lexicon \ --arg_prefix=brain_pos \ --graph_builder=greedy \ --training_corpus=training-corpus \ # names of training/tuning set --tuning_corpus=tuning-corpus \ --output_path=models \ # where to save new resources --batch_size=32 \ # Hyper-parameters --decay_steps=3600 \ --hidden_layer_sizes=128 \ --learning_rate=0.08 \ --momentum=0.9 \ --seed=0 \ --params=128-0.08-3600-0.9-0 # name for these parameters F syntaxnet/term_frequency_map.cc:166] Check failed: category == it->second (VERB vs. AUX)POS tag cannot be mapped to multiple coarse POS tags. 'VB' is mapped to: 'VERB' and 'AUX'
うーん、確かにトレーニングセットを見ると、VBという詳細文るいはVERBとAUXの両方に割り当てられている。これらはどのように処理すればいいのだろう?
まだまだ試行は続く。。。