JaLMS
最新の AI 研究を日本語で解読

Reliable, Reproducible, and Really Fast Leaderboards with Evalica

Dmitry Ustalov
JetBrains / Belgrade, Serbia
[email protected]
Abstract

自然言語処理(NLP)技術、特に指示調整された大規模言語モデル(LLM)の急速な進歩により、人間と機械のフィードバックを含む現代的な評価プロトコルの開発が急務となっている。我々はEvalicaを紹介する。これは信頼性が高く再現可能なモデルのリーダーボードを作成するためのオープンソースツールキットである。本稿では、その設計を提示し、性能を評価し、さらにWebインターフェース、コマンドラインインターフェース、およびPython APIを通じてその使いやすさを実証する。

1 Introduction

教示調整された大規模言語モデル(LLM)などの高性能な自然言語処理(NLP)手法が示す創発的能力は、健全で信頼性の高い評価プロトコルの開発を促している。初期の手法は静的なデータセットや個別のベンチマークで合理的に評価できたが、現代の手法では人間と機械からのリアルタイムのフィードバックを伴う最新のベンチマークが必要である(Faggioli et al., 2024)。これらのベンチマークは、LMSYS Arena (Chiang et al., 2024)やAlpacaEval (Dubois et al., 2024)プロジェクトによって普及した、ペアワイズ比較リーダーボード(図1)として表現されることが多い。

NLP手法が急速に進化する中、今日の評価手法は多くの場合、計算ノートブックやアドホックなプログラムとして後付けで実装されており、これがエラーや非互換性を引き起こし、再現性と採用を妨げている。ベンチマーキングのエンジニアリング面を改善し、方法論的エラーの数を減らし、結果の交換と解釈を簡素化するために、我々はEvalicaを提示する。これは、信頼性が高く再現可能なNLPモデルベンチマークの作成を容易にし、スピードアップするオープンソースの評価ツールキットであり、111https://github.com/dustalov/evalica現在は選好データに焦点を当てている。クラウドソーシングにおける品質管理のための本番グレードのツール開発における4年間の経験に基づき(Ustalov et al., 2024)、我々は以下の3つの実践的な目標を念頭にEvalicaを構築した:

  • 一般的な評価手法を幅広いユーザーが利用できるようにする

  • 提供される実装のパフォーマンスと正確性を確保する

  • 可能な限り最高の開発者体験を提供する

Refer to caption
図1: Evalicaは、判断の集約、ブートストラップ信頼区間(CI)を用いたモデルのスコアリング、最終的なモデルランキングの取得を含む、リーダーボード作成の強調された側面を容易にする。

本稿の残りの部分は以下のように構成されている。セクション2では、関連研究とその宣言された目標との関係を概観する。セクション3では、Evalicaの設計とそれがこれらの目標をどのように満たしているかを示す。セクション4では、Evalicaの実装の技術的詳細を、その正確性を確保する手段を含めて説明する。セクション5では、代替実装に対するパフォーマンスベンチマークを報告する。最後に、付録Aでは、EvalicaのWeb、コマンドライン、およびPythonアプリケーションプログラミングインターフェース(API)を示す。

2 Related Work

研究コミュニティは、Elo (1978)やTrueSkill (Herbrich et al., 2006)のような、ランキングシステムのための様々なツールキットを開発してきた。我々の分析では、これらをいくつかのクラスに区別する。

第一に、専用のリーダーボード構築ツールがある。これにはIFEval Zhou et al. (2023)、LMSYS Arena (Chiang et al., 2024)、Arena-Hard (Li et al., 2024)、AlpacaEval (Dubois et al., 2024)などが含まれる。これらのツールキットは、研究者チームによって特定の新しい評価手法を実装するために作成された。コードは一般的に特定のベンチマークに厳密に合わせて書かれており、ユーザーが自身のデータセットやドメインに適用するには追加の労力が必要である。今日の科学研究の高速なペースにより、テストカバレッジ、コードドキュメンテーション、継続的インテグレーション、データフォーマットの互換性などの一部のソフトウェアエンジニアリングのベストプラクティスが省略されることが多かった。同時に、一部の実装は、元のベンチマークの範囲外であった、より大規模で現実的なデータセットに対して最適とは言えない計算性能を示している。

