自然言語処理を活用したwebサービスをつくるときに参考になる5冊の書籍

自然言語処理を活用したwebサービス開発に関わって5年以上経った。いい機会なのでこれまでを振り返って役に立ったと思う5冊をメモしておく。


1.珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造
まずはこれ。有名な本なので知っている人も多いと思う。簡単に説明するとちょっと前に「フェルミ推定」という名前で流行ったような、データから必要な数値を概算する方法や、問題が起きたときに問題点がどこにあるのか?最小の労力で解決するにはどこをいじればよいのか?などが書いてある。「webサービス自然言語処理だ!」というと無限に夢が広がりがちなので、どういうデータが使えるのか、それをどういう形にもっていけばイケてるサービスになるのか、それはどのくらいの期間で実現できるか、ということを考える必要がある。そういうわけで本書は真っ先に読むべき一冊なのでは(余談だけれど、以前M << Nなデータに対してO(NlogM)な手法を用いていて効率が悪かったのを、MとNをひっくり返しただけでO(MlogN)になって大幅に効率化されたということがあった。こういう機転が利くかどうかは地味だけれど大きく性能に影響するので常に考えておく必要があると思う)。


2.Spidering hacks―ウェブ情報ラクラク取得テクニック101選
兎にも角にもデータがないとはじまらない。大抵の場合データが自由に使えるということはなくて自分でデータを集めるところから戦いは始まる。本書はwebからデータを集めるテクニックが満載なのでとても参考になる。


3.情報検索と言語処理(言語と計算)
自然言語処理webサービスに使うときに一番実用的なのが情報検索に関する部分だと思う。情報検索は単純な検索用途の他にも類似文検索、レコメンデーションなど応用範囲が広い。以前(記事の最後のリンクを参照)も紹介したが本書は情報検索の入門用として非常にオススメ。


4.バイオインフォマティクスのためのアルゴリズム入門
なぜバイオインフォマティクス?と思われるかもしれないが、この分野は文字列処理の優れた手法の宝庫。自然言語処理というと形態素解析で、構文解析で・・・というほうに目が向きがちだが実際はもっと基礎的な部分で文字列処理を効率的に行うことが重要。どれだけ精度が高くても結果を取得するのに10分かかります!とかだと見向きもされない。というわけで文字列処理を学ぶには本書が最適。例題が豊富で非常にわかりやすい。


5.確率的言語モデル(言語と計算)
最後にようやく言語処理らしい本を。上で紹介した「情報検索と言語処理」ではテキストデータをベクトル空間モデルで扱う話がメインだったのだが、機械翻訳やスペルミス訂正など場合によっては言語モデルとして扱ったほうが良い場合もある。もっとも確率が絡んでくると難易度も高くなるしここまでに紹介した4冊で事足りるならあえて言語モデルに手を出さなくてもいいかという話もある。


というわけで以上5冊には大変お世話になった。こうした優れた本がたくさんあるというのはとてもありがたい。
最近は機械学習ブームで機械学習を使って高精度な結果を出すぜ!という話をよく聞く。一発ネタ系のサービスであれば精度だけに目を向けていればいいのだけど、実際に「イケてるサービス」というのは(例えば検索エンジンのように)ストレスなくずっと使い続けられるもののことだと思う。
そういうサービスを作るには「精度」より前の段階で「データを集めてくる」「高速に処理する」「データサイズを小さく抑える」という部分がとても重要だと思う。「精度」を考えるのはこれらがクリアされてからなのでは(決して精度を考えなくて良いという意味ではないです)。
なお機械学習のオススメ書籍は以下の記事にまとめている。

これからはじめる人のための機械学習の教科書まとめ - EchizenBlog-Zwei