1, 2, のユーザーは検索クエリを入力することができないため、彼らに対してはランキングやオススメ通知など受動的に情報を受け取れる方法を検討する。 3, 4, のユーザーは全文検索システムによるナビゲーションを検討する。
特に上級ユーザーには検索対象の項目ごとに検索ワードを指定できる詳細検索を提供してもよいが、システムとして複雑になってしまうことに注意する。
逐次検索 (grep) では、複数のデータを順次検索していくことで検索対象となる文字列を探し出す。
ある文字列の中から別の文字列を高速に検索するアルゴリズムには以下のようなものがある。
事前のインデックスを必要としないが、検索時に全ての検索対象を順次走査していくため検索対象の増加に伴って検索速度が低下する。 そのため、大抵の検索サービスでは後述のインデックス型検索が使われる。
インデックス型検索では、あらかじめ検索対象を走査しておき、高速な検索ができるようなインデックス (転置インデックス, 後述) を作成しておくことで検索時のパフォーマンスを向上させる。
以降、検索対象のことを文書 (document) と表記する。
インデックス型検索のインデックスには転置インデックスが使われる。 転置インデックスは、単語に対してそれを含む文書集合を保持するデータ構造である。
検索処理を高速に行うには、転置インデックスを複数のノードに分散配置し、並列で検索を行う。
転置インデックスの分割 (パーティショニング) 方法には以下の2通りがある。
転置インデックスを参照するキー (単語) のことをターム (term) という。
文書に対して転置インデックスを作成するには、文書中に含まれる単語 (以下、トークン, token) を抜き出す必要がある。 文書に含まれる文をトークン単位で分解することをトークナイズ (tokenization, segmentation) という。
トークナイズを行う方法は以下の2つがある。
トークンとタームの違い
トークン (token) はトークナイザが出力する文書中の単語情報で、単語の文字列だけでなく文書中の位置情報をもつ。 一方、ターム (term) は単語の文字列のみをもち、転置インデックスを参照するキーとなる。
形態素解析とN-gramの併用
インデックス型検索では、タームが文書に含まれていても、転置インデックスに登録されていなければ検索結果に現れない。 よって、タームが形態素解析の辞書にない場合に備えてN-gramを併用することもある。
予め辞書登録したシノニム (同義語, synonym) に基づいて単語を変換する (ex. 地下ドル → 地下アイドル)
ストップワード (stop word) は、検索の対象外となる単語のことであり、大半の文書に含まれている単語から構成される。 (ex. です, ます)
ステミング (stemming, lemmatisation) は、形態素解析で抽出した単語の語形を辞書系にする処理のことである。 (ex. 会った → 会う, met → meet)
日本語の形態素解析や検索シノニム, ステミングで用いられる代表的な辞書に NEologd がある。 週2回で更新され、新語や固有名詞に強いという特徴がある。
検索システムを継続的に改善するために、検索結果にユーザーが求めるものがどれだけ含まれるかをフィードバックし、検索結果を定量的に評価する必要がある。
検索を「ある文書を検索結果に含めるかどうか」を決定する過程と考えると、検索は分類問題に帰着でき、検索結果は分類問題と同じように評価できる。
検索結果に含まれる | ユーザーが求めている | 呼称 |
---|---|---|
Yes (Positive) | Yes | TP (True Positive) |
Yes (Positive) | No | FP (False Positive) |
No (Negative) | Yes | FN (False Negative) |
No (Negative) | No | TN (True Negative) |
参考: 混同行列 - Wikipedia
ユーザーが求める文書と検索結果を混同行列で表す
混同行列を用いると、ユーザーが求める文書と検索結果は以下のように表せる。
以下、ユーザーが求める文書を正解文書と表記する。
適合率 (precision) は、検索結果が含む正解文書の割合であり、検索の正確性の指標である。
再現率 (recall) は、正解文書が検索結果に含まれる割合であり、検索の網羅性の指標である。
適合率と再現率はトレードオフの関係にあるため、検索結果の総合的な評価にはそれらの調和平均である Fβ値 (Fβ-measure) が主に用いられる。
検索クエリに複数のタームが与えられたとき、それらを全て含む文書のみを検索結果に含める (AND検索) か、いずれかのワードを含む文書を検索結果に含める (OR検索) かの2通りがある。
AND/OR | 検索処理 | 適合率 | 再現率 |
---|---|---|---|
AND | 速い | 高 | 低 |
OR | 遅い | 低 | 高 |
OR検索における検索後の導線
再現率の高いOR検索では検索結果が膨大となり、ユーザーが有する情報処理の許容容量を超える予想される。 そのため、検索結果画面にフィルタやナビゲーションリンクを充実させ、検索後の導線におけるUXの改善を図る。
また、SolrやElasticsearchの標準機能であるファセット (facet) を使うと、フィルタごとにそのフィルタを加えて検索したときのヒット数を取得して表示することができる。
文書をスコアリングし、スコアに基づいてソートした検索結果を返すことで、特にユーザーが求めている (と考えられる) 文書を検索結果の上位に表示する。
TF-IDFは文書に現れるタームの重要度を評価する文書のスコアリング手法の1つであり、文書 のスコアは次のように算出される。
\text{TF-IDF}=\frac{D\,\text{中のタームの出現回数}}{D\,\text{中のワードの総数}}\cdot\log\frac\text{文書数}\text{タームを含む文書の数}Point
\frac\text{文書数}\text{タームを含む文書の数} はIDF (Inverse Document Frequency, 逆文書頻度) と呼ばれる。
IDFを乗ずることにより、多くの文書に出現するターム (例: 日本語の 〜です
, 〜ます
, 英語の a
, the
) のスコアは下がる。
つまり、TF-IDFのIDFは一般語フィルタとして機能する。
LuceneベースのOSS全文検索システム。Elastic社が中心となり開発している。