第二に、ランキングシステムの実装がある。これにはRustパッケージのPropagon222https://github.com/Refefer/propagonとskillrating333https://github.com/atomflunder/skillratings、PythonパッケージのOpenSkill.py (Joshi, 2024)などが含まれる。これらのパッケージは多くの場合、熟練したプログラマーによって正確な実装を提供するために最善の努力で書かれているが、これらの手法は必ずしも自然言語処理評価の現在のベストプラクティスで使用されているものと一致しない。また、Python以外のパッケージは、既存のPythonコードやノートブックと統合するために追加の非trivialな労力が必要である。

最後に、アプリケーション固有のツールキットとして、Elovation、444https://github.com/elovation/elovation ArtistAssistApp、555https://github.com/eugene-khyst/pairwise-comparison そしてCrowd-Kit (Ustalov et al., 2024)がある。これらのツールキットは、主にクラウドソーシングによるアノテーションの形式でユーザー生成コンテンツに対応するために構築されており、多くの場合、自然言語処理評価で使用される方法論に従っていない。

3 Design of Evalica

Refer to caption
図2: EvalicaはRustで書かれたコアを持ち、Pythonで書かれた包括的なテストスイートでカバーされている。我々は、各メソッドの独立した実装をPythonで保持することで、プロトタイピングを簡素化し、テストの信頼性を向上させている。

Evalicaは図1に示す3つのタスクを容易にする。すなわち、評価システムの最適化されたシングルスレッド実装の提供、モデルスコアの信頼区間計算の簡素化、そして可視化のための便利なルーチンの提供である。

2はEvalicaのアーキテクチャの概要を示している。そのコアには、生データを処理するパフォーマンスが重要なRustのルーチンがある。これらのコアルーチンは、他の言語のアプリケーション開発者のための便利なAPIでラップされている。これらのAPIは、表現をコアルーチンで使用されるインデックス付き形式に変換する役割を担っている。666モデルは通常、llama-3.1-405b-instructclaude-3-5-sonnet-20240620のような名前を持つ。コンピュータは文字列をそのまま扱うわけではないので、このような名前を対応するインデックス(例:01)に変換する必要がある。 コアルーチンの例としては、すべてのランキングアルゴリズムの実装や、勝利行列を構築するためのヘルパールーチンがある。

我々は現在、機械学習における人気のため、Pythonのみをサポートしている。信頼性とプロトタイピングの容易さのために、我々はすべてのメソッドを素朴にPythonでも実装し、Pythonの実装とRustの実装を比較する包括的なテストスイートを構築した。他の言語も(Rustとその言語間のブリッジが存在する限り)比較的容易にサポートでき、コア実装とテストの改善は、すべての派生コードの状態を向上させることになる。

我々は、これらの措置により、セクション1で言及した3つの目標を適切に満たすことができたと考えている。Evalicaは、高性能なコンパイル済みプログラミング言語で対応する実装を提供し、以前開発されたソフトウェアから得られた教訓を活かして開発者の生産性を向上させることで、一般的な評価実践を加速している。

4 Implementation Details

Evalicaは、Chatbot ArenaやArena-Hardなどの人気のあるベンチマークで用いられているスコアリング手法を実装している:Elo (1978)Bradley and Terry (1952)、そして平均勝率である。我々は、これらのベンチマークと同じ結果が得られることを確認した。このパッケージには、固有値法(Bonacich, 1987)、PageRank (Brin and Page, 1998)Newman (2023)の引き分けを考慮した手法、および単純な投票カウントの実装も含まれている。

Evalicaの実装を呼び出すには(リストA)、左側のオブジェクトのベクトル(xs)、右側のオブジェクトのベクトル(ys)、勝者ラベルのベクトル(winners)、そしてオプションとして、Li et al. (2024)で提案されているスタイル制御のための例の重みのベクトル(weights)を提供する必要がある。勝者ラベルの可能な値は「X won」、「Y won」、「tie」である。すべての手法は、軽量で統一された関数型APIで利用可能である。我々は意図的に、データの表形式に関する仮定を避けることにした。これは、Crowd-Kit (Ustalov et al., 2024)を本番環境で運用した経験から、エラーが発生しやすいデータ変換ステップが必要となり、それを回避できたはずだということが分かったためである。

内部的に、Evalicaはモデル名を操作せず、コアの実装ではモデル名を一意の数値識別子と比較するためのインデックスが必要となる(セクション3で説明)。この操作は短いながらも無視できない時間がかかるため、我々は信頼区間のブートストラップやスコアの再計算を必要とする他のルーチンの際に時間を節約するために、すでに構築されたインデックスを渡す可能性を提供した(リストA)。

APIに加えて、Evalicaは組み込みのWebインターフェースとコマンドラインインターフェースを提供している。例示的な例については付録Aを参照されたい。具体的には、組み込みのWebインターフェースはAbid et al. (2019)による周知の入出力分離パラダイムに従っており、Gradioツールキットを使用して作成された(図4)。777https://www.gradio.app/ コマンドラインインターフェースは、データ操作のためのpandasライブラリ(McKinney, 2010)とPython標準ライブラリで利用可能なツールを使用して開発された(図5)。

スコアとランクを計算した後、比較されたモデル間のペアワイズ勝率を可視化することがしばしば有用である。Chiang et al. (2024)に従い、我々は全てのモデルペアi𝑖iitalic_ij𝑗jitalic_jに対して、Bradley and Terry (1952)による以下の定義を適用した:

pij=sisi+sj,subscript𝑝𝑖𝑗subscript𝑠𝑖subscript𝑠𝑖subscript𝑠𝑗,p_{ij}=\frac{s_{i}}{s_{i}+s_{j}}\text{,}italic_p start_POSTSUBSCRIPT italic_i italic_j end_POSTSUBSCRIPT = divide start_ARG italic_s start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT end_ARG start_ARG italic_s start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT + italic_s start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT end_ARG ,

ここで、pijsubscript𝑝𝑖𝑗p_{ij}italic_p start_POSTSUBSCRIPT italic_i italic_j end_POSTSUBSCRIPTはモデルi𝑖iitalic_iがモデルj𝑗jitalic_jに勝つ確率、sisubscript𝑠𝑖s_{i}italic_s start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPTはモデルi𝑖iitalic_iのスコア、sjsubscript𝑠𝑗s_{j}italic_s start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPTはモデルj𝑗jitalic_jのスコアである。

4.1 Correctness and Reliability

我々は、Evalicaにおけるメソッド実装の正確性と信頼性を確保するために、一連の合理的な手段を適用した。第一に、すべてのメソッドをRustとPythonという2つの異なるプログラミング言語で独立して実装した。同じ入力に対する出力がこれらの実装間で一致することを確認した。第二に、Pythonの Hypothesis ライブラリ (MacIver et al., 2019) を用いたプロパティベーステストを採用し、空の入力や不正な入力を含むコーナーケースを列挙してプログラムを破壊しようと試みた。888https://github.com/HypothesisWorks/hypothesis 我々はそのようなケースをすべてカバーし、可能な限り合理的な数値的フォールバックを提供した。第三に、外部ベンチマークからの標準的なスコアと比較して出力を検証した。第四に、テストカバレッジが100%以上であることを確認し、リポジトリの各リビジョンでテストスイートを実行した。

4.2 Governance and Availability

我々は信頼できるオープンソースエコシステムを用いてEvalicaを構築した。EvalicaのソースコードはGitHub上でApache License 2.0の下で公開されていた。999https://github.com/dustalov/evalica 機能リクエストとコード貢献は、それぞれGitHubのIssuesとPull Requests機能を使用して処理された。我々はGitHub Actionsで継続的インテグレーションを使用し、リビジョンごとのチェックを呼び出した。これにはユニットテスト、リンティング、型チェック、テストカバレッジ測定、計算パフォーマンステストが含まれる。テストカバレッジとパフォーマンステストの公開ダッシュボードは、それぞれCodecov101010https://codecov.io/gh/dustalov/evalicaとCodspeed111111https://codspeed.io/dustalov/evalicaで利用可能であった。我々は信頼できる公開アプローチを使用して、Linux、Windows、macOSプラットフォーム向けのPythonパッケージをPyPIにリリースした。121212https://pypi.python.org/pypi/evalica 我々のコンパイルされたパッケージは、安定したCPython ABIの使用により、Python 3.8以降のどのバージョンとも前方互換性がある。また、人気のある科学計算ツール配布であるAnacondaのユーザー向けに、conda-forge上でもEvalicaをリリースした。131313https://anaconda.org/conda-forge/evalica 最後に、開発者向けドキュメントをRead the Docsで公開した。141414https://evalica.readthedocs.io/

5 Performance Tests

我々は、Evalicaにおけるアルゴリズム実装の正確性を確認した後、その実行時間を調査するために2つの一連の計算実験を実施した。まず、一般的なベンチマークにおける現在の実装とEvalicaが提供する実装との間の計算性能の差異を評価した。次に、Evalica内のすべての手法について、コア実装と素朴な実装の性能を比較した。すべての実験は、CPython 3.13.1、NumPy 2.2.0、およびEvalica 0.3.2を使用し、macOS 15.2(Intel® Core i5-8500 CPU、32 GB RAM)上で実行された。すべての信頼区間は、10,000サンプルと95%の有意水準を用いたブートストラップ法により構築された。

5.1 Chatbot Arena Experiment

Setup Time \uparrow{}
BT in Evalica 1.174±0.009plus-or-minus1.1740.0091.174\pm 0.0091.174 ± 0.009
Elo in Evalica 1.256±0.019plus-or-minus1.2560.0191.256\pm 0.0191.256 ± 0.019
Elo from Arena-Hard 3.778±0.322plus-or-minus3.7780.3223.778\pm 0.3223.778 ± 0.322
BT from Chatbot Arena 51.949±1.797plus-or-minus51.9491.79751.949\pm 1.79751.949 ± 1.797
表1: Chatbot Arenaデータセットに対するEvalica、Chatbot Arena、Arena-Hardの性能。時間は秒単位で、10回の実行に対する95%信頼区間を示している。値が小さいほど良い。BTはBradley and Terry (1952)、EloはElo (1978)を意味する。

我々は、2024年8月14日版のChatbot Arenaデータセット(Chiang et al., 2024)を処理する4つのセットアップの性能を評価した。このデータセットには129モデルの170万件の対比較が含まれており、同点は除外されていない。151515https://storage.googleapis.com/arena_external_data/public/clean_battle_20240814_public.json 我々は4つの異なるセットアップを比較した:Chatbot Arenaで使用されている純粋なPythonによるElo (1978)ランキングシステムの実装、Arena-Hardで使用されているscikit-learn (Pedregosa et al., 2011)を用いたPythonによるBradley and Terry (1952)の実装、そしてEvalicaにおけるこれら2つの手法のRust実装である。そのために、我々はモデルリーダーボードでしばしば現れる信頼区間推定の現実的な問題をシミュレートするため、各セットアップを10回実行した。表1に示す結果が示すように、Evalicaのランキング手法の実装は、マルチスレッド処理を全く使用せずに、ベンチマークで現在使用されているものよりも最大46倍優れた性能を示した。これはPythonが解釈型言語であり、Rustがコンパイル型言語であることから予想されたことではあるが、我々はEvalicaの性能と使いやすさの組み合わせにより、同じ時間内でより多くの実験を実行できるようになると考えている。同時に、複数のスレッドで計算を実行すること、例えば1つのサンプリングラウンドを1つのスレッドで処理することで、現代のマルチコアCPUをより有効に活用し、計算時間を何倍も削減することができるであろう。

5.2 Rust vs. Python in Evalica Experiment

Algorithm Rust Python
Average Win Rate 0.005±0.000plus-or-minus0.0050.0000.005\pm 0.0000.005 ± 0.000 0.006±0.000plus-or-minus0.0060.0000.006\pm 0.0000.006 ± 0.000
Bradley–Terry 0.005±0.000plus-or-minus0.0050.0000.005\pm 0.0000.005 ± 0.000 0.012±0.000plus-or-minus0.0120.0000.012\pm 0.0000.012 ± 0.000
Counting 0.005±0.000plus-or-minus0.0050.0000.005\pm 0.0000.005 ± 0.000 0.009±0.000plus-or-minus0.0090.0000.009\pm 0.0000.009 ± 0.000
Eigenvalue 0.005±0.000plus-or-minus0.0050.0000.005\pm 0.0000.005 ± 0.000 0.006±0.000plus-or-minus0.0060.0000.006\pm 0.0000.006 ± 0.000
Elo 0.005±0.000plus-or-minus0.0050.0000.005\pm 0.0000.005 ± 0.000 0.484±0.004plus-or-minus0.4840.0040.484\pm 0.0040.484 ± 0.004
Newman 0.006±0.000plus-or-minus0.0060.0000.006\pm 0.0000.006 ± 0.000 0.010±0.000plus-or-minus0.0100.0000.010\pm 0.0000.010 ± 0.000
PageRank 0.005±0.000plus-or-minus0.0050.0000.005\pm 0.0000.005 ± 0.000 0.006±0.000plus-or-minus0.0060.0000.006\pm 0.0000.006 ± 0.000
表2: LLMFAOデータセットにおけるEvalicaのコアRust実装と素朴なPython実装の実行時間比較。時間は秒単位で表示;各実装について10回の実行の95%信頼区間を示している。値が小さいほど良い。
Refer to caption
図3: Chatbot Arenaデータセットの合成版におけるEvalicaのRust実装のパフォーマンススケーリング分析。両軸とも対数スケールである。時間は秒単位、データセットサイズはペア数を示す;10回の実行の95%信頼区間を示している。値が低いほど良い。

我々は、EvalicaのコアにおけるRustで実装されたすべてのメソッドのパフォーマンスを、Pythonでの素朴な実装と比較して評価した。その名称にもかかわらず、これらのPython実装はNumPy (Harris et al., 2020)を使用して書かれており、NumPyは数値計算のためにCとFortranにおける数十年に及ぶ成功した性能エンジニアリング作業に基づいて構築された高度に最適化されたライブラリである。我々は、LLMFAO (Ustalov, 2023)と呼ばれる小規模なベンチマークからのデータセットを使用した。このデータセットは、2023年10月にクラウドソーシングを用いて収集された59のLLMに対する9,000のペアワイズ比較を含んでいる。表2に示されている結果から分かるように、コア実装と素朴な実装の間の差異は、置換検定によると統計的に有意であった(p<0.01𝑝0.01p<0.01italic_p < 0.01)。しかし、純粋なPython実装で使用された効率的なNumPyルーチンのため、その規模では効果量は顕著ではなかった。重要な例外の一つはEloであり、Rustでの同等の実装は、効率的なコンパイラ最適化により、Pythonよりも96倍以上高速であることが示された。同時に、Rust実装はより小さな実行時間の分散とより予測可能なパフォーマンスを示し、これはより大規模なデータセットで有用であるはずである。

5.3 Scaling on Synthetic Data Experiment

我々は、Evalicaを使用してデータセットサイズと計算時間の関係を分析した。この分析には、Chatbot Arenaから派生した合成データセットを用いた。これは、元のデータセットが既存の選好ベースのNLPデータセットの多くよりも大きかったためである。我々は、101から107ペアまでの7つのデータセットサイズを選択し、各サイズは10倍ずつ増加させた。各サイズについて、Chatbot Arenaから必要な数のペアを復元抽出で10回サンプリングし、時間の変動を調査した。計算時間は、Evalicaで利用可能な手法のRust実装を使用して測定し、ブートストラップ法を用いて95%信頼区間を構築した。図3は、すべての手法においてデータセットサイズと計算時間の関係が線形にスケールすることを示しており、良好なスケーラビリティを示している。しかし、小さな入力サイズでは明確な性能差が見られ、Newman (2023)のような手法は初期段階では遅いものの、入力サイズが増加するにつれて同様のトレンドに収束している。なお、本稿の分析は、実験で使用したChatbot Arenaのバージョンに含まれるモデル数によって制限されていることに留意されたい。

