Shift-Reduce 的な仮名漢字変換

統計的仮名漢字変換のプロジェクトのチューターをしてくれていた masayu-a さんが shift-reduce 的な仮名漢字変換について書いている。実は元々自分のプロジェクトはこっち系のアルゴリズムで行く予定(最初の計画書はそうなっていた)だったのだが、いろいろあって結局全文入力して文全体の Viterbi 探索になったのであった。

結局のところ単語境界を決めるのに日本語だと文字種(ひらがな・カタカナ・数字・英語とか)の情報がけっこう重要なのだが、入力としてやって来るのはかな文字列であって、全文入力して shift-reduce 的にやると文字境界が分からないんではないか、というのが問題かと思う。

自分も昔は SKK 使いだったので、シフトキーを押したときだけ予測・補完入力してくれる skk-prime 的なものがあれば、自分の使い方としてはいちばん使いやすくていいな(たぶん SKK 使いの人はみんなそう思っているんじゃないかと)と前から思っていたのだが、この場合、シフトを押したところが単語の開始位置で、補完するのは単語の終わりまででいいので、かな文字列の自動単語分割の問題は発生しない(もっと言えばそこまでに入力された文字列も文字種つきで自動単語分割できるので、探索も含めてかなり軽く精度もよくなるはず)。

SKK でも現在はタブを押せば変換補完できるし、要はあれを自動でやりかつ少し賢くする、といったあたりのところ。たとえば、SKK だと1回変換した結果しか個人辞書に入らないので、補完するにも変換した文字列そのものしか補完できないが、よくその部分文字列だけ入れたい(たとえば「奈良先端科学技術大学院大学情報科学研究科」と変換して、次に「奈良先端科学技術大学院大学」とだけ入れたいけど、補完候補には「奈良先端科学技術大学院大学情報科学研究科」しか出てこない、ということはよくある)ということはよくある。変換した文字列は自動単語分割できる(単に文字列の出現頻度を見るだけでもできそう)ので、部分文字列も補完・予測候補に入れる、ということが可能である。実際、ATOK は既にそういうことをやっているように見える。

結局自分がやりたいのは仮名漢字変換だけではなくてスペルミスや表記揺れも吸収して変換する文書正規化ツールなんで、オンラインで予測入力するような使い方というよりも、やっぱり全文入れて探索するほうが用法としては近いかな、と思ってああいう作り方をしているのだが、使う側としては両方作ってどっちが使いやすいか意見を求めて決めるべきかもなあ。

というわけでよろしくお願いします。>kazuma-t さん