この記事はランク学習(Learning to Rank) Advent Calendar 2018 - Adventarの4本目の記事です。
この記事は何?
前回の記事で、LightGBMを用いたランク学習によるランキングモデルを作りました。
www.szdrblog.info
機械学習モデルを作ったら、次にやるべきことはそのモデルの予測精度を確認することです。
*1
この記事では、ランク学習の予測精度を測る指標として、Mean Reciprocal Rank (MRR)・Mean Average Precision (MAP)・Normalized DCG (NDCG) を紹介します。*2
…といっても、この辺りの予測精度の話は非常に有名なので、解説記事はたくさん出てきます。なのでこの記事では、これらの予測精度にまつわる問題点もちょっとだけ紹介しようと思います。
ラベルが0 or 1の2値のとき
データセットに含まれる各文書のラベルが0 or 1の2値を取る場合を考えます。
例えば、「検索キーワード」と「文書」の各組に対して、人が見て「この検索キーワードなら、この文書は検索結果に現れて良い」と判断したら○、ダメなら×とラベルを付与していくことが考えられます。
人手による処理は非常に大変なので、ユーザーの行動ログが得られる場合は、例えば「検索キーワード」と「文書」の各組に対して、ユーザーがその文書へのリンクをクリックしたら○、クリックしなかったら×とラベルを付与することもできます。
ラベルが0 or 1の2値のときは、Mean Reciprocal Rank (MRR)・Mean Average Precision (MAP) による評価を行うことができます。
Mean Reciprocal Rank (MRR)
まずReciprocal Rank (RR) を紹介します。
…と言っても非常に単純な評価指標で、「検索結果を上から見ていって最初に○(=1)の文書が現れた順位がのとき、
」と定義します。
例えば以下のケースでは、検索結果の2位に最初のの文書が現れるため、
となります。
Reciprocal Rankは最初に○(=1)の文書が現れた順位しか気にしないので、他の○の文書の順位はReciprocal Rankの値に影響しません。
なので、以下のような奇妙な評価を行うときがあります。
順位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
ランキングモデルAで並べた際の文書のラベル | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
ランキングモデルBで並べた際の文書のラベル | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
ランキングモデルBはAよりも○(=1)の文書を検索結果上位に集めているので、直感的にはランキングモデルBはAよりも優れているはずです。
一方で、どちらのランキングモデルも1位に○(=1)の文書が現れているため、共にRR=1となってしまいます。
もちろん、検索サービスによってはReciprocal Rankによる評価が正しいケースもあるとは思いますが、本当にReciprocal Rankで評価して良いのかは検討した方が良いです。
さて、Mean Reciprocal Rank (MRR) ですが、これは単純に「検索キーワード」毎に求められるReciprocal Rankの値を平均した値となります。
Mean Average Precision (MAP)
「Precision@k」→「Average Precision」→「Mean Average Precision」の順に紹介していきます。
Precision@kは、「検索結果のk番目まで見たときのPrecision」として定義します。
例えば以下のケースでは、
- 検索結果の1番目まで見たとき、○(=1)の文書の数は0なので、Precision@1=0
- 検索結果の2番目まで見たとき、○(=1)の文書の数は1なので、Precision@2=1/2
- 検索結果の3番目まで見たとき、○(=1)の文書の数は1なので、Precision@3=1/3
- 検索結果の4番目まで見たとき、○(=1)の文書の数は2なので、Precision@4=1/2
となります。
次にAverage Precisionですが、「○(=1)の文書が現れる各順位について、Precision@kの値の平均を取る」として定義します。
例えば先ほどのケースですが、○(=1)の文書は検索結果の2番目と4番目に現れます。
そこで、Average PrecisonはPrecision@2とPrecision@4の平均であるとなります。
最後にMean Average Precision (MAP) ですが、これは単純に「検索キーワード」毎に求められるAverage Precisionの値を平均した値となります。
Mean Average Precisionの問題点について触れておきます。
"Some Common Mistakes In IR Evaluation, And How They Can Be Avoided", N. Fuhr, 2017で、Mean Average Precisionは以下のユーザー行動を仮定していると言っています。*3
1. users stop only after a relevant document, and
2. the probability of stopping is the same for all relevant ranks.
1つ目の仮定ですが、これはAverage Precisionが○(=1)の文書が現れる各順位のみで平均を取っていることに対応します。論文からは、1つ目の仮定についてはそこまで大きな問題では無さそうだと読み取れます。
While the first assumption might be approximately true in some applications (but how would users know when they have reached the last relevant document?)
問題は2つ目の仮定で、これはAverage Precisionが重みを付けず単純にPrecision@kの平均を取っていることに対応します。
一般的に、ユーザーは検索結果上位で目的の文書を発見したら、検索結果の下まで確認しにいく確率は小さくなります。にもかかわらず、Average Precisionは全てのPrecision@kを平等に扱って平均を取っています。
…じゃあ、どうしたらいいんだよという話ですが、論文中ではRank Biased Precision (RBP) を提案しています。*4
ラベルが多値のとき
データセットに含まれる各文書が「Perfect(4), Excellent(3), Good(2), Fair(1), Bad(0)」のように、多値を取る場合を考えます。
こちらも人手でラベルを振っても良いですし、ユーザーの行動ログを使ってラベルを振ることも考えられます(例えば、ユーザーの各文書に対する滞在時間からラベルを求めるなど)。
ラベルが多値のときは、まず出てくる評価指標としてNormalized Discounted Cumulative Gain (NDCG) があります。
Normalized Discounted Cumulative Gain (NDCG)
「Discounted Cumulative Gain (DCG)」→「Normalized Discounted Cumulative Gain (NDCG)」の順に紹介します。
高い値のラベルが検索結果上位に現れると嬉しいという気持ちから、DCG@kは以下のように形式的に定義されます。
表記が入り組んでいてややこしいですが、は検索結果
番目の文書のIDを表し、
は各文書のIDに対するラベルのリストを表しています。
また、は「ラベル
の文書の得点」を表し、
として計算されることが多いです。
- Perfect(4)では
点
- Excellent(3)では
点
- Good(2)では
点
- Fair(1)では
点
- Bad(0)では
点
というように扱います。
ですが、検索結果の下の方はあまり重要でないという気持ちから、
で計算された得点に与えるペナルティを表しています。
一般的には順位の文書について
と計算されることが多いです。
…数式で説明しても伝わりにくいと思うので、例を出して紹介します。
ランキングモデルのスコア順に文書を並べたとき、ラベルはとなったとします。
と
を各文書で計算し、
と求めることができました。
次にNormalized Discounted Cumulative Gain (NDCG) ですが、上で求めたDCGが0~1の間に収まるように正規化したスコアになります。
正規化ですが、文書を理想的に並べた際に得られるDCG(ideal DCG)で割ってあげます。
例えば上の例ですが、文書を理想的に並べたとき、ラベルはとなります。
この元でDCGを計算すると、が得られます。
さて、ランキングモデルのスコア順に並べた際には、でした。
なので、NDCGはと求められます。
さて、NDCGの厄介な点ですが、正直そこまでNDCGに課題は存在しないんじゃないかと思っています。
個人的に気になる点として、と
の任意性がありますが、上の定義で計算されることがほとんどです。
このあたりの話は、以前別の記事でも紹介しましたので、そちらをご覧ください。
まとめ
この記事では、検索結果の精度評価指標としてMRR・MAP・NDCGを紹介しました。
次の記事では、ランク学習が実際にどこで動いているのかなどの応用事例を紹介していきたいと思います。
参考
- Learning to Rank for Information Retrieval, T. Y. Liu, 2011