6 Conclusion

我々は、Evalicaが将来のNLPシステムのための信頼性と再現性の高いベンチマークの作成を促進すると考えている。我々は、さらなる研究の方向性として以下のいくつかの可能性を定義する:(1) 実践で広く使用されているより多くのユースケースの実装(信頼区間の構築を標準機能として含め、追加のランキングアルゴリズムを導入する)、(2) さらなるパフォーマンスとメモリの最適化の実現、(3) JavaScriptやRubyを含む、Rustとの相互運用性が高い他の一般的なプログラミング言語のサポート。我々の知る限り、Evalicaは計算性能と数値的信頼性に影響を与える、ドロップインで高速化された選好ベースのベンチマークを提供する最初の試みである。我々は、Evalicaのより広範な採用により、イテレーション時間の短縮、より有用な実験、そしてモデル選択の誤りの減少がもたらされると期待している。

Acknowledgements

我々は、有益なフィードバックを提供してくれた3名の匿名の査読者に感謝の意を表する。また、Evalicaの初期採用者であるVikhrチーム (Nikolich et al., 2024) およびJetBrains AIチームに感謝する。彼らの親切なフィードバックにより、ライブラリの改善が可能となった。なお、このライブラリの正しい発音はeh-vah-lee-tsahであり、これはバルカン半島の典型的な村の名前に似ている。

References

Appendix A Usage Examples

{listing*}

[!ht] {minted}pycon >>> from evalica import elo, pairwise_frame, Winner >>> result = elo( … xs=["pizza", "burger", "pizza"], … ys=["burger", "sushi", "sushi"], … winners=[Winner.X, Winner.Y, Winner.Draw], … ) >>> result.scores pizza 1014.972058 burger 970.647200 sushi 1014.380742 Name: elo, dtype: float64 >>> df_scores = pairwise_frame(result.scores) >>> df_scores # can be used for plotting the pairwise win rate pizza sushi burger pizza 0.500000 0.500003 0.501499 sushi 0.499997 0.500000 0.501496 burger 0.498501 0.498504 0.500000 Evalicaを使用してEloランキングと対応する対戦勝率を計算する例である。他の手法も同様に、わずかな修正で適用できる:bradley_terryaverage_win_rateなど。実行可能な例については、https://github.com/dustalov/evalica/blob/master/Tutorial.ipynbを参照されたい。

{listing*}

[!ht] {minted}python # 比較対象のモデルをインデックス化し、各ラウンドでの再インデックス化を避けて時間を節約する *_, index = evalica.indexing( xs=df["model_a"], # モデルAの識別子を含むシリーズ ys=df["model_b"], # モデルBの識別子を含むシリーズ )

bootstrap: list["pd.Series[str]"] = [] # モデル名が文字列であると仮定

for r in range(BOOTSTRAP_ROUNDS): # 再現性のため、ブートストラップラウンドの番号に等しい乱数シードを設定する df_sample = df_arena.sample(frac=1.0, replace=True, random_state=r)

# 与えられたサンプルに対してBradley-Terryスコアを推定する result_sample = evalica.bradley_terry( xs=df_sample["model_a"], ys=df_sample["model_b"], winners=df_sample["winner"], index=index # 上で構築したインデックスを使用して高速化 )

bootstrap.append(result_sample.scores)

# これはBOOTSTRAP_ROUNDS行を持つデータフレームであり、 # 各行はr番目のラウンドにおける各モデルのスコアを表す df_bootstrap = pd.DataFrame(bootstrap)

