Skip to content

Instantly share code, notes, and snippets.

@hiroyuki-sato
Last active November 9, 2015 04:26
Embed
What would you like to do?
Groonga勉強会

勉強会(Groonga精度について) 2015/11/6

検索精度

  • 利用者の満足度を上げること。
  • 満足度は検索をする人によって異なる。
    • 特許の場合: 漏れがないことが大事
    • Webの検索の場合: 探しているドキュメント

再現率と適合率を考える。

AAA

再現率

  • もれなく検索できているか?
    • Groongaを検索した場合
    • 漏れがなければ、余計な文字が入っていても100%になる。
    • 緑と黄色のGroongaが全部含まれていれば再現率100%
    • 緑のGroongaだけ含まれていたら4/5: 80%
    • 16個のキーワードが含まれていても100%
  • 適合率
    • 正しい文書がヒットした件数
    • 緑と黄色のGroongaだけヒットした場合、100%
    • 緑と黄色のGroongaとRroongaがヒットした場合: 5/6: 83%
    • 全部の文字がヒットした場合: 31.2%
  • 一般的に適合率が上がれば再現率が下がる。その逆もしかり

Webの検索等の場合(現実的には...)

  • 適合率が悪くても、探している文書が先に並んでいれば良い。
  • 並べ替えの方法 -> ランク付け(スコアによる評価)
  • 左が良い検索結果、右が悪い結果

ランク付け、スコア付けをする方法

  • ドキュメント内の単語の頻度を利用する。
    • TF
    • TFIDF
    • BM25
  • タグを評価に使う
  • 被リンク率(PageRankなど)

文書の重み付け

  • TF

    • Term Frequency 単語の出現回数
    • 単語の出現回数が多ければ良い
  • TFIDF

    • Term Frequency、単語の出現頻度)とidf(英: Inverse Document Frequency
  • BM25

    • 自分で調べる。
    • 文書の長さを考慮する。短い文書ほど重要
  • 文書(あるいは)100個ある

  • 100個の文書に「こんにちは」という文字が含まれている。

    • あまり重要な単語ではない
  • 100個の文書の中に、「Groonga」という文書は2個しかない

    • 重要なキーワード

TFIDFの計算

例として次のような文書があると考える。

No 文書1 文書2 文書3
1 こんにちは こんにちは こんにちは
2 こんにちは こんにちは こんにちは
3 こんにちは こんにちは こんにちは
4 こんにちは こんにちは こんにちは
5 こんにちは rroonga mroonga
6 全文検索 ruby mysql
7 groonga groonga groonga

それぞれの単語数は次のようになる。

単語 文書1 文書2 文書3
こんにちは 5 4 4
groonga 1 1 1
全文検索 1 0 0
ruby 0 1 0
rroonga 0 1 0
mysql 0 0 1
mroonga 0 0 1

TF計算

  • ざっくりいうと、計算式は、対象の単語数/全体の単語数である
  • 単語の頻出数だけを見ると単語数が多いほどTF値が高くなる
  • 文書1の「こんにちは」TF計算
    • こんにちはの文字数: 5
    • 全体の単語数: 7
    • TF値: 5/7 = 0.71...
  • 文書1の「全文検索」のTF計算
    • 全文検索の文字数: 1
    • 全体の単語数: 7
    • TF値: 1/7 = 0.14...
  • TFの値では、「こんにちは」の方が「全文検索」よりも良いスコアとなる

IDF値

  • ざっくりいうと、計算式は、全体の文書数/対象のキーワードの含まれる文書数である。
  • 実際の計算にはlogを使うが簡略化した方がわかりやすいので例では利用しない。
  • 文書全体で、単語数が少ない方の数値が大きくなる
  • 文書1,文書2,文書3三つのIDF値を計算する
  • 文書1 ~ 文書3のこんにちはIDF値
    • 文書数: 3
    • こんにちはが含まれる文書の数: 3
    • IDF値: 3/3 = 1...
  • 文書1 ~ 文書3の全文検索のIDF値
    • 文書数: 3
    • 全文検索が含まれるの文書の数: 1
    • IDF値: 3/1 = 3
  • 「こんにちは(1)」より「全文検索(3)」の方が数値が高く文書を特徴付けているとわかる。

### TF IDFの計算(だいぶ怪しい)

  • TF IDFの計算
  • TFとIDFの値をかける(らしい)
  • 上記の例の場合(TFは文書1のみ、IDFは文書1~3)
    • こんにちは: TF: 0.71 * IDF: 1 = 0.71
    • 全文検索: TF: 0.14 * IDF: 3 = 0.42
    • この計算で、文字が多ければ良いとなるわけではないことがわかる。

AND&ORの場合

  • そのうち書くかも

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment