リーダーボードへの投稿
リーダーボードへの投稿は,質問応答システムの Docker イメージを,Web サイトを通じてアップロードすることにより行います.リーダーボードへのアクセス方法やアカウントの発行方法は,AI王 Slack ワークスペース内にて告知いたします.
Docker イメージの要件
投稿される Docker イメージは,以下の要件をすべて満たすものとします.
要件1: 推論スクリプト ~/submission.sh を含むこと
Docker イメージは,与えられる質問データに対して推論を行うスクリプト ~/submission.sh が含まれており,以下のコマンドで実行可能であることとします.
ここで, <input_file> はシステムに入力される質問データで,以下のような形式の,質問ID qid と質問 question を要素にもつ JSON Lines (jsonl) フォーマットであるとします.
出力する <output_file> は,以下のような形式の,質問ID qid とシステムが予測した解答 prediction を要素にもつ JSON Lines (jsonl) フォーマットであるとします.
なお、出力する <output_file> は, ~/submission.sh を実行するユーザと同じユーザが直接書き込むこととします.異なるユーザが書き込んだ場合,permission error により自動評価が失敗します(対象となる投稿は評価失敗によりリーダーボードの評価対象にはなりません).
要件2: モデルの動作に必要なすべてのファイルを含むこと
Docker イメージには,モデルの動作に必要なファイル(単語ベクトルや文書集合など)がすべて含まれており,それ単体で動作可能であることとします.
Docker イメージ内から,イメージの外側にあるファイルをダウンロードすることなどは不可とします.
(実際に評価時には外部との通信は全て遮断される設定になっています)
要件3: gzip 圧縮された Docker イメージのサイズが 30GiB 以内であること UPDATE
30GiB = 30 * 1,024 * 1,024 * 1,024 = 32,212,254,720 Bytes です
注意: 今後ファイル容量上限を変更する可能性があります
Docker イメージの保存・圧縮は,以下のコマンドで行います.圧縮後のファイル(以下の例では image.tar.gz )がサイズ制限の対象となります.
参考: 圧縮前のDocker イメージのサイズは,以下のコマンドで確認することができます.
要件4: gzip 圧縮された Docker イメージの中に manifest.json が含まれ "RepoTags" の項目に値が1つだけ設定されていること UPDATE
docker save した際に manifest.json というファイルが通常自動的に含まれます.そのファイル (JSON 形式) の中に "RepoTags" という項目があり,その値として repository 情報(例えば, "aio2-tfidf-baseline:latest" など)が1つだけ設定されている必要があります(null や空文字は不可).これは,リーダーボードでの自動評価を行うために仕様上必要なものであり,値を提出ファイル名に合わせるなどの必要はありません.
manifest.json の内容は,以下のコマンドにより確認することが可能です.
開発の過程で複数のタグの Docker イメージが作られていた場合, docker save したファイルに複数のイメージが含まれ, manifest.json の "RepoTags" にも複数の値(例: <image_name>:v1 と <image_name>:latest など)が設定されている場合があります.その場合は,タグ名を指定して docker save をやり直してください.
Docker イメージの構築例
aio2-tfidf-baseline を用いた例
TF-IDF を用いたベースラインシステム の Docker イメージの構築例を以下に示します.
1. モデルの訓練
訓練スクリプト train.py を用いて TF-IDF のモデルを訓練します.手順について詳しくは README.md をご覧ください.
2. Docker イメージのビルド
Dockerfile を用いて,Docker イメージをビルドします.
Tips: 以下の工夫により,イメージのサイズを削減することができます.
apt-get install する時は最後に rm -rf /var/lib/apt/lists/* を行う
pip install する時は --no-cache-dir を指定し,キャッシュファイルが生成されるのを防ぐ
そのほか,公式の Best practices for writing Dockerfiles も参考にしてください.
3. Docker イメージの動作確認
開発用データセット aio_02_dev_unlabeled_v1.0.jsonl を使って,Docker イメージの動作確認をします.
4. Docker イメージの保存・圧縮
Docker イメージが正しく動作することを確認できたら,イメージをファイルに保存・圧縮します.
AIO2_DPR_baseline を用いた例
DPR を用いたベースラインシステム の Docker イメージの構築例を以下に示します.
1. 質問応答システムの動作に必要なファイルの準備
推論時にシステムが参照できるよう, model/ ディレクトリ以下に,モデルや文書ベクトルのファイルを配置します.
詳しくは model/README.md をご覧ください.
2. Docker イメージのビルド
Dockerfile を用いて,Docker イメージをビルドします.
Tips: 以下の工夫により,イメージのサイズを削減することができます.
apt-get install する時は最後に rm -rf /var/lib/apt/lists/* を行う
pip install する時は --no-cache-dir を指定し,キャッシュファイルが生成されるのを防ぐ
そのほか,公式の Best practices for writing Dockerfiles も参考にしてください.
リーダーボードの自動評価システムでは外部への通信が遮断されるため,Docker イメージ内で Hugging Face Transformers などのライブラリを用いる場合は,実行時にモデルやトークナイザがダウンロードされることがないよう,あらかじめファイルがダウンロードされている必要があります.あわせて,ライブラリが外部への通信を試みることによるエラーが発生しないよう,設定をしておく必要があります.
例えば, Dockerfile を用いてイメージをビルドする場合には,以下のような内容を Dockerfile に記述することで,必要なファイルをあらかじめダウンロードし,Docker イメージに含めることができます.
3. Docker イメージの動作確認
開発用データセット aio_02_dev_unlabeled_v1.0.jsonl を使って,Docker イメージの動作確認をします.
Note: --gpus オプションは NVIDIA Container Toolkit がインストールされた環境で有効です.
ここで, <input_dir> は,開発用データセット `aio_02_dev_unlabeled_v1.0.jsonl` が置かれたローカルのディレクトリを, <output_dir> はシステムの予測結果を書き出すローカルのディレクトリを,それぞれ完全パスで指定します.
Docker イメージの実行が終わったら,ローカルの <output_dir>/predictions.jsonl にシステムの予測結果が保存されていることを確認してください.
4. Docker イメージの保存・圧縮
Docker イメージが正しく動作することを確認できたら,イメージをファイルに保存・圧縮します.
リーダーボードにおける評価方法
評価尺度
リーダーボードでは,未公開の評価用データ (1,000問) を用いて,投稿されたシステムの解答精度を評価します.
リーダーボード上の自動評価は,あらかじめテストデータで用意された正解と,システムが予測した解答の完全一致 (exact match) により計算します.ただし,ここでの完全一致は,正解とシステムが予測した解答のそれぞれに対し,以下の正規化処理を行った上で,文字列の一致を評価します.
空白の削除
また,正解の別名や表記揺れが考えられる場合など,1つの質問に正解が複数用意されている場合は,1つでも完全一致するものがあれば正解とみなします.
リーダーボードの公開期間が終了したのち,すべてのシステムの解答の人手評価を行い,最終的な順位を決定します.
評価用マシンのスペック
リーダーボードの自動評価は,GCP上に インスタンスを用意しています.スペックは以下の通りです.
vCPU 12, Memory 78GB + Nvidia Tesla V100 (Memory 16GB)x1
(なお,参加者の参加状況に応じて今後変更される可能性があります.)
リーダーボードへの投稿のルール
リーダーボードへは,ファイルに保存・圧縮した Docker イメージのファイルをアップロードすることにより投稿を行います.
リーダーボードに投稿された Docker イメージは予約領域に保存され,決められた時刻にそれまでに投稿されたものをまとめて評価し,結果がリーダーボードに反映されます.
評価は,毎日夜0時までに投稿されていた Docker イメージを評価します.また,1回の評価の実行は最大で6時間とします.6時間を過ぎた場合は,それまでに出力された結果のみが評価されます.
システムの運用上,毎日午前0時から午前8時までは投稿不可となります.また,評価と評価の間には,同一チームが複数回投稿することはできますが,評価開始時刻前に最後に投稿したモデルのみが評価されます.
なお,以上のルールは,参加者の参加状況に応じて今後変更される可能性があります.