Edited at

Groongaで学ぶ全文検索 2015-11-06

More than 3 years have passed since last update.


検索の精度を上げる


精度とは?みんなのイメージ


  • ユーザーの満足度

  • 思ったものが探せているかの度合い

  • 漏れ無く検索できるか

  • ゴミが無い

で大体合っている


全文検索の精度の指標


  • 全文検索の精度の指標として再現率、適合率の2つを指標とする事が多い

  • どちらも高い方が精度が高い


再現率:答えをどれ位見つけられているかの度合い、全てあるうちの答えがどれ位含まれているかという事

みんなのイメージのうち、もれなく=再現率が高いという事

例)

ドキュメントに存在するキーワドが3つ中3つヒットする場合100%

3つ中2つなら66%


適合率:ハズレが入っていない確率

ゴミが無い=適合率が高いという事


現実は

・ どちらも高くするのは難しい

・ モノによって求められる精度の高さが異なる

→Web検索の場合など最初の方しか見ないのでゴミがあっても

最初の方のデータの精度が高ければ良い

→特許などは漏れがある方が問題なので再現率が高い方が大事


実際に精度を上げる方法

Webなどの場合には各ベージの重要度に応じて文書に対するスコアをつける、「スコアリング」で精度を上げる事ができる。


スコアリングの例


1.TF:単語の出現回数


  • 文書の中にたくさんキーワードが含まれている程関連しているという考え


2.TFIDF=TF/DF


  • 色々な文書に含まれている単語は重要では無く、
    少ない文書に含まれているものほど関連があるため重要という考え

  • DF=単語が含まれているドキュメント数

  • TFは大きい方が重要

  • DFは小さいほうが重要

例)

A:100のキーワードが存在/10000の文書に存在=1/100

B:2つのキーワードが存在/1つの文書に存在=2

→Bの方が重要と判断する


3.BM25


  • 文書の長さも考慮する


キーワード以外で精度を上げる方法

キーワードだけを使うのは限界がある。

メタデータ(他の関連する情報)も使った方がより精度が上がる。

例)

・ リンクの参照回数

・ タグ

・位置情報(現在地に近いほうが大事など

・検索したユーザーの情報なども使える

・訪問したことあるページを上位に出す

・下記のようにキーワード毎にランク付けして海鮮のランクが高いものを重要とする

居酒屋A 海鮮 10

居酒屋B 海鮮 5

居酒屋C 中華 10


Groongaは

TF、TFIDF、TF limitありなどが使える。

TF limitありとは


  • スパム情報が入るとアテにならない場合があるため、ある程度まででlimitを決めて利用する


  • limitはユーザーが指定できる