検索結果のランク付け(スコアリング)を実装
懸案だった検索結果のランク付け(スコアリング)を実装しました。
変更前まではヒットした文字列をランダムに回答していました。
それはそれで突っ込みどころがあり、面白いという意見も頂けたのですが。
ランク付けルールについては以下のようにしました。
「○ジョージ」で検索した場合
が検索結果として挙がります。
自分の頭の中では「所ジョージ」が浮んでいました。
従って検索結果も「所ジョージ」を選んで欲しいところです。
安易な手法としてはGoogleの検索結果でヒットした数順に
並べてしまうことです。
試しにやってみましょう。
所ジョージぶっちぎり。さすがGoogle先生。さすが所さん。
でも「聖ジョージ > 柳ジョージ」なんですか。意外です。
しかし100万語超あるデータの検索数を予め検索し保存しておくのは
現実的ではなさそうです。
いつデータを更新すればいいのかという問題も発生します。
1秒に1回検索しても11.5日かかります。それ以上に迷惑もかかります。
悩んだ結果以下の方法を思いつきました。
キーワード加点方式と勝手に呼びます。
基本的な考えは以下の通りです。
という考え方です。
具体的な加点方法は
としました。足し算だけなので実装は簡単です。
そうなるとジョージ軍団の得点は以下のようになります。
所ジョージ、柳ジョージに差がありません。困りました。
加点要素を増やしてみました。
- 文章を解析し、単語が現れた場合 1回に付き +1点
としました。文章を食わせて学習させるわけです。
BLOG等の文章を大量に食わせたいのですが手元に無いので
Wikipediaの情報を食わせてみました。
実際に点数を確認してみましょう。
なかなかよさそうです。
なおスコアリングは検索時ではなく、データベース作成時に
行なっています。
検索速度を落とさないようにする為です。
○○理論だとかもうちょっと情報工学的なアプローチのほうがウケが良いかもしれません.
如何でしょうか、頭に浮かんだ言葉と検索結果は一致したでしょうか。
ご利用くださいまし.