Getting Started
本チャレンジについて
対話破綻検出チャレンジの参加者は,人間と対話システムの対話データが与えられ,そこからシステムが文脈的に不適切な応答をした箇所を検出する(対話破綻検出)アルゴリズムを開発します.当サイトでは現在,対話破綻情報がアノテーションされている対話データ(json形式)が公開されており,このデータを学習用・開発用に使用することができます.チャレンジの参加者には,対話破綻情報が付与されていない対話データが後日配布され,そのデータの破綻検出結果を用いて開発したアルゴリズムの性能を競います.
当サイトでは,ベースラインとなる破綻検出プログラム,および破綻検出結果を評価するための評価スクリプトを公開しています.
以下ではそれぞれの使い方について解説します.
対話データと検出する対話破綻について
当サイトで配布している対話データには,1つの対話システムの発話に対し,複数のアノテータが付与した複数の対話破綻情報が付与されています.対話破綻情報はO(破綻ではない),T(破綻とは言い切れないが,違和感を感じる),X(破綻)の3種類となっています.例えば,公開しているデータのうち,init100の対話データでは,1つの発話に対し24名のアノテータがアノテーションを行っていますので,ある発話に対し,3名がO,6名がT,15名がXを付与したといった情報が発話ごとにアノテーションされています.チャレンジの参加者は各発話に対して多数を占めるアノテーションは何かを当てる(先の例では,Xが正解となる)と同時に,3種類のそれぞれの割合(先の例では[0.125, 0.250, 0.625]が正解となる)を当てるタスクに取り組むことになります.
実行環境
ベースラインプログラム,および評価スクリプトの実行には,以下がインストールされている必要があります.
Java 1.7以上
Python 2.7.x
プログラムの実行はコマンドプロンプト(Windows) / ターミナル(Mac, Linux)上で行います.それぞれのプログラムが正しくインストールされているかは以下のコマンドを実行することで確認できます.
$java -version
$python -V
実行した結果,バージョン情報が表示されない場合は,インストールされていないか,もしくはパスが通っていない可能性があります.
ベースラインプログラムの実行方法
本プログラムは,対話中の各発話に含まれる単語(Bag-of-Words)を素性とし,Conditional Random Fields(CRF)により対話の破綻を検出します.
実行方法は以下の通りです.
まず,(対話データ),ベースラインプログラム(baseline.zip),評価スクリプト(eval_script150730.zip)をダウンロードしてください.
baseline.zipを解凍してできたbaselineディレクトリ内にeval_script.zipにあるeval.pyを配置してください.
次に,(データファイル)を解凍してできたinit100ディレクトリ内の100個のjsonを2つに分け(例えば50個ずつ),それぞれ baseline/train/ と baseline/test/ ディレクトリに入れてください.
ディレクトリ構成は以下のようになるはずです. 以下の例では,init100のデータを名前順にソートし,先頭の50個(1407219916log.json~1408219169log.json)をbaseline/train/ に,残りの50個(1408261480log.json~1409463385log.json)を baseline/test/ に配置しました.
baseline/
| sampleTagger.jar
| eval.py
├ train/
| | 1407219916log.json
| | 1407287164log.json
| | ・・・
| └1408219169log.json
└ test/
| 1408261480log.json
| 1408278293log.json
| ・・・
└11409463385log.json
では,baseline/train/ 内のデータを学習データとし,baseline/test/ 内のテストデータに対して破綻検出を行います.ターミナルでbaselineディレクトリに移動し,以下のコマンドを実行してください.
$java -jar SampleTagger.jar -l ./train/ -p ./test/ -o ./out/ -t 0.5
上記のコマンドを実行すると,破綻検出結果が baseline/out/ に書き込まれます.結果はテストデータの個数分,jsonファイルとして出力されます.参加者には,これと同じフォーマットのjsonファイルを提出していただきます.提出フォーマットの詳細についてはこちら.
評価スクリプトの実行方法
本スクリプトは,破綻検出アルゴリズムが出力した破綻検出結果と,その正解データである対話データに対するアノテーションを照合することにより,アルゴリズムの性能評価を行います.
実行方法は以下の通りです.
上で行ったベースラインプログラムによる破綻検出の結果を評価します.以下のコマンドを実行してください.
$python eval.py -p ./test/ -o ./out/ -t 0.5
正解データに関する情報と破綻検出の性能評価結果が表示されます.なお,正解データに関する情報の「O ~ X Label Num」は,アノテータ間の多数決により決定されたラベルの数を意味しており,実際に対話データに含まれている複数人によって付与されたアノテーションの総数とは異なる値です.また,評価項目の詳細についてはこちらを参照してください.
######### Data Stats #########
File Num : 50
System Utterance Num : 550
O Label Num : 460
T Label Num : 33
X Label Num : 57
######### Results #########
Accuracy : 0.818182 (450/550)
Precision (X) : 0.348837 (15/43)
Recall (X) : 0.263158 (15/57)
F-measure (X) : 0.300000
Precision (T+X) : 0.733333 (33/45)
Recall (T+X) : 0.170984 (33/193)
F-measure (T+X) : 0.277311
JS divergence (O,T,X) : 0.268677
JS divergence (O,T+X) : 0.248749
JS divergence (O+T,X) : 0.124489
Mean squared error (O,T,X) : 0.129114
Mean squared error (O,T+X) : 0.223539
Mean squared error (O+T,X) : 0.094419
###########################