💡

無料APIを利用したElyza-tasks-100の評価ツール

に公開

はじめに

東京大学の松尾・岩澤研究室が主催する2024LLM講座に参加し、大規模言語モデルの勉強をさせて頂いております。コンペティションいよいよ開始されましたね。自分でファインチューニングしたモデルの性能を、本コンペ用のベンチマーク(「ELYZA-tasks-100」を改変したもの)で評価して順位を競うという内容になっています。
コンペ期間中に公開されているリーダーボードに、オリジナルのモデルで出力したファイル(jsonl)をアップロードすることで自動採点され、モデルの性能が数値化される環境が提供されているのですが、この自動採点の回数にどうやら制約(25回まで?)があるとのことで、むやみにポストしない方が良いみたいです。私は知らずに採点回数を不用意に消費してしまいました・・・。

ツール開発と公開の経緯

コンペ開始当初、まずは無課金勢でも利用できる評価環境を作ろうと、「ELYZA-tasks-100」の出力結果をスコア化するツールを作りかけていたのですが、リーダーボードの採点のレスポンスが良く必要性を希薄に感じたこともあり、平日はなかなか時間が作れずに放置しておりました。
ここにきて多少は利用価値が出てきた気がするので改修して公開します。(肝心のコンペの内容に手をつけられていない・・・時間が欲しい)

https://github.com/tana114/elyza-tasks-grader-like

本ツールの特徴

無料のAPIツールの多くはリクエスト数に制限が掛かっていると思います。この少ない回数でなるべく多くの処理を捌けるように、Langchainの構造化出力を使って同時に複数の件数の評価を行えるように設計しております。とにかく無料の環境でなるべく多くの評価が行えることを優先しています。「精度」は二の次になっています。構造化出力には精度劣化の弊害があると言われているようですが、今回は「大まかな評価基準の構築」が目的ということで、ご理解の上ご利用頂ければと思います。

APIキーの取得

Langchainの構造化出力に対応したAPIキーが必要です。私が確認した限りではGroqCerebrasの無料枠が条件を満たしているようなので、現状この2つを使えるように作成しております。ちなみに、gemini-1.5-flashは対応していないようなので今回は使用を断念しました。
尚、OpenaiのAPIキーなども使えるとは思うのですが、そもそもOpenaiのAPIを使える人は、出力を構造化してリクエスト数を節約するような必要性は無いと思いますので対象外としております。

APIキーの取得に関しては以下を参考にさせていただきました(これらのサービスにも無料枠での制限があると思いますので、過度な利用は控えた方が良いと思います。詳しくは利用規約等ご確認ください)。

https://zenn.dev/acntechjp/articles/f389f9f47bedfa

https://zenn.dev/mizunny/articles/58be26d25f9589

使用方法

基本的な使用方法についてはリポジトリの*.ipynbファイルを参考にしてください。Google coraboratory環境での使用を想定したファイルになっています。

評価用jsonlファイルの作成

ELYZA-tasks-100のinputに対する出力を任意のLLMで生成し、元の順番通りにtask_id(0~99)とoutputキーに格納したjsonlファイルが評価対象となります(コンペの条件と同じです)。jsonlファイルの作成については、GITリポジトリのgen-01_tasks100.ipynbを参考にしても良いですし、別のプログラムで出力したファイルを使っても構いません。

評価(スコアの取得)

eavl-01_tasks100_groq.ipynbもしくはeavl-02_tasks100_cerebras.ipynbを参考にして評価対象ファイルのスコアを出力してください。GroqCerebrasのAPIを利用する場合、評価に使用するモデルはllama3.1-70bあたりが候補になるのではないかと思います。eval_batch_sizeという引数がありますが、これが1リクエストで同時に処理する件数です。1が理想ですが、数を増やすことで1リクエストでの処理件数を稼げます(ただし、無料枠では5ぐらいが限界だと思います)。


サンプルの例(*.ipynb)では、評価対象ファイルを上図のようにcoraboratory上にアップロードする必要があります。

特記事項

検証は不十分です。取り急ぎllm-jp-3-3.7bで128tokenの応答を生成して評価してみたのですが、llama3.1-70bを用いた評価で、groq=1.83、Cerebras=1.6という結果でした(共にeval_batch_size=5)。案の定精度は低くバラツキも大きそうです。なるべく評価パラメータを固定して利用したとしても、相対的な簡易指標程度にしかならないかもしれませんがご了承ください。

Discussion