京都テキスト解析ツールキットを使ってみた
KyTea(京都テキスト解析ツールキット)は京大のGraham Neubigさんが中心となって開発している単語分割&発音推定ツールである。
私はかな漢字変換用の学習データを作るのにこれまではmecabを使っていたのだが、mecab-ipadicのデータには、そもそも読み推定に力が入ってない、という問題があった。形態素解析は文章を単語に区切ることと品詞を推定する事が主目的な感じなのでそこを期待するのはそもそも筋違いなのだが。
かといって自分で作ろうにも、こういうものは学習用コーパスが必要なので、コードだけで簡単にどうにかできる問題ではない。コーパス作りはとても手間のかかる作業なので、気軽に週末に作れるようなものでもない。というわけで、根本的な解決は棚上げして、これまではmecabの解析結果を後付けで適当に確率的に揺らしてみたりとかしながら使ってきたのである。
そこに新しくKyTeaが現れた。KyTeaは0.1.0から現代日本語書き言葉均衡コーパス(BCCWJ)とUniDicによるモデルデータが同梱されるようになったので、早速使わせてもらう事にしたわけである。
まず試しに、「金の卵」「同情するなら金をくれ」というのを解析してみた。
(出力結果は機械でパースしやすいようにちょっといじってある)
金の卵 金 きん 0.688307 かね 0 の の 100 卵 たまご 0.439482 らん 0
同情するなら金をくれ 同情 どうじょう 100 する する 100 なら なら 100 金 かね 1.51546 きん 0 を を 100 くれ くれ 100
ちゃんと「きん」と「かね」で使い分けをしてくれているようだ。これはいいですね。
KyTeaで推定した方が読み推定という意味では良い結果になりそうなので、現在手持ちのウェブデータ3GB分ぐらいにkyteaを適用してみた。データをチェックしてみたところ、読みがUNK(未知語)となる単語が結構多い。知らない単語に対しては推定結果を出すのではなくUNKを出す、という仕様だとドキュメントにも書いてあるのだが、どうも
- 複合語的な単語(「前身頃」「頭頂部」など)に弱い。
- なぜか入っていない単語がある(「格闘技」とか)。これも複合語の問題なのかな?
という問題があり、結果として未知語となる単語が多いように感じられるようだ。これは単なる推測だが、単語分割の時点でうまくまとまってしまうのが、読み推定で却って良くない結果を生んでいるのでは、と見ている。
対策として、未知語になった単語はmecabで読みを推定する、という方法が考えられる。上述の例のうち、「頭頂部」「格闘技」はこの方法で救うことができた。
ただ、KyTeaが短単位に切ってしまうので、後でmecabをかませても救えない、というケースも散見される。例えば、「肌触り」という単語は、mecabにそのままかけると「ハダザワリ」と読んでくれるのだが、kyteaだと「肌触/り」と2つに分かれてしまう。このうち、「肌触」の方の読みがUNKになるのだが、これをこのままmecabで解析しなおしても、もはや「ハダザワリ」ではなく「ハダ/サワ/リ」になってしまう。
ともあれ、以上のように、KyTeaとmecabを併用する事でこれまでもよりもステキな読み推定を実現できるし、KyTeaは最近始まったプロジェクトなので、これからもどんどんと良くなっていくことが期待できるだろう。