タガー

今考えていること。

タスクは「品詞タグ付け」(英語等、分かち書きのされる言語の場合)または「形態素解析」(中国語・日本語等の場合)(以下、「形態素解析」で統一)。

これらのタスク自体時代遅れという意見もあるだろうけど、工学としての自然言語処理ではより高精度が実現できるならそのほうがいいので、方向性としては間違っていないはず(自分のやり方でそれが達成できるかどうかはともかく)。

まず、形態素解析について。

ある単語の品詞が何かということは、その単語が何であるかに条件付けられ、また隣接する単語の品詞が何であるかにも条件付けられる。

これは HMM で簡単にモデル化できる。

品詞を隠れ状態として、出力記号を単語とする。

しかし、これでは明らかに不十分。

ある単語の品詞が何かということは、前後の単語が何であるかにも強く影響を受けるから。

HMM でいうと出力記号同士影響し合っているようなもので、つまり元々 HMM で表せるようなものではない。

というわけで、柔軟に素性を設定できる CRF の出番になる。

これが今の流れ。

ここで自分のアイデア

ある単語の品詞が何かというのは、その単語が何であるかに条件付けられ、また隣接する単語の品詞が何であるかにも条件付けられ、隣接する単語自身にも条件付けられる。

これは順番があるんじゃないか?ということ。

つまり、単語 W(品詞 P)、単語 W'(品詞 P')、単語 W''(品詞 P'')というような並びがあったとしたら、三番目の品詞P'' というのは、第一に品詞 P' に条件付けられ、第二に単語 W' に条件付けられ、第三に品詞 P に条件付けられるんじゃないかと。

で、これをモデル化するには n-gram の考え方が使えるんじゃないかと思いついた。

例えば、単語 W'' は 単語 W - 品詞 P - 単語 W' - 品詞 P' - 品詞 P'' - 単語 W'' という変形 n-gram で生成され、品詞 P'' は 単語 W - 品詞 P - 単語 W' - 品詞 P' - 品詞 P'' という変形 n-gram で生成されるとする。

こうすることで、条件の階層性がより的確に表現できるんじゃないかという考え。

n-gram と同じように、前からの条件付き確率しか考えないが、n-gram で自然と前後の関係が表現できるように、このモデルでも前後の関係が表現できる。

実験。

京大河原研 Graham さんのKylmを元に改造、変形 n-gram に対応させた。

それで英語と中国語に適用。

英語のほうは、Penn Treebank のデータを使用。混合 8-gram モデルでタグ付けをしたところ、既知語が 96.94%、未知語が 67.34%、全体で 96.14%。

ACLWiki の POS Tagging (State of the art)によると、現在最高レベルの Tagger の性能は 97.33%。All tokens でその性能ということは、既知語で 96.94%のこのモデルでは勝ち目がない(トレーニング・テストには同じものを使用)。

最高レベルのタガーの一つとして Stanford Tagger というのがあるので、それをダウンロードして動かして比較してみる。性能比較のために自作スクリプトを使用。すると、既知語で97.08%となった。性能の計り方に微妙な違いがあるのかもしれない。差は小さくなったが、それでも依然として負けている。

しかし、このまま実験を続けることにする。このモデルでは前向き・後ろ向きアルゴリズムを応用することでタグ付け確信度を求めることができるはずなので、確信度の高いものから順にタグ付けを行い、確信度の低いものは人手でタグ付けするといったことが考えられる。それに、他のモデルとは間違える場所が違うので、他のものと組み合わせることによってより高い性能が実現できる可能性もある。とりあえず、未知語モデルを入れた比較をしたいので、Stanford Tagger の未知語処理を見てみる予定。