Tanuki8Bに対するMT-Benchを用いた評価を体験してみる
本稿は、松尾研LLMコミュニティ勉強会#4「Tanuki8Bに対してMT-Bench等を用いた性能評価」の支援記事となります。
言語モデルの評価
評価とは
学習を経て出来上がった言語モデルのタスク遂行能力を測ることを「評価」と呼びます。
出来上がった、といっても、言語モデルが完成して世の中にリリースしていく直前のことを指しているとは限りません。実際には、例えば
- 事前学習が終わったモデルと会話してみて会話能力を評価する
- 事後学習を1周回すたびにベンチマーク(後述)を回してみてタスク遂行能力を評価する
といった途中途中での評価をよく行います。こうすることで、事前学習や事後学習によって本当にLLMが望む方向に成長しているかを確認するわけです。これは、train lossやvalidation lossの低減の様子を監視・追跡しているだけではなかなか確認できないものなので、定期的に実際の出力を確認する評価が重要となります。
評価指標
評価を行うためには、よしあしを測る基準が必要です。その基準のことを評価指標と呼びます。
大規模言語モデルが現れるかなり前から言語モデルは存在していましたので、評価指標にも伝統的なものから最新のものまでいろいろと存在します。それらをざっと知っておくと意外と参考になるので概観しておきます。
トークン類似性メトリクス
言語モデルへの入力文と、それに対する見本としての出力例の対を複数組用意してデータセットを準備しておき、言語モデルの出力と見本を比較してその類似性を数値化するタイプのメトリクスです。
2000年代によく使われていたメトリクスはこのタイプが多く、代表的なところでは要約能力を測るROUGE、翻訳能力を測るBLEUやMETEORが挙げられます。要約と翻訳で異なる方法が提案されている辺りが興味深いところです。
ベンチマーク
近年は、言語モデルが大規模化し性能が上がると共に、プロンプトに応じて様々なタスクをこなすようになっています。例えば
- 質問に対する応答
- 会話
- 文章生成
- 情報抽出
- コード生成
- 数学や論理思考
など多岐に渡ります。そうした動向に合わせて、狙いとするタスクを評価するベンチマークが数多く現れています。その動向は勉強会ブログでは到底追いきれないほどの量となりつつあります。代表的なベンチマークについてはAppendixに掲載しておきましたが、更に詳しく知りたい方は「日本語LLM評価ベンチマーク/データセットまとめ」などのサイトを参照ください。
リーダーボードとChatBotArena
最近は、言語モデルの評価によるランキングを公開しているサイトが存在します。そうした公開ランキングのことをリーダーボードと呼びます。最近は、ベンチマークを用いた点数評価ではなく、人手による評価を募ってランキングを公開するChatBotArenaもあります。
代表的なオープンリーダーボードとしては以下が挙げられます。
- Hugging Face Open LLM Leaderboard
- Nejumi LLMリーダーボード3 (WandBのブログがとても参考になります)
- llmjp/open-japanese-llm-leaderboard
- ChatBotArena leaderboard
チーム「たぬき」Phase2における評価の実際
学習の途中途中でモデルがどのように成長しているかを確認する戦略、は、チーム「たぬき」でも行っていました。その中で、限りある資源と期間の中で重視する「会話性能」を向上させられるよう、評価も戦略的に実施していました。本章ではその様子を示します。
事後学習(総力戦)段階: Nejumi LLMリーダーボードNeo
前出の図の太い黄色矢印の箇所です。この段階では、Nejumi LLMリーダーボードNeoを用いた評価環境を確立しており、チームメンバーは、SFT/DPOを行ったモデルに対してNejumi LLMリーダーボードNeoによる評価を行っていました。(それが今回のハンズオン対象そのものです。)
Nejumi LLMリーダーボードNeoは、以下の2つで構成されています。
- 文章生成の評価を行うJapanese MT-bench
- 言語理解の評価を担うllm-jp-eval
このうち、llm-jp-evalは比較的時間が掛かることから、毎回両方を評価するのではなく、時間がないときにはJapanese MT-benchのみ評価する、という選択も行っていました。
最終リリース: Nejumi LLMリーダーボード3 & 人手による評価
最終リリースでは、当時の最新のリーダーボードであるNejumi LLMリーダーボード3による評価、および人手による評価を行いました。
この様子は、公式リリースノート「東京大学松尾・岩澤研究室 GENIACプロジェクトにおいて、大規模言語モデル「Tanuki-8×8B」を開発・公開」にも記載されています。また、Zenn記事「フルスクラッチで開発した大規模言語モデルTanuki-8B, 8x8Bの性能についての技術的な詳細」では、その性能の技術的考察を進めています。
Tanuki-8B MTBenchハンズオン
前述の通り、Nejumi LLMリーダーボードNeoは、Japanese MT-benchとllm-jp-evalの2つのベンチマークを実行できるのですが、本稿では第一歩としてJapanese MT-benchを動かすことを目標としたいと思います。
評価実行時のシステム構成
評価を実行する機材に、GitHub、Hugging Face、WandBを接続して使用します。
評価機は、評価に必要な性能を備えていれば、Google ColabでもAzureでもAWSでも、ローカルPCでも構いません。Google Colabの場合、L4 GPU (GPU RAM 22.5GB)での動作確認を終えています。
ソースコードの在りかと基本構造
今回の評価に用いるソースコードは以下のサイトに公開されています。このソースコードは、Nejumi LLMリーダーボードNeoをTanuki-8B/8x8B評価に用いることができるようにカスタマイズしたものです。
llm-leaderboardは以下の構成をしています。
数字は、Japanese MT-benchの実行にとって重要な箇所を解説するために付与しています。以下に解説します。
- ①llm-leaderboardをダウンロード後は、llm-leaderboardフォルダに移動して処理を行います。
- config/config.yaml, scripts/run_jmtbench_eval.pyともに、そこからの相対パスで実行されるからです。
- ②config.yamlはこのフォルダの下に作成します。
- ③Japanese MT-benchのみを動かす場合は、READMEにある通り、Hugging Faceログイン, WandBログインなどの準備を行った後に、scripts/run_jmtbench_eval.pyを実行します。このファイルの内部は関数がないので、記載されているコードがそのまま実行されます。
- その中で④mtbench_eval.py内のかなり長い関数mtbench_evaluate()が呼び出されます。こちらがJapanese MT-bench実行の本体です。この関数の中では、以下が行われています。
- 質問のダウンロード
- 言語モデルによる解答例の作成
- 評価対象モデルによる応答作成
- 言語モデルによる採点
Google Colabの場合
実行開始前
シークレット情報をGoogle Colabに登録しておくとよいでしょう。
登録しておくと、以降は以下のソースコードで取り出すことができます。
from google.colab import userdata
os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY')
Hugging Faceのキャッシュ指定
Hugging Faceからモデルをロードしたことのある方の中には、1回目は時間が掛かったのに、2回目以降はロードが速くなった経験をしたことがいらっしゃるかと思います。それは、1回目にHugging Faceのサイトからダウンロードしたデータが、ダウンロードした機器のキャッシュディレクトリに保存され、2回目以降はそれが読みだされるからです。Hugging Faceのキャッシュディレクトリのパスは、デフォルトでは ~/.cache/huggingfaceです。
ところが・・・Google Colabの場合、セッションを起動するたびにRuntimeが変わりますので、以前 ~/.cache/huggingfaceにダウンロードしたデータはそのたびに消えてしまいます。
そこで、Google Driveをお使いの方は、Google Driveに接続し、キャッシュを作っておくことをお勧めします。筆者は/content/drive/MyDrive/HF_HOMEをキャッシュとして使っています。
# Google Driveをマウント
from google.colab import drive
drive.mount('/content/drive')
# Hugging Faceのキャッシュディレクトリを指定
# これでHugging FaceのキャッシュがGoogle Driveになる
# (これをしないと、~/.cache/huggingfaceに保存され、Colab立ち上げの度に再読出しになる)
import os
os.environ["HF_HOME"] = "/content/drive/MyDrive/HF_HOME"
Restart session
GitHubからllm-leaderboardの内容をダウンロードし、requirements.txtに記載されているライブラリをインストールすると、恒例の?Restart sessionが求められます。素直に一度Restartして先に進みましょう。
WandBによる監視
!python scripts/run_jmtbench_eval.py
を実行すると、WandBのパスが出てきますので、クリックするとWandBのサイトに飛ぶことができます。そこで、評価の様子を様々な側面から監視することができます。
まとめ
本稿では、チーム「たぬき」Phase2における評価で用いた以下の3つのうち、Nejumi LLMリーダーボードNeoのJapanese MT-benchによる評価を、Google Colabなどの比較的安価なリソースで体験頂くための情報を提供しました。
- Nejumi LLMリーダーボードNeo
- Nejumi LLMリーダーボード3
- 人手による評価
ベンチマークを行うことは大規模言語モデルの性能を客観的に理解する一助となりますし、リソースの関係で実行が難しい方にとっても、評価指標やベンチマークのことを知っておくことで正しい理解が促進されることが期待されます。本稿の内容が皆様のお役に立てれば幸いです。
Appendix:各種の評価指標の概要
類似性メトリクス
言語モデルへの入力文と、それに対する見本としての出力例の対を複数組用意してデータセットを準備しておき、言語モデルの出力と見本を比較してその類似性を数値化するタイプのメトリクス。
名称 | 用途 | 概要 | 原著論文 |
---|---|---|---|
ROUGE | 要約能力 | 原文を言語モデルに要約させ、その要約結果が、要約例のN-gramのうちどの程度を含むかで評価する。ROはRecall-Orientedの略であり、再現率ベース。「正解をどれだけ含むか」を重視していることになる。 | ROUGE: A Package for Automatic Evaluation of Summaries 2004年の論文 |
BLEU | 翻訳能力 | 原文を堅固モデルに翻訳させ、その翻訳結果に含まれるN-gramがどの程度正解テキストに含まれているかで評価する。Precision(適合率)ベースであり、「訳すべきものは訳し、余分な訳を付与していないか」を評価する。ちなみにBLEUのBはBilingual。 | BLEU: a Method for Automatic Evaluation of Machine Translation 2002年の論文 |
METEOR | 翻訳能力 | 見本との一致を探るという点でBLEU、ROUGEと類似しているが、単語の一致だけでなく同義語や語形変化も考慮する柔軟な評価。また、見本と語順が異なるとペナルティが課せられる。数値化にはRecallとPrecisionの調和平均(F値)を用いる。ちなみにMETEORのTはTranslation | Meteor: An Automatic Metric for MT Evaluation 2005年の論文 |
ベンチマーク
名称 | 発表年月 | 概要 | タスク名 |
---|---|---|---|
GLUE | 2018年5月 | 自然言語理解モデル評価。英語。文の意味関係や文脈理解など | 9つのデータセットで構成 (CoLA, SST-2, MRPC, STS-B, QQP. MNLI, RTE, WNLI, AX) |
SuperGLUE | 2019年9月 | GLUEの上位版。より難易度の高いタスクを含む。英語。 | 8つのデータセットで構成(BoolQ, CB, COPA, MultiRC, ReCoRD, RTE, WiC, WSC) |
MATH | 2021年2月 | 5レベルの難易度の数学の文章題を集めたデータセット。英語。 | 7種類のsub-disciplineを含む。 |
HumanEval | 2021年7月 | プログラミング能力評価。英語 | Pythonコード生成 |
GSM8K | 2021年10月 | 比較的簡単な数学の文章題を集めたデータセット。英語。 | 8Kの名の通り約8K(8,500件)のデータ。 |
MMLU | 2021年11月 | 選択問題。英語。 | 57種の多領域タスク |
JGLUE | 2022年6月 | 翻訳を介することなく、日本語で1から構築したベンチマーク | 6つのデータセットで構成(MARC-ja, JSTS, JNLI, JCommonsenseQA, JParaphrase, JRAST) |
MTBench | 2023年4月 | 言語モデル性能の多面評価。英語 | トピック推定、コード生成、文法分析、推論、検索応答など10種類のタスクを評価 |
JMTBench | 2023年8月 | MTBenchを基に構築された日本語評価ベンチマーク。 | トピック推定、コード生成、文法分析、推論、検索応答など10種類のタスクを評価 |
Jaster | 2023年5月 | 日本語の指示追従データセット。 | モデルの指示理解と応答生成能力を評価。 |
llm-jp-eval | 2023年12月 | 日本語LLM自動評価ツール | MARC-ja, JSTS, JNLI, JCommonsenseQA, 日本語指示応答、コード生成、文法分析など |
ELYZA-tasks-100 | 2023年9月 | 高度で多様なタスク評価。日本語。 | 情報抽出、文書分類、翻訳、要約、質問応答など100種類 |
謝辞
この成果は、NEDO(国立研究開発法人新エネルギー・産業技術総合開発機構)の助成事業「ポスト5G情報通信システム基盤強化研究開発事業」(JPNP20017)の結果得られたものです。
東京大学 松尾・岩澤研究室が運営する松尾研LLMコミュニティのLLM開発プロジェクト[GENIAC] の開発記録、情報発信になります。 各種リンクはこちら linktr.ee/matsuolab_community
Discussion