Edited at

Groonga勉強会 2016-05-20

More than 3 years have passed since last update.


前提知識


類似文書検索とは・・・

ある文書を入力として、それに類似している文書を出力する検索を「類似文書検索」といいます。

  (入力:ある文書) ー> (処理) ー> (出力:類似文書)

実際に検索する際にどのような処理が行われているかと言えば、文書から特徴語を抽出し、候補となる文書の集合に対してOR検索するイメージです。

特徴語を抽出する際によく使われる分け方として2種類あり、形態素とN-gramがあります。

N-gramの方が単純であるため結構使われますが、形態素の方がより言語を意識した分け方をするため、精度が高いです。

形態素に分ける際は、半角全角の違いや動詞の活用を同一単語として取り扱うか、別物として取り扱うか、最近では絵文字を絵文字として取り扱うか、あるいは日本語に変換して取り扱うかで精度が変わってくるようです。


精度とは・・・

精度の指標は2種類あり、適合率と再現率があります。


  • 適合率


    • 結果の中にどの程度正解が含まれているか。



  • 再現率


    • 正解のうち結果にどの程度含まれているか。




本題

今回のテーマは、勉強会参加者からの「入力である文書に対して、より多くの結果(類似文書)を出すためにはどうすればいいのか?」についてです。

それには特徴語の抽出処理をどのようにチューニングするかが肝になります。

しかし、これには若干の問題があり、より多くの結果を出す(=再現率を上げる)ために、ただ出力の量を増やしてしまうと、適合率が下がってしまい、結果的にユーザの利便性が下がり、ユーザが離れてしまいます。

では、どうすればいいのか?

出力である検索結果をどのようにソートするのかや、ユーザの動線を意識した補助機能の組み込みが実は肝だったりします。

誰もが日常的に使っている「Google」を例に考えてみます。

Googleの検索結果は再現率が高いですが、ユーザが離れないような工夫がされています。


  1. ソーティング

    Googleで検索した人は数万件に及ぶ大量の結果が出たとしても、それを全て見る人は皆無であり、大半の人が最初の数件しか見ません。

    そのため、ソーティングの精度を上げて、いかに最初の数件にユーザが望むものを出すかに心血を注いでいます。


  2. ユーザ補助機能

    それでも、ソーティングの精度が完璧ではないため、ユーザが欲しい情報が最初の数件に出ないこともあります。そのような場合に備えて、ユーザが次の一手を打てるように、おすすめの検索キーワードをレコメンドし、ユーザの次の動作を補助しています。



まとめ

類似文書検索の適合率や再現率を上げるのも大事ですが、ソーティングの精度を上げたり、ユーザの動線を意識した補助機能を充実させることも大事です。