JiroSearchという検索エンジンがあるようだ。

JiroSearch
http://www.crm.co.jp/jirosearch/
Luceneベース。基本N-Gram
タグ検索機能がついているらしい。


タグ検索かあ。


検索エンジンは世の中にかなりの数が出ていると思う。
そのうち多くは、転置インデックスをインデックスのデータ構造として採用している印象がある。
ひとえにそれは、
「どの単語がどの文書セットに含まれるか」を保持するという
転置インデックスというデータ構造の単純さと、
単純さのわりに逐次検索を遥かに超える検索能力のためだろう。


タグ検索を行いたい場合にも、
「どのタグがどの文書セットに含まれるか」を保持する転置インデックスを作成すれば
高速で検索を行うことができる*1


つまり、通常の検索とタグ検索の違いは、
転置インデックスのレコード単位の違いといえるのである。
通常の検索の場合は、単語もしくはN-gram単位のレコード、
タグ検索の場合には、タグ単位のレコードを転置インデックスに保持するのだ。


さて、
コンピュータに自動にやらせるタスクとしては、

タグ付け > 単語の抽出 >>>>(越えられない壁)>>>> N-gramの抽出

の順番で困難であると僕は考える。
ここで、タグ付けは「はてなブックマーク」のタグ付与をイメージしてもらいたい。


「タグ付け」は、文書をいくつかのカテゴリに分類する問題に帰着する。
タグを、あらかじめ与えられた固定のものとし、
なおかつ文書の字面を見ただけで判定できそうなものに限定すれば、
タグ付け自動化の難易度はぐっと下がる。
しかし、
例えば「はてなブックマーク」における「これはひどい」タグなどを
コンピュータが自動的に付与するのは困難だ。
なぜなら、「文書の意味理解」を行わなければいけないためだ。


ソーシャルタギングサービスが面白くて有用なのは、
コンピュータで容易には抽出できないタグが含まれているからだと考えられる。
しかも、あるタグが付与された数をカウントすることによって、
そのタグ付けがどれだけ信頼できるかという情報が得られる。


よって、タグ付けをうまく行うことができれば、
適合率のとっても高い検索を行うことができると考える。
しかし、人間がタグ付けを行っていない文書については検索を行うことができない。


「単語の抽出」もとても難しい問題である。
抽出精度を追及すれば、最終的には「文書の意味理解」が必要となってしまう。
しかし、「文書の意味理解」がなくとも、
よく整備された辞書とコーパスがあれば、
十分実用的だと判断できるレベルまで単語を抽出できる。
なにより、MeCab + IPADICという実用的な単語抽出機がすでに利用可能である。


単語による検索は、一般的にはタグによる検索よりは適合率が低くなるだろう。
コンピュータで単語を抽出することができるため、人間による処理を軽減できる。


N-gramの場合には、
「インド」で「インドネシア」が検索できちゃうよ問題のように、
一般的には単語による検索よりは適合率が低くなるだろう。
しかし、完全にコンピュータによる自動処理が可能である。


というわけで、検索の適合度の面から見ても、

タグ付け > 単語の抽出 >>>>(越えられない壁)>>>> N-gramの抽出

という順番が成り立っているのだ。


さて、
転置インデックスのレコード単位の選択によって、
検索精度は変わるという話をしてきた。
だが、それらのベースとなっている
転置インデックスというデータ構造は変わることはない。


いずれのレコード単位を採用するにせよ、
検索エンジンの開発では、
転置インデックスの作成・検索を高速に実装する必要がある。
というわけで、
Senna転置インデックスに関わる部分について、
さらなる高速化をやりたいなぁ、と考えているのでした。
(そこがオチかよ!というツッコミが入りそうだ)


もちろん自動タグ付けにも興味あるよ!あるよ!

*1:JiroSearchの実装はどうなっているか調べていない。