日本語入力を支える技術、本日発売

 発売ですよ、というだけではアレなので、日本語入力と私、という題目で自分語りでもしてみようかと思っていました…が、時間もないのでそれはまた今度にして、細かなトピック選択について少し触れてみようかと思います。(写真は昨日既に入荷していたジュンク堂池袋店です。右上に見えるプログラミングコンテストチャレンジブックもオススメ!)
 データ構造については、カッコウハッシュ、ダブル配列、LOUDSを選択しました。カッコウハッシュはやや唐突な感じがしますが、本当はfujimapまで紹介してfalse positiveを許すとサイズが小さくできるねー、とかやりたかったのです。fujimapをボツにしてしまったので、結果としてカッコウハッシュはちょっと浮いてしまったかなと思います。ただ、面白いデータ構造なので知っといて損はないでしょう。ダブル配列、LOUDSあたりは選択としては特に異論もないところかと思います。しかし、LOUDSは平易に説明しようとするとものすごく大変で、かなり苦戦しました。うまく説明できたかわかりませんが、とりあえず現時点でのベストは尽くしました。
 学習系に関しては、当初は確率的言語モデル→構造化SVM→CRFの順に説明を書いていたのですが、確率の説明がやっかいなことから、構造化SVM→CRF→確率的言語モデルの順番に変更しました。つまり、確率が出てくるのはできるだけ後回しにしたかったし、確率が出てきたとしてもベイズの定理とか使うのは後ろの方にしたかったのです。構造化SVMは前向き後ろ向きアルゴリズムが要らないし、オーバーフローとかアンダーフローとかあんま気にしなくても動くし、良い手法だと思っています。確率値が出せないけどね。最適化にFOBOSを使ったのは、目的関数があって劣微分が定義できたら使えるので汎用性が高い点、実装が簡単である点を評価しました。他にも条件を満たす手法はきっとあるとは思いますが、要件は十分に満たせているので今回は(自分の中で)定評があるFOBOSを使いました。
 その他、隠れマルコフモデルについてはスライスサンプリングでパラメーター推定を行う説明とか書いていたのですが、これ書いてたら発売が半年伸びるなと思って途中でボツにしました。
 とにかく、学生時代の自分が知りたかったことを今の能力で出来る限り噛み砕きつつ詰め込んだので、誰に読ませたいかというと、一番読ませたいのは過去の自分です。タイムマシンがあったら、一冊過去に送りたい。

 あとでレビュアの方々が書いてくれた記事にリンクを張ります。今日はもう寝ますのでおやすみなさい。