今日のお題は類似文書検索とその精度を上げる方法についてでした。
類似文書検索の仕組み
いつもの入力
→処理
→出力
で考えると
「入力」はある文書
「出力」は入力した文書に類似した文書
「処理」は類似している文書を検索する処理になるが、中身は下記を行っている。
1.他の文書には無く、その文書に含まれている語を特徴語として抽出する
2. 特徴語をOR検索する
→特徴語を含む文書=入力した文書に類似した文書
特徴語の抽出には
- 辞書を使って日本語を良い感じに分ける仕組みの形態素解析を使う。
- 辞書の精度を上げるの大事
例)
新しい言葉を登録するなど
精度について
適合率:正解率(数をうつと下がる)
再現率:欲しかったものがどれだけ入っているか(数うてば当たる)
→漏れなく検索できてるかなどはこちらが重要。
- 上記2つはトレードオフの関係なので
似たような文書を検索するシステムではリリース初期はデータが少ないので再現率を高くしてヒット率を上げ、
データが増えたら適合率を上げてデータを絞り込むのがユーザーにとって良さそう - 検索エンジンなどでは再現率を高めつつ、適合率の高い結果
を優先的に上位に表示させることで、
よりユーザーが探したいものを先に表示し、ノイズが入っても影響を少なくしている - 検索結果が思ったものでは無かったユーザー向けに関連キーワードをページ下部に表示して、ユーザーの次の手を広げるなどのやり方もある
特徴語の抽出のカスタマイズ
- 特徴語を増やして再現率を上げたい
→特徴語を増やすと一般的な語が混ざった場合にノイズが増えるので、文書に紐付いたメタデータを使ってより欲しい文書を表示する必要がある。
例)
- 最近見たもの
- 時間が近いもの
- お気に入りに入れているもの
などのスコアを高くするなどスコアリングに工夫が必要になる
Mroongaで特徴語をカスタマイズするには
-
*SS プラグマを使ってGroongaのすべての検索機能を使えるスクリプト構文を使うhttp://mroonga.org/ja/docs/reference/full_text_search/boolean_mode.html#ss
-
登録はMroonga,検索はGroongaサーバーとHTTPプロトコルで通信するプログラムであるgroonga-httpdを使っても良さそう
http://groonga.org/ja/docs/reference/executables/groonga-httpd.html#groonga-httpd