連単語変換

NAIST の学内プロジェクトの一環として先週スクラッチから作り始めた(2月上旬までは Google のデータも届いていなかったので、森さんからもらったソースコードをときどき眺めるくらいだった)日本語 IME なのだが、ようやく連文節変換できるようになる。正しくは、今のところ文節の概念がないので、連単語変換なのであるが、つまりは自分で分かち書きしないでも適当なところで単語に分割して変換してくれる、というごく当たり前の機能である。論文読んでしばらく悩み、いくつかの仮名漢字変換システムのソースコードみたりしたのだが、できてから論文に帰って読み直すとちゃんと書いてあった。

これまで作っていたシステム(といっても数日の間だけど)は自分で単語区切りを明示的にスペースで入れていた。単語区切り(分かち書き)まで終わっていれば、あとはそれぞれの単語を辞書引きしてそれっぽい結果を返せばいいだけなのだが、漢字かな混じり文でも自動で分かち書きをするの間違えるのに、かなだけの文章を自動で分かち書きするのはけっこう難しそうに思える。とはいえ、世の中の仮名漢字変換システムはそんなに単語分割を間違えたりしていないので、意外と簡単なのかもしれないが、単語分割間違えられる(過分割はそんなに問題ないが、つなげすぎたりそもそも切れ目が両端で間違っていたりするとひどい)のは日本語を入力していて一番腹立たしい瞬間なので、できるだけ減らしたいものである。

自動単語分割を用いずに、単語区切りをユーザが入れるのはSumibi も「分かち書きのどこが良いのですか?」で書いているし、SKK も送りがなを含めて自分で入れる方式を採っており、人手で入れるのはそれはそれでストレスがない優れた入力方法である。とはいうものの、やはり自分でいちいちスペース押さないといけないのは面倒くさいので、作るならそれは避けようかなと思っていたのであった。ちなみに自分は元 SKK ユーザで5年くらい使っていたが、最近は Windows では MS-IMEMac では ATOKLinux では Anthy を使っている。最近は検索エンジンで検索するときも大文字で書くべくところ含めて全部小文字で入力している(それでも検索できるから)し、ユーザは低きに流れるものである。

IMEの文節に関する話は昔 taku さんが書いていたのだが、森さんは「文節って使うと英語で論文書きにくいから使いたくない(文節という概念は日本語特有のものなのだ……)」と言っていたし、自分も別に要らないかなと思っている。ただ上記の taku さんの議論のように(自然言語処理における文節とも違う) IME 文節はあっていいかなと思うが、コーパスから推定する方法もあるだろうが、個人的には「変換ログ」から推定したものが一番使えると思う(ちょこちょこ変換する人のログとか見ると、たぶんそれがほぼ最適な IME 文節になっているはずである)ので、ちょっとログを溜めてみたい(もしくは見せてくれる人がいるなら見せてもらいたい)と考えている。

言語モデルGoogle 日本語 N グラムから作成した表記 2-gram (クラスタリングもなにもしていない)で、仮名漢字変換モデルは新聞記事1年分しか使っていないので、だいぶしょぼい。あと未知語の処理をまだ入れていないので、未知語が入ってくると(もしくは未知語と判断されると)変なことになる。未知語のところを今回がんばる予定なので、もう少しまともに動くようにしないと。機械翻訳のほうも少し手をつけてはいるのだが、並行してやるのは難しいなあ……。