note_表紙

古典的な情報検索の課題とその解決方法 ランキング編

こんにちは!
IT企業でデータ活用プロダクトの開発に従事しているrilmayerです。
この記事はアドベントカレンダー「Search&Discovery 全部俺」5日目の記事となります。

本日は昨日に引き続き、情報検索の古典的な課題やどのような研究分野があるかを紹介していきたいと思います。

前回はインデックスを構築することによって、より効率的にアイテムの集合を取り出せるという話をしました。
今回はその後の情報検索の発展についてお話したいと思います。

ヒットするアイテムが多すぎると言う課題

さて、前回お話したインデックス構築による検索を行った場合、関連するアイテムの集合をより効率よく取り出すことはできました。
しかし、関連するアイテムをうまく取り出せたとしても、取り出したアイテムが多すぎる場合はニーズに合致するアイテムと出会える可能性が低くなります。そうなるとSearch&Discoveryの目的が達成できなくなってしまう可能性があります。

そこで、ヒットしたアイテムが多すぎる場合に取り出したアイテムをより良い順番に並べるという「ランキング」という考え方が重要になってきます。

アイテムが多すぎるなら重要度順に並び替えれば良い

今では「いかにしてGoogleのランキングで上位を取るか?」など一般的な考え方になっていますが、このランキングは様々な方法によって実現されます。

現在ではアイテムの集合を取得する際にほとんどの場合で何らかの方法に基づいたランキングが行われています。

古典的なランキング ゾーン(フィールド)別の重み設定

古くから使われている方法として、アイテムの「ゾーン」によって重要度を決めてそれらの掛け合わせで並びかえを行うというものがあります。
この方法は非常に簡単ながら非常に直感的で分かりやすいなため、現在でもよく使われるランキングの方法です。

ゾーンといのはアイテムに付与される情報のことで、フィールドなどとも呼ばれます。以下のようなものがゾーンの例になります。

:タイトル、著者、目次など
音楽:題名、アーティスト名、再生時間など
ウェブページ:h1タイトル、pタグ、メタディスクリプション

このゾーンをもとに、どのゾーンがどのくらい重要かというのを事前に設定しておくことによってヒットしたアイテムを並び替えることができます。

例えば、本の検索をすることを考えて、重みとして以下のような設定をした場合、

タイトル:目次:著者=3:2:1

検索結果の点数(スコア)は以下のように計算できます。

・タイトル:含まれる
・目次:含まれない
・著者:含まれない

→ 3 × 1(タイトル) + 3 × 0(目次) + 3 × 0(著者) = 3点

以下のような文書群では以下のような得点になります。

画像5

こうして各文章について点数を計算していって得点の高い順に並べることによってランキングを得ることができます。

画像6

古典的なランキング 単語の出現頻度を数える方法

文章ごとに単語の重みが異なると言うことも考えられます。
例えば「犬」と言う単語が100回出てくる文章はおそらく「犬」と言う単語が1回しか出てこない文章に比べて犬について書かれている度合いが高いでしょう。
例えば、以下のような文章群があった場合を考えます。
各単語が各文章で何回出現したかを表しています。

画像1

ここで「地下アイドル」と言うキーワードで検索した場合、文章C, D, Eの3つがヒットすることになります。
今回はそれぞれの単語の出現頻度がわかるので、出現頻度順に並べることができるわけです。

画像2

この単語の頻度に基づくランキングは先ほど紹介したゾーンの重みを用いる方法と一緒に使うことができます。
組み合わせて用いることでより良いランキングを作ることができます。

古典的なランキング TF-IDF

さて、上記の方法では暗に「全ての単語は等しく重要である」と言う考えが含まれていますが、本当にそうでしょうか?

例えば、文章を検索するようなシステムでは「養老律令田令」といった専門的な単語については、専門的な書籍ほどその単語が利用される頻度(率)が高くなると考えられ、そうしたとある文章で利用率が高い単語ほど重要とみなしたいです。
一方、「私」と言う単語は頻出することが考えられますので、こう言った多くの文章に共通して登場する単語は重要とはみなしたくはありません。

こうした特性を数式で表したものがTF-IDFと言う考え方になります。
TF-IDFについてはこちらのページが分かりやすく解説しています。

このTF-IDFを用いることによって、各文章での単語の重要度をより良く求めることができます。
そうして、先ほど同じようにヒットした文章についてそれらの指標を元に並び替えることによってランキングを得ることができます。

この文章全体の単語出現情報を用いて特定文章内の単語の重要度を決定するTF-IDFと言う方法は現在でも広く使われています。これは、良い検索が得られると言うことが経験的に知られていることにもよります。

古典的なランキング ベクトルスコア

実はここまで見てきた単語-文章のインデックス表現については、単語×文章の行列とみなすことができます。
例えば、上記で見たように各文章でどの単語が何回出現したかと言う情報を元に、行列(ベクトルを束ねたもの)を考えることができます。

スクリーンショット 2019-12-06 0.34.38

こうした文章をベクトルとして表現したものをBag of Wordsモデルと言ったりします。

そしてこれらの文章はベクトルなので、ベクトル空間で考えることができます。例えば(「私」の出現頻度, 「好き」の出現頻度, 「寿司」の出現頻度)で表現される空間は以下のようになります。

スクリーンショット 2019-12-06 0.35.04

文章をベクトルで表現することによって、数学の世界の様々な演算を適用することができるようになります。
数学的な演算の一つでとても有用なものが「距離」の計算です。
2つのベクトル間の距離は「内積」として求めることができるので、クエリと文章ごとの内積を計算し、その距離が近い順に並べることでランキングを作ることができます。

機械学習を用いた検索結果の最適化

「Learning to Rank」として情報検索に機械学習の技術が応用されています。
例えばユーザーが最適だと判断したようなデータセットを作成し、その並び方を学習し、マッチするように検索結果を並び替えると言った方法がそれに当たります。

先ほど紹介した「ゾーンの重要度」についても機械学習によって最適化することができますし、それぞれの単語の重要度、そもそも単語に匹敵する新しい概念など学習によって取得していくことができます。

おわりに

本日は情報検索の重要な要素である「ランキング」についてその古典的な課題や解決策を紹介しました。ここでは紹介できていませんが、確率論に基づいたランキング等も使われております。

ランキングを知って、よりSearch&Discoveryを身近に感じていただけると嬉しいです。
お読みいただきありがとうございました。

参考図書

今日の話もだいたいこの本に書いてます。


この記事が気に入ったらサポートをしてみませんか?