この演習ページでは,既存のツールを使って各種評価指標を計算する方法について説明します.
参考文献
この演習では,情報検索におけるさまざまな評価指標を計算するためのツールキットである NTCIREVAL のPython版である pyNTCIREVAL を使用します.
NTCIREVALの説明を上記ページから引用します.
NTCIREVALは、様々な検索評価指標を計算するためのツールキットです。
NTCIRやTRECのad hoc文書検索タスクの他、diversified search resultsの評価やNTCIR-8コミュニティQAタスクの評価などにも利用できます。
NTCIREVALは例えば以下のような指標を算出できます:
-Average Precision
-Q-measure
-nDCG
-Expected Reciprocal Rank (ERR)
-Graded Average Precision (GAP)
-Rank-Biased Precision (RBP)
-Normalised Cumulative Utility (NCU)
-上記各指標の短縮リスト版
-Bpref
-D-measures and D#-measures (多様性評価用)
-Intent-Aware (IA) metrics (多様性評価用)
pip
というPythonライブラリ管理ツールを使用してインストールします. ターミナル上で h29iroのフォルダに移動し,下記コマンドで pyNTCIREVAL をインストールしてください.
pip install git+https://github.com/mpkato/pyNTCIREVAL.git
正しくインストールできれば, notebook上で
!pyNTCIREVAL
と実行すれば,以下の様なメッセージが出力されます.
Usage: pyNTCIREVAL [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
Commands:
compute
label
In [1]:
!pyNTCIREVAL
なお,notebook上で $!$ の後の文字列はシェル(ターミナル)に対するコマンドと解釈され,シェルの出力がnotebookの画面に出力されます.
NTCIREVALおよびpyNTCIREVALでは,評価用のテキストファイルをプログラムに渡すことで,評価値を計算します.
../data/eval/
にサンプルデータを置いています.
基本的に,ある手法のある検索課題に対する評価指標を検索するためには,以下の2つのファイルを準備する必要があります.
適合性評価ファイルは,ある検索課題に対するコレクション中の適合性評価結果を表すテキストファイルです. ../data/eval/q1.rel
にサンプルデータを置いています.このファイル名は,検索課題$q_1$に対する適合性評価ファイルであることを意味しています(NTICREVALではファイル名に形式はありません.単純に利用者が分かりやすいため,山本がこのような名前をつけています).
q1.rel の中身はこのようになっています.
In [2]:
!cat ../data/eval/q1.rel
このファイルの一行の意味は,
文書ID 適合性ラベル
となっています. 文書IDは評価データ作成者が適宜付与したIDです.適合性ラベルは慣習上このような書き方をしており, L0 が不適合を表し,L1, L2 ... , 以降は適合性の度合い(適合度)を表します.今回は,適合度は3段階($\{0,1,2 \}$)のため,ラベルは$\{L0,L1,L2\}$の3種類です.4段階の適合度を用いる場合は,$\{L0,L1,L2,L3\}$をラベルとして用います.
たとえば, q1.relファイルの3行目の
d3 L2
は,文書ID $d_3$の適合度が $2$ であることを表しています.
In [3]:
!cat ../data/eval/method1.q1.res
このように,検索結果ファイルはランキング結果を単純に文書IDで表します.たとえば,このファイルは, 検索課題$q_1$に対して $d_1, d_2, d_3$ の順で文書をランキングしたことを表しています.
In [4]:
!pyNTCIREVAL label -r ../data/eval/q1.rel < ../data/eval/method1.q1.res
シェルのパイプを用いているので,シェルについて詳しくない人は上記コマンドの意味がよく分からないかもしれませんが
pyNTCIREVAL label
は適合性ラベル付き検索結果ファイルを作成するためのコマンドです.
-r ../data/eval/q1.rel
は適合性評価ファイルの場所を指定しており,
< ../data/eval/method1.q1.res
はpyNTCIREVALに,ラベルを付与して欲しい検索結果を渡しています.
上記コマンドを実行すると,
d1 L1
d2 L0
d3 L2
という結果が得られます.つまりこのプログラムは,検索結果ファイル中の各文書IDに対して,適合性評価ファイル中の対応する文書IDの適合性ラベルを付加しています.
ちなみに,上記コマンドだけでは適合性ラベル付き検索結果ファイルの内容が画面に出力されるだけです.この内容をファイルに保存するには,例えば以下の様にします.
In [5]:
!pyNTCIREVAL label -r ../data/eval/q1.rel < ../data/eval/method1.q1.res > ../data/eval/method1.q1.rel
> ../data/eval/method1.q1.rel
これもシェルのコマンドで,出力をmethod1.q1.relに書き込むという意味です.
In [6]:
!cat ../data/eval/method1.q1.rel
In [7]:
!pyNTCIREVAL compute -r ../data/eval/q1.rel -g 1:3 --cutoffs=1,3 < ../data/eval/method1.q1.rel
In [8]:
!pyNTCIREVAL compute -r ../data/eval/q1.rel -g 1:3 --cutoffs=1,3 < ../data/eval/method1.q1.rel > ../data/eval/method1.q1.eval
pyNTCIREVALの使い方は以上となります. pyNTCIREVALの本体であるNTCIREVALには,複数の検索課題に対する複数の手法の結果を一括で処理するようなプログラムも含まれています.興味がある人,あるいは実際に研究でそのような評価実験を行う可能性がある人は,ぜひNTCIREVALについても調べてください.
このページで用いた検索結果に対するpyNTCIREVALの出力のうち,MSnDCG@0003
とnERR@0003
が,講義資料の定義に従った計算と一致していることを確かめよ.つまり,nDCG@3とnERR@3を計算するプログラム書き,その結果がpyNTCIREVALの結果と一致していることを確認せよ.
演習課題1で扱った検索課題集合と検索結果に対して各自で評価用データを作成しpyNTCIREVALを用いて評価指標を計算せよ.そして, MRR,nDCG@3およびnERR@3の平均を報告し,それらの値の違いが各指標のどういった要因によるものか考察せよ.なお,演習課題1で扱ったコーパス以外で評価データを作成してもい.ただし,評価データはダミーデータでなく実際の何らかのランキングを評価したものとし,検索課題(クエリ)は3つ以上とする.
情報検索の評価指標にはさまざまなものがあり,今回の講義で扱わなかった指標も多い.たとえば, MAP(Mean Average Precision),RBP(Rank-Biased Precision), Q-measureなどがある.そこで,これらの指標について2つ以上調べ,どのような指標か説明するとともに,それを計算するプログラムを作成し,pyNTCIREVALの結果と一致することを確認せよ.
いずれかの方法で,ipython notebookのページ(.ipynbファイル)とそのhtml版を提出すること.
受け付けます
.