# これは各比較モデルのスコアの信頼区間を持つデータフレームです # df_bootstrap_ci = pd.DataFrame( "lower": df_bootstrap.quantile(.025), "rating": df_bootstrap.quantile(.5), "upper": df_bootstrap.quantile(.975), ).reset_index(names="model").sort_values("rating", ascending=False) Evalicaとpandasを使用してBradley and Terry (1952)スコアの95%信頼区間をブートストラップする例である(McKinney, 2010)。他のサポートされているモデルも、わずかな修正で適用できる。簡略化のため、scipy.stats.bootstrap (Virtanen et al., 2020)の例は示していないが、それも可能である。実行可能な例については、https://github.com/dustalov/evalica/blob/master/Chatbot-Arena.ipynbを参照されたい。

Refer to caption
図4: LLMFAOベンチマーク(Ustalov, 2023)を用いたEvalicaのWebインターフェースのスクリーンショット。左側には入力ファイル、アルゴリズムの選択、追加パラメータがある。右側にはランキング結果の表と勝率プロットがある。簡潔さのため、比較されたペアの数とモデルの現在のランクに対応する列は省略して、切り詰めた出力のみを示している。実際の例はhttps://huggingface.co/spaces/dustalov/pair2rankでアクセスできる。
{minted}

console headn6food.csv|columnts,leftrightwinnerPizzaSushileftBurgerPastarightTacosPizzaleftSushiTacosrightBurgerPizzaleftformulae-sequence𝑒𝑎𝑑𝑛6𝑓𝑜𝑜𝑑conditional𝑐𝑠𝑣𝑐𝑜𝑙𝑢𝑚𝑛𝑡𝑠𝑙𝑒𝑓𝑡𝑟𝑖𝑔𝑡𝑤𝑖𝑛𝑛𝑒𝑟𝑃𝑖𝑧𝑧𝑎𝑆𝑢𝑠𝑖𝑙𝑒𝑓𝑡𝐵𝑢𝑟𝑔𝑒𝑟𝑃𝑎𝑠𝑡𝑎𝑟𝑖𝑔𝑡𝑇𝑎𝑐𝑜𝑠𝑃𝑖𝑧𝑧𝑎𝑙𝑒𝑓𝑡𝑆𝑢𝑠𝑖𝑇𝑎𝑐𝑜𝑠𝑟𝑖𝑔𝑡𝐵𝑢𝑟𝑔𝑒𝑟𝑃𝑖𝑧𝑧𝑎𝑙𝑒𝑓𝑡head-n6food.csv|column-ts,leftrightwinnerPizzaSushileftBurgerPastarightTacosPizzaleftSushiTacosrightBurgerPizzaleftitalic_h italic_e italic_a italic_d - italic_n 6 italic_f italic_o italic_o italic_d . italic_c italic_s italic_v | italic_c italic_o italic_l italic_u italic_m italic_n - italic_t italic_s , italic_l italic_e italic_f italic_t italic_r italic_i italic_g italic_h italic_t italic_w italic_i italic_n italic_n italic_e italic_r italic_P italic_i italic_z italic_z italic_a italic_S italic_u italic_s italic_h italic_i italic_l italic_e italic_f italic_t italic_B italic_u italic_r italic_g italic_e italic_r italic_P italic_a italic_s italic_t italic_a italic_r italic_i italic_g italic_h italic_t italic_T italic_a italic_c italic_o italic_s italic_P italic_i italic_z italic_z italic_a italic_l italic_e italic_f italic_t italic_S italic_u italic_s italic_h italic_i italic_T italic_a italic_c italic_o italic_s italic_r italic_i italic_g italic_h italic_t italic_B italic_u italic_r italic_g italic_e italic_r italic_P italic_i italic_z italic_z italic_a italic_l italic_e italic_f italic_t evalica -i food.csv bradley-terry | column -ts, item score rank Tacos 2.509025136024378 1 Sushi 1.1011561298265815 2 Burger 0.8549063627182466 3 Pasta 0.7403814336665869 4 Pizza 0.5718366915548537 5

図5: Evalicaのコマンドラインインターフェースを使用して、カンマ区切り値形式のファイルを処理し、アイテムのランクと推定スコアを出力する例。