<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 第3回 情報検索の評価
この演習ページでは，既存のツールを使って各種評価指標を計算する方法について説明します．
参考文献
- 情報アクセス評価方法論 -検索エンジンの進歩のために-, 酒井哲也, コロナ社, 2015.
ライブラリ
この演習では，情報検索におけるさまざまな評価指標を計算するためのツールキットである NTCIREVAL のPython版である pyNTCIREVAL を使用します．
pyNTCIREVAL by 京都大学 加藤 誠 先生
NTCIREVAL by 早稲田大学 酒井 哲也 先生
NTCIREVALの説明を上記ページから引用します．
```
NTCIREVALは、様々な検索評価指標を計算するためのツールキットです。
NTCIRやTRECのad hoc文書検索タスクの他、diversified search resultsの評価やNTCIR-8コミュニティQAタスクの評価などにも利用できます。
NTCIREVALは例えば以下のような指標を算出できます
Step1:  なお，notebook上で $!$ の後の文字列はシェル（ターミナル）に対するコマンドと解釈され，シェルの出力がnotebookの画面に出力されます．
1. 評価データの準備
NTCIREVALおよびpyNTCIREVALでは，評価用のテキストファイルをプログラムに渡すことで，評価値を計算します．
../data/eval/ にサンプルデータを置いています． 
基本的に，ある手法のある検索課題に対する評価指標を検索するためには，以下の２つのファイルを準備する必要があります．
適合性評価ファイル（*.rel）
検索結果ファイル（*.res）
適合性評価ファイル
適合性評価ファイルは，ある検索課題に対するコレクション中の適合性評価結果を表すテキストファイルです． ../data/eval/q1.rel にサンプルデータを置いています．このファイル名は，検索課題$q_1$に対する適合性評価ファイルであることを意味しています（NTICREVALではファイル名に形式はありません．単純に利用者が分かりやすいため，山本がこのような名前をつけています）．
q1.rel の中身はこのようになっています．
Step2:  このファイルの一行の意味は，
文書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$ であることを表しています．
検索結果ファイル
検索結果ファイルは，ある手法のある検索課題に対する検索結果（つまり，ランク付けされた文書集合）を表すテキストファイルです．  ../data/eval/method1.q1.resにサンプルデータを置いています．
method1.q1.res の中身はこのようになっています．
Step3:  このように，検索結果ファイルはランキング結果を単純に文書IDで表します．たとえば，このファイルは， 検索課題$q_1$に対して $d_1, d_2, d_3$ の順で文書をランキングしたことを表しています．
2. 適合性ラベル付き検索結果ファイルの作成
適合性評価ファイルと検索結果ファイルを準備したら，次に適合性ラベル付き検索結果ファイルを作成します．このファイルはpyNTCIREVALの機能を利用して作成することができます．また，自身でプログラムを書いてこのファイルを作成することもできます． pyNTCIREVAL を用いて適合性ラベル付き検索結果ファイルを作成する場合は，以下のコマンドを実行します．
Step4:  シェルのパイプを用いているので，シェルについて詳しくない人は上記コマンドの意味がよく分からないかもしれませんが
pyNTCIREVAL label
は適合性ラベル付き検索結果ファイルを作成するためのコマンドです．
-r ../data/eval/q1.rel
は適合性評価ファイルの場所を指定しており，
&lt; ../data/eval/method1.q1.res
はpyNTCIREVALに，ラベルを付与して欲しい検索結果を渡しています．
上記コマンドを実行すると，
d1 L1
d2 L0
d3 L2
という結果が得られます．つまりこのプログラムは，検索結果ファイル中の各文書IDに対して，適合性評価ファイル中の対応する文書IDの適合性ラベルを付加しています．
ちなみに，上記コマンドだけでは適合性ラベル付き検索結果ファイルの内容が画面に出力されるだけです．この内容をファイルに保存するには，例えば以下の様にします．
Step5:  ```
../data/eval/method1.q1.rel
```
これもシェルのコマンドで，出力をmethod1.q1.relに書き込むという意味です．
Step6:  3. 評価指標の計算
適合性評価ファイルと，適合性評価付き検索結果ファイルが準備できたら，それらをpyNTCIREVALに渡すことで，各種評価指標を計算できます．
Step7:  コマンドの説明
pyNTECIREVAL compute
は評価指標を計算するためのコマンドです．
-g 1
<ASSISTANT_TASK:>
Python Code:
!pyNTCIREVAL
Explanation: 第3回 情報検索の評価
この演習ページでは，既存のツールを使って各種評価指標を計算する方法について説明します．
参考文献
- 情報アクセス評価方法論 -検索エンジンの進歩のために-, 酒井哲也, コロナ社, 2015.
ライブラリ
この演習では，情報検索におけるさまざまな評価指標を計算するためのツールキットである NTCIREVAL のPython版である pyNTCIREVAL を使用します．
pyNTCIREVAL by 京都大学 加藤 誠 先生
NTCIREVAL by 早稲田大学 酒井 哲也 先生
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
```
End of explanation
!cat ../data/eval/q1.rel
Explanation: なお，notebook上で $!$ の後の文字列はシェル（ターミナル）に対するコマンドと解釈され，シェルの出力がnotebookの画面に出力されます．
1. 評価データの準備
NTCIREVALおよびpyNTCIREVALでは，評価用のテキストファイルをプログラムに渡すことで，評価値を計算します．
../data/eval/ にサンプルデータを置いています． 
基本的に，ある手法のある検索課題に対する評価指標を検索するためには，以下の２つのファイルを準備する必要があります．
適合性評価ファイル（*.rel）
検索結果ファイル（*.res）
適合性評価ファイル
適合性評価ファイルは，ある検索課題に対するコレクション中の適合性評価結果を表すテキストファイルです． ../data/eval/q1.rel にサンプルデータを置いています．このファイル名は，検索課題$q_1$に対する適合性評価ファイルであることを意味しています（NTICREVALではファイル名に形式はありません．単純に利用者が分かりやすいため，山本がこのような名前をつけています）．
q1.rel の中身はこのようになっています．
End of explanation
!cat ../data/eval/method1.q1.res
Explanation: このファイルの一行の意味は，
文書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$ であることを表しています．
検索結果ファイル
検索結果ファイルは，ある手法のある検索課題に対する検索結果（つまり，ランク付けされた文書集合）を表すテキストファイルです．  ../data/eval/method1.q1.resにサンプルデータを置いています．
method1.q1.res の中身はこのようになっています．
End of explanation
!pyNTCIREVAL label -r ../data/eval/q1.rel < ../data/eval/method1.q1.res
Explanation: このように，検索結果ファイルはランキング結果を単純に文書IDで表します．たとえば，このファイルは， 検索課題$q_1$に対して $d_1, d_2, d_3$ の順で文書をランキングしたことを表しています．
2. 適合性ラベル付き検索結果ファイルの作成
適合性評価ファイルと検索結果ファイルを準備したら，次に適合性ラベル付き検索結果ファイルを作成します．このファイルはpyNTCIREVALの機能を利用して作成することができます．また，自身でプログラムを書いてこのファイルを作成することもできます． pyNTCIREVAL を用いて適合性ラベル付き検索結果ファイルを作成する場合は，以下のコマンドを実行します．
End of explanation
!pyNTCIREVAL label -r ../data/eval/q1.rel < ../data/eval/method1.q1.res > ../data/eval/method1.q1.rel
Explanation: シェルのパイプを用いているので，シェルについて詳しくない人は上記コマンドの意味がよく分からないかもしれませんが
pyNTCIREVAL label
は適合性ラベル付き検索結果ファイルを作成するためのコマンドです．
-r ../data/eval/q1.rel
は適合性評価ファイルの場所を指定しており，
&lt; ../data/eval/method1.q1.res
はpyNTCIREVALに，ラベルを付与して欲しい検索結果を渡しています．
上記コマンドを実行すると，
d1 L1
d2 L0
d3 L2
という結果が得られます．つまりこのプログラムは，検索結果ファイル中の各文書IDに対して，適合性評価ファイル中の対応する文書IDの適合性ラベルを付加しています．
ちなみに，上記コマンドだけでは適合性ラベル付き検索結果ファイルの内容が画面に出力されるだけです．この内容をファイルに保存するには，例えば以下の様にします．
End of explanation
!cat ../data/eval/method1.q1.rel
Explanation: ```
../data/eval/method1.q1.rel
```
これもシェルのコマンドで，出力をmethod1.q1.relに書き込むという意味です．
End of explanation
!pyNTCIREVAL compute -r ../data/eval/q1.rel -g 1:3 --cutoffs=1,3　< ../data/eval/method1.q1.rel
Explanation: 3. 評価指標の計算
適合性評価ファイルと，適合性評価付き検索結果ファイルが準備できたら，それらをpyNTCIREVALに渡すことで，各種評価指標を計算できます．
End of explanation
!pyNTCIREVAL compute -r ../data/eval/q1.rel -g 1:3 --cutoffs=1,3 < ../data/eval/method1.q1.rel > ../data/eval/method1.q1.eval
Explanation: コマンドの説明
pyNTECIREVAL compute
は評価指標を計算するためのコマンドです．
-g 1:3
は適合度$L1，L2$の文書に対する利得（Gain）を指定しています．この値はたとえばnDCGを計算する際に使用されます．今回は利得関数として， $g(i) = 2^{{\rm rel}_i} -1$を用いるので， $L1 = 1, L2 = 3$という利得を指定しています．
--cutoffs 1:3
は，指標を計算する際に検索結果上位何件まで考慮するか（@$k$）を指定しています．この場合，上位1,3件における指標がそれぞれ出力されます．
結果の見方
各指標の結果が出力されています．たとえば，nERR@0003は上位$3$件まで考慮した際のnERRの値を表しています（すなわち，nERR@$3$）．また，@$k$が付与されていない指標は与えられたランキング結果全てを考慮した際の評価値です． 
<span style="color:red">注意点として，本講義で示したnDCGの定義は MSnDCG版と呼ばれるnDCGの計算方法です．従って，本講義のnDCG@$3$に対応する指標はMSnDCG@0003になります．</span>
最後に，評価結果をファイルに保存するには，先ほどと同様に出力をファイルに書き込みます．
End of explanation
<END_TASK>