2017年9月12日火曜日

「当たる」検索エンジンを作るには

「当たる」検索エンジンって何でしょうか。

入力されたクエリ(キーワード)に沿ったページが出てくるもの。
これが当たる検索エンジンと言えるでしょう。

当たる検索エンジンを作る基礎が、インデックス数、形態素解析、評点(ランキング)の3つだと思います。

インデックス数は蓄積したWebページの数ですね。
インデックスに無いものは探すことができません。
ちなみに現在、ojizoのインデックスは1,400万件を超えています。
初期の商用検索エンジンぐらいの規模でしょうか。
Googleがダントツで凄かった理由の一つでもあります。
当時の検索エンジンは、Sunのワークステーションとインクトミなどの商用検索システムで構築されていました。
どっちも高価です。
対して、GoogleはGFS(Google File System)という、ホワイトボックス(組み立てパソコン)を大量にLANに接続して、大規模なインデックスを保存する仕組みを持っていました。
PageRankだけでなく、インデックスを安価に蓄積できる仕組みも持っていたんですね。

続いて、形態素解析。
普通に暮らしていたら、まず聞かない単語だと思います。
形態素解析。
これは、日本語のように単語が特定のルールで区切られない言語で必要な分野です。
英語はすべての単語がスペースで区切られるルールになっています。
すべて。100%。これはコンピュータには都合が良いルールです。
対して、日本語は明確な区切り文字がありません。
形態素を使わずに、単純に「京都」に合致する文書を「当たり」と見なすとどうなるでしょう。
「東京都」まで合致してしまいます。
このため、「京都」は京都だけど、「東京都」は京都じゃない、という処理が必要です。
これが形態素解析の概略です。
(実は僕もあまり詳しくないです)

最後に評点。クエリに対して一定のアルゴリズムで評価を加え、適合度順に並べます。
初期の検索エンジンは、単語の出現度合いや単語間の距離などで評価していました。
Google躍進のきっかけになったPageRankも評点のアルゴリズムです。
今のGoogleはPageRankの割合は低いと聞きます。
もっと複雑なアルゴリズムを使っているのでしょう。
ojizoの評価アルゴリズムは、ものすごく原始的で単純です。
ojizoでは、単純なアルゴリズムで満足のゆく結果を得るために、インデックスするコンテンツを限定する方向でサービスを組み立てています。
Googleと真逆の考え方ですね。

Fessは優れたパッケージで、すぐに検索システムを立ち上げることが可能です。
みなさんも、興味を持った分野から研究してはいかがでしょうか。