Llama 3.1 405B と Mistral Large 2 の性能を ELYZA-tasks-100 で比較してみた

## TL;DR

* Llama 3.1 405B と Mistral Large 2 の日本語性能を ELYZA-tasks-100 で測定しました
* Mistral Large 2（Vertex AI 版）は **3.94 点**をマークし、これまで評価したモデルのなかで最高得点でした
* Llama 3.1 （Vertex AI 版）は **3.16 点**で日本語の性能はやや低めでしたが、英語での性能はより高い可能性があります
* 高得点のモデルが増える中、GPT-4などを使ってモデルを自動評価する手法の課題も見えてきています

## はじめに

前回記事では、Phi-3 や Karakuri-LM 8x7B など、2024年4～5月に公開されたモデルを ELYZA-tasks-100 を用いて比較しました。

https://qiita.com/wayama_ryousuke/items/33cfbe8ae69ec090ea77

その後、2024年7月後半に、オープンアクセス LLM 業界において双璧をなす Meta と Mistral から、立て続けに大規模モデルがリリースされました。2024/7/23 に公開された Meta の [Llama 3.1](https://ai.meta.com/blog/meta-llama-3-1/) と、その翌日に Mistral から発表された [Mistral Large 2](https://mistral.ai/news/mistral-large-2407/) です。今回は、[ELYZA](https://elyza.ai/) が公開している日本語性能ベンチマーク ELYZA-tasks-100 ([HF](https://huggingface.co/datasets/elyza/ELYZA-tasks-100)) を用いて、これら2つのモデルを評価しました。

Meta の **Llama 3.1** は、2024年4月に公開された Llama3 の後継となるモデルです。バージョン番号上はマイナーアップデートですが、Llama 3 と同様の 7B・80B モデルに加えて、パラメタ数 405B のモデルが追加されているのが大きな特徴です。このほか、コンテキスト長の拡大（8K → 128K）や、英語以外の7言語への公式対応[^1]（日本語は対象外）などの改善が行われています。

[^1]: [Llama 3 のモデルカード](https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct#intended-use)には、英語以外の入出力は意図した用途でない（Out-of-scope）と記載されていました。一方、[Llama 3.1 のモデルカード](https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct#model-information)では8言語（英語、ドイツ語、フランス語、イタリア語、ポルトガル語、ヒンディー語、スペイン語、タイ語）への対応が明記されています。

Mistral の **Mistral Large 2**は、 Mistral Large (2024年2月公開) の後継モデルです。Mistral Large は重みデータが非公開のクローズアクセスモデルでしたが、Large 2 はオープンアクセスモデルになっています。パラメタ数は 123B で、日本語を含む 80 以上の言語に対応しています。コンテキスト長は Llama 3.1 と同じく 128K です。

今回は Llama 3.1 405B と Mistral Large 2 を日本語性能評価ベンチマーク [ELYZA-tasks-100](https://huggingface.co/datasets/elyza/ELYZA-tasks-100) で評価しましたので、その結果を報告します。

## 評価方法

ベンチマーク方法は前回記事と同様です。ELYZA-tasks-100 データセットの質問 100 個をモデルに入力し、その回答を GPT-4 に5段階評価（各設問1～5点）させて、平均得点を集計しました。評価手法の詳細は、下記の記事をご参照ください。

https://qiita.com/wayama_ryousuke/items/105a164e5c80c150caf1#%E8%A9%95%E4%BE%A1%E6%89%8B%E6%B3%95

評価には OpenAI API の GPT-4 Turbo (`gpt-4-1106-preview`) を使用しています。

評価対象としたモデルは次のとおりです。

* **Llama 3.1 405B**
    * Vertex AI API 版: [Documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/llama)
* **Mistral Large 2**
    * Vertex AI API 版: [Documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/mistral)
    * 2-bit 量子化 (IQ2S) 版

Llama 3.1 405B はモデルサイズが大きすぎて Colab では実行できないので、今回は **Google Cloud Vertex AI Llama 3.1 API Service** を使って API 経由で回答を生成しました 。

Mistral Large 2 は、量子化による性能低下の影響を確認するため、**Vertex AI API** と**量子化モデル**の2パターンで評価しました。量子化モデルは、[Stefan-Gabriel Muscalu](https://huggingface.co/legraphista) さんの 2Bit (IQ2S) 量子化 GGUF モデルを [llama-cpp-python](https://github.com/ggerganov/llama.cpp) (v0.2.83) によって実行しています。推論環境は Google Colaboratory A100 インスタンスです。

https://huggingface.co/legraphista/Mistral-Large-Instruct-2407-IMat-GGUF

## 結果

結果を下図に示します。

![et100_average.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58671/6a24f9aa-194c-7bdc-dfd8-d557bc7f22f3.png)



各モデルの具体的な回答例を次節以降で見ていきます。これまで評価したモデルの回答は下記スプレッドシートにまとめていますので、あわせてご参照ください。

https://docs.google.com/spreadsheets/d/1nOWtneRdrkxwQbAN0rWmXqiJXR9IXK9lVkyDjQTqNGc/edit

### Mistral Large 2

まず、Vertex AI API 版の得点は **3.94 点** でした。Qwen2 72B (Q4_K_M 量子化) を僅差で上回り、これまで計測したモデルの中で最高得点をマークしています。

一方、2bit 量子化したモデルは **3.79 点** でした。Vertex AI 版のモデルに比べるとやや劣るものの、Qwen 2 72B に次ぐ高得点です。

総じて、Mistral Large 2 は他のモデルが正答できない難しい問題にも対応できており、高い日本語能力がうかがえる結果となりました。

実際の回答例を見てみましょう。たとえば、次の問題では、不自然な表現が含まれる文章を自然な日本語に修正することが求められています。

> **Q:** 下の会話は音声認識を行った結果で誤りを含んでいる可能性があります。自然な会話に直してください。
> 
> カスタマー: すいません。ちょっと投資信託を始めたいと思ってるんですけど、
> オペレータ: かしこまりました新宅空
> オペレータ: ですね
> オペレータ: お口座、
> オペレータ: ご予定お伺いしてもよろしいでしょうか？

明らかな誤りとして「**新宅空**」という表現があり、これを「投資信託」に修正する必要があります。また、オペレータの応答が文の途中で分割されているため、正しい区切りに修正できればなおよいでしょう。

これに対する Mistral Large 2 (Vertex AI 版) の回答は以下の通りです。

> **A (Mistral Large 2, Vertex AI 版):**
> カスタマー: すいません。ちょっと投資信託を始めたいと思ってるんですけど、
> オペレータ: かしこまりました。投資信託ですね。
> オペレータ: お口座のご予定をお伺いしてもよろしいでしょうか？

「かしこまりました新宅空/ですね」を「かしこまりました。投資信託ですね。」に修正できており、文の区切りもうまく修正されています。

同じ設問に対する Llama 3.1 405B の回答を下記に示しますが、これと比較すると、Mistral Large 2 の回答がより高品質であることがわかります。

> **A (Llama 3.1 405B, Vertex AI 版):**
> カスタマー: すいません。ちょっと投資信託を始めたいと思ってるんですけど、
> オペレータ: かしこまりました、新宅空
> オペレータ: ですね。
> オペレータ: お口座、
> オペレータ: ご予定お伺いしてもよろしいでしょうか。

多くのモデルでは、Llama 3.1 405B のように「新宅空」を変換せず残すケースや、逆に削除してしまう・「新宅 空」という人名と解釈してしまうケースが見られたほか、そもそも指示追従ができていないもの（会話の続きを生成してしまう、元の文章と同じ内容を返す、など）もみられました。この問題の正答率はとても低く、設問別平均点でワースト10%に入る難問なのですが、それを考慮すると Mistral Large 2 の回答品質のよさが際立ちます。

また、高い論理的思考力がうかがえる回答例もありました。次の設問は、2次元座標上を指示どおりに動いたときに、スタート位置に戻るかどうかを判断する問題です。

> **Q:** 次の指示に従った場合、あなたはスタート地点に戻っていますか？
>
> 常に前を向いていてください。1歩下がって。2歩左へ行って。2歩下がって。6歩前進して。3歩、いや2歩右に進んで。

> **A (Mistral Large 2, Vertex AI 版):**
> 指示に従って動くと、スタート地点に戻るかどうかを確認しましょう。
> 
> 1. 1歩下がる。
> 2. 2歩左へ行く。
> 3. 2歩下がる。
> 4. 6歩前進する。
> 5. 2歩右に進む。
> 
> これらの動きを座標系で考えると、以下のようになります。
> 
> 1. 1歩下がる: (0, -1)
> 2. 2歩左へ行く: (-2, -1)
> 3. 2歩下がる: (-2, -3)
> 4. 6歩前進する: (-2, 3)
> 5. 2歩右に進む: (0, 3)
> 
> 最終的な座標は (0, 3) です。スタート地点は (0, 0) ですので、スタート地点に戻っていません。

Mistral Large 2 は「座標系で考える」という方針を選択したうえで、各ステップの位置を検討し、最終地点の座標を示しています。人間でも少し考えなければ回答できない難しい質問ですが、Mistral Large 2 は正しい結論に到達できており、ステップごとの位置も合っています。

「新宅空」の設問と同様に、この問題も正答率は非常に低いです。理由を示さずに結論だけを述べるケースのほか、位置を1次元の座標系で考えてしまうケース（1歩下がると `-1`、2歩左に行くと `-1 + (-2) = -3` など）、2次元座標系で考えてはいるが位置がデタラメなケースなどがみられ、ほとんどのモデルで思考過程に誤りがみられました。難易度の高い設問にもかかわらず、Mistral Large 2 は思考過程も正確に示すことができています。

一方、量子化すると論理的な問題を解く能力は落ちるようです。実際、同じ問題に対する 2-bit 量子化モデルの回答は、下記のとおり2次元座標系で考えるステップが欠落しており、結論も不正解でした。

> **A (Mistral Large 2, 2-bit 量子化版):**
> はい、指示に従った場合、スタート地点に戻っています。以下に指示をステップごとに分解します：
> 
> 1. 常に前を向いていてください。
> 2. 1歩下がって。
> 3. 2歩左へ行って。
> 4. 2歩下がって。
> 5. 6歩前進して。
> 6. 3歩、いや2歩右に進んで。
> 
> この指示に従うと、最初に下がって、左に2歩、さらに下がって、その後前進して、最後に右に2歩進むことで、元の位置に戻ります。

Vertex AI 版・2-bit 量子化版に共通の苦手分野としては、敬語など日本語独特の表現を解釈・生成するタスクが挙げられます。たとえば次の設問では、到着遅延に対する返信メールなのに、なぜか「大変申し訳ありません」と謝っています。それ以外の箇所は適切な文体になっているだけに、惜しいところです。

> **Q:** 以下のメールに返信してください。
> お疲れ様です。
> 本日体調不良により、予定より到着が少し遅れてしまいそうです。
> 遅くとも13時過ぎには着くと思います。
> ご迷惑をおかけして恐縮ではございますが、 何卒ご容赦いただけますようお願い申し上げます。

> **A (Mistral Large 2, Vertex AI 版):**
> お疲れ様です。
> 
> 体調不良での到着遅延、大変申し訳ありません。無理をせず、ゆっくりとお越しください。13時過ぎには着くとのこと、了解いたしました。
> 
> お大事にしてください。
> 
> よろしくお願いいたします。

後述するように、Llama 3.1 もこうした文体での日本語表現に苦戦しており、日本の文化・慣習に合った回答生成は海外モデル共通の課題と言えると思います。

### Llama 3.1 405B

Llama 3.1 405B の平均スコアは **3.16 点** で、Mistral Large 2 に及ばない得点にとどまりました。公式に日本語対応しているかどうかの差異が、スコアの差として現れていると思います。また、以前の記事（下記リンク）でご紹介した Llama 3 70B （4-bit 量子化）の得点は 3.42 点ですが、それと比べても見劣りする結果となりました。

https://qiita.com/wayama_ryousuke/items/a96f11fe2b7e2e3910e5#llama-3-70b-instruct

#### `\\n` が大量に生成される現象

Llama 3.1 405B のスコアが Llama 3 70B を下回った要因として、通常の改行（`\n`）と混在する形で、エスケープされた改行記号 (`\\n`) が大量に出力された点が挙げられます。回答 100 件のうち 14 件で、大量の（10個以上連続する） `\\n` 記号がみられました。

> **Q:** 次に読むべきSFを10冊挙げて

> **A (Llama 3.1 405B, Vertex AI 版):**
> \n\n\n\n\n\n\n\n\n\n\n\n\n...

このような回答は最低点（1点）と評価され、全体のスコアを大きく押し下げる要因となりました。

`\\n` が生成される現象は Llama 3 ではみられず、Llama 3.1 405B だけで確認されました。今回の評価には Vertex AI のエンドポイントを使用していますが、英語のプロンプトを送ったユーザも似たような現象に遭遇しているようです。他の API プラットフォームでは、問題が改善するかもしれません。

https://www.reddit.com/r/LocalLLaMA/comments/1ebzd5a/comment/lewjzl3

#### 日本語での応答性能

Llama 3.1 405B は日本語に公式対応していませんが、Llama 3 のように他言語が出力に混在してしまうケースはみられず、（性能の問題はあるものの）日本語での応答は支障なくこなせているようです。Llama 3.1 の学習データ自体には対応言語以外のテキストも含まれているため[^3]、これによって日本語能力を獲得していると考えられます。

[^3]: "Llama 3.1 has been trained on a broader collection of languages than the 8 supported languages." （Llama 3.1は、サポート対象である8つの言語よりも広範な言語コレクションでトレーニングされています。）([出典](https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct#intended-use))

:::note info
前述のとおり、Llama 3.1 の回答には `\\n` が含まれるケースが目立ちました。読みやすさ向上のため、下記の回答例では `\\n` を改行に直して掲載しています。
:::

まず、YouTube の台本を書く、という設問をみてみましょう。会話調の文章など、AIアシスタントが通常使う文体から外れた文章を書くことが苦手なモデルも多いですが、Llama 3.1 405B が生成した台本は模範解答と比べても遜色なく、キャラ設定や筋書きに沿った自然な会話ができています。

<details><summary>質問・回答例（長いので折り畳んでいます）</summary>

> **Q:** youtubeの台本を書くのを手伝ってください。
> 
> タローとコタローという2人のキャラクターの対話ベースで進行します。
> 
> タローは物知りで、コタローの疑問に答えてくれます。
> 
> 今回の動画は、映画スラムダンクを視聴者に薦める動画です。以下のポイントを押さえた脚本にしてください。
> 
> - まるでスポーツの試合を見ているかのように迫力のあるバスケのシーン
> - 漫画の原作を読んだことのない人でも楽しめる、映画として完結しているストーリー
> - 来月に公開が終了する
> - 10行~15行程度の対話

> **A (Llama 3.1 405B, Vertex AI 版):**
> タロー：最近、映画館で「スラムダンク」を観に行ったんだ。すごく面白かったよ。
> 
> コタロー：そう？僕も観たいと思ってたんだけど、漫画の原作読んでないから観るの躊躇してたんだよね。
> 
> タロー：原作読んでなくても全然大丈夫。映画としても完結してるから、原作を知らなくても楽しめるよ。
> 
> コタロー：そうなんだ。じゃあ観てみようかな。
> 
> タロー：絶対観て損はないよ。バスケのシーンはまるで実際の試合を見ているかのように迫力がありすぎて、観ているだけで興奮するよ。
> 
> コタロー：それはすごいな。バスケに興味ない人でも楽しめる？
> 
> タロー：もちろん！ストーリーも感動できるし、登場人物が成長していく様子も描かれてて、本当に感動できるよ。
> 
> コタロー：わかった。近々観に行ってみるよ。
> 
> タロー：是非是非！来月には公開が終了するから、早めに観に行った方がいいよ。
> 
> コタロー：了解。早速予約してくるよ。
> 
> タロー：そうしてくれ！絶対に後悔しないよ。
> 
> コタロー：楽しみにしてる！
> 
> タロー：期待して待ってるよ。
> 
> コタロー：じゃあまたね。
> 
> タロー：またね。
</details>

一方、Mistral Large 2 と同様に、敬語表現の習熟は不十分な印象を受けました。下記の例では、「**お世話になります。**」という（メールの末尾としては）不自然な表現がみられます。こうした日本語独特の表現が求められる用途では、日本語データセットによる追加学習が必要になりそうです。

<details><summary>質問・回答例</summary>

> **Q:** 以下のメールに返信してください。
> お疲れ様です。
> 本日体調不良により、予定より到着が少し遅れてしまいそうです。
> 遅くとも13時過ぎには着くと思います。
> ご迷惑をおかけして恐縮ではございますが、 何卒ご容赦いただけますようお願い申し上げます。

> **A (Llama 3.1 405B, Vertex AI 版):**
> お疲れ様です。
> 
> お体の具合が悪いようでご心配申し上げます。
> ご無理をなさらず、ご自分の体調に応じてお越しください。
> 13時過ぎのご到着で問題ありませんので、ご安心ください。
> 
> どうぞお気をつけてお越しください。
> 
> お待ちしております。
> 
> お世話になります。

</details>

また、全体を通して短い回答が目立ち、他のモデルに比べて理由や補足情報が少ないと感じました。2つの設問に対する Llama 3.1 405B の回答例を下記に示しますが、どちらも回答が1文だけになっており、理由の説明はありません。

<details><summary>質問・回答例</summary>

> **Q:** 次の文のうち、どちらがより意味が通じるでしょうか。
> 選択肢1: 男が刑務所に行ったのは、ガソリンスタンドを襲ったからだ。
> 選択肢2: 男がガソリンスタンドに強盗に入ったのは、刑務所に入ったからだ。

> **A (Llama 3.1 405B, Vertex AI 版):**
> 
> 選択肢1: 男が刑務所に行ったのは、ガソリンスタンドを襲ったからだ。

> **Q:** Q：私の目は黒く、髪は明るい黄色で、足元はしっかりと地面に根ざしています。私は太陽の光を顔に浴びるのが好きです。私の正体は何でしょう？

> **A (Llama 3.1 405B, Vertex AI 版):**
> 
> A：向日葵です。

</details>

同じ問題に対する Mistral の回答は、理由や具体的なステップを示すなど、より詳細で理解しやすい回答になっています。

<details><summary>質問・回答例</summary>

> **A (Mistral Large 2, Vertex AI 版):**
> 選択肢1: 男が刑務所に行ったのは、ガソリンスタンドを襲ったからだ。
> 
> この文がより意味が通じます。この文は、男がガソリンスタンドを襲ったことが原因で刑務所に行ったという因果関係を明確に示しています。
> 
> 選択肢2: 男がガソリンスタンドに強盗に入ったのは、刑務所に入ったからだ。
> 
> この文は、因果関係が逆転しており、男が刑務所に入ったことが原因でガソリンスタンドに強盗に入ったという意味になってしまいます。これは一般的な因果関係とは異なるため、意味が通じにくいです。

> **A (Mistral Large 2, Vertex AI 版):**
> あなたの正体は「ひまわり」です。ひまわりは黒い目（中心部）と明るい黄色の花びらを持ち、しっかりと地面に根を張っています。そして、太陽の光を顔に浴びるのが好きで、太陽の方向に向かって成長することで知られています。

</details>

[Mistral](https://mistral.ai/news/mistral-large-2407/) によれば、Llama 3.1 よりも Mistral Large モデルの回答のほうが短いそうなのですが、これとは異なる結果になりました。下図右側のグラフは Mistral Large 2 プレスリリースから引用したもので、各種モデルの平均回答長を示しています。このグラフからは Mistral Large 2 は Llama 3.1 よりも平均的な回答長が200トークン程度短いことがうかがえます。測定に用いられたデータセット（MT Bench）は英語であり、日本語の回答傾向にそのまま当てはまるわけではない、という点に留意が必要ですが、今回これと異なる傾向が観測されました。

> ![mistral-large-2407-mtbench.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58671/c216fcb5-2e62-5aab-38c0-c7369fcc34c8.png)
>
> 左: MT-Bench スコア、右: 平均回答テキスト長
>
> 出典: Mistral (https://mistral.ai/news/mistral-large-2407/)

そこで、今回実施した ELYZA-tasks-100 データセットによる評価の回答傾向を分析するため、回答長（文字数）の集計も行いました。下図に、これまで評価した代表的なモデルの回答長分布を[以前公開した記事](https://qiita.com/wayama_ryousuke/items/50e36d0dcb37f8fb7dd8#%E5%9B%9E%E7%AD%94%E3%81%AE%E9%95%B7%E3%81%95%E3%81%AE%E6%AF%94%E8%BC%83---%E9%87%8F%E5%AD%90%E5%8C%96%E3%81%99%E3%82%8B%E3%81%A8%E5%9B%9E%E7%AD%94%E3%81%8C%E7%9F%AD%E3%81%8F%E3%81%AA%E3%82%8B)と同様の手法で示します。左から順に、Llama 3.1 405B、 Cyberagent の Llama 3.1 70B 日本語化モデル（Appendix でご紹介します）、Mistral Large 2 (Vertex AI 版), Mistral Large 2 (2bit 量子化版) を示しています。

![length_distribution.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58671/106e1de4-93d1-672d-0fa4-1ae9446885da.png)


Llama 3.1 405B の回答長分布に着目すると、トークン数上限まで回答しているサンプルの影響を受けて、上に引き延ばされた形状をしています。一方、黒い点は質問ごとの回答長を表していますが、Llama 3.1 405B の回答の多くは 0～100 文字の範囲に集中しています。また、図の内部にある破線は第1～第3四分位数を表していますが、Mistral Large 2 の回答長中央値がおよそ250文字なのに対し、Llama 3.1 405B の中央値は 100 文字を下回っていることがうかがえます。これらのことから、Llama 3.1 405B は他のモデルに比べて短い回答を返す傾向が強いと言えます。

回答の短いモデルは ELYZA-tasks-100 のスコアも下がる傾向があります。これには、採点者（GPT-4T）が長い回答を好む、という理由もありますが、回答に至った理由や思考プロセスを書かなければ減点する、という採点基準が設けられていることも要因のひとつです。なんらかの理由で、Vertex AI 版 Llama 3.1 405B では短い回答が生成されるようになってしまい、スコアに影響を及ぼしていると考えられます。ただし、前述のとおり Vertex AI 側の要因でこうした現象が生じている可能性も指摘されているため、留意が必要です。

## 考察

### 日本語性能

ELYZA-tasks-100 のスコアを見るかぎり、日本語に公式対応している Mistral Large 2 のほうが Llama 3.1 405B よりも高い性能を示しています。パラメタ数の観点で Mistral Large 2 (123B) と比較できるモデルは少ないのですが、Command R+ (104B、2024年4月発表) に比べると得点が 0.3 点ほど高く、性能向上が実感できます。

一方、LLama 3.1 405B は平均スコアが 3.16 点にとどまり、前述の改行記号に関する問題のほか、全体的な回答内容・品質も Mistral Large 2 に比べるとやや劣るように感じました。現状で本家 Llama 3.1 は日本語対応していませんが、英語のみ対応だった Llama 3 と比べると、他言語へのスイッチングが見られなくなっており、日本語の会話でも多言語対応の恩恵はある程度受けられると言えそうです。ファウンデーションモデルの多言語対応というトレンドは今後広がっていくと考えられ、本家 Llama の対応言語拡大（とくに日本語対応）に今後期待したいと思います。

### ライセンス

ライセンスの観点では Mistral Large 2 よりも Llama 3.1 のほうが寛容であり、モデルの重みや出力を活用しやすいと言えます。

先代の Llama 3 ライセンスと比較した Llama 3.1 ライセンスの特徴として、**モデル出力を使った蒸留・データセット合成が全面解禁された**、という点が挙げられます。Llama 3 ではモデルの出力を Llama モデル以外の学習に用いることが禁止されていたのに対し、Llama 3.1 ではこの制約が撤廃されています。

> The Llama 3.1 model collection also supports the ability to leverage the outputs of its models to improve other models including synthetic data generation and distillation. The Llama 3.1 Community License allows for these use cases. 
>
> Llama 3.1 モデルコレクションは、モデルの出力を活用して他のモデルを改善する能力もサポートしており、これには合成データ生成や蒸留が含まれます。Llama 3.1 コミュニティライセンスは、これらの使用例を許可しています。
>
> 出典: [Llama 3.1 モデルカード](https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct#intended-use)、翻訳は ChatGPT による

ただし、この方法を用いて作成したモデルは「Llama」の名前を冠さねばならない、という命名規則がある点には注意が必要です。

> 1-b-i) [...] If you use the Llama Materials or any outputs or results of the Llama Materials to create, train, fine tune, or otherwise improve an AI model, which is distributed or made available, you shall also include “Llama” at the beginning of any such AI model name.
>
> Llamaマテリアルやその出力・結果を使用してAIモデルを作成、トレーニング、ファインチューニング、またはその他の方法で改善し、そのAIモデルを配布または公開する場合、そのようなAIモデル名の先頭に必ず『Llama』を含めるものとします。
> 
> 出典: [Llama 3.1 コミュニティライセンス](https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct)、翻訳は ChatGPT による

一方、Mistral Large 2 は [Mistral 研究ライセンス](https://mistral.ai/licenses/MRL-0.1.md) で公開されており、研究・個人利用のみが許可されています。商用利用する場合は、商用ライセンス（Mistral Commercial License）を取得する必要があります。

こうした点を考慮すると、商用利用の可能性を考慮したモデル開発を行う場合は Llama 3.1 のほうが適していると言えます。

### モデル自動評価手法の課題

最後に、評価対象モデルの高性能化に伴って浮かび上がってきた、GPT-4 などの高性能モデルを評価者とする回答評価の課題についても指摘したいと思います。

ELYZA-tasks-100 の理論上のスコア範囲は 1～5 点ですが、2023年後半の時点では、オープンアクセスモデルの得点は最高でも2点台で、GPT-4T などクローズドなモデルとの差は大きく開いていました[^4]。しかし、2024年に入ると3点台をマークするモデルが現れ、記事執筆時点では、複数のモデル（Mistral Large 2、Qwen2 72B など）が 3.5 点を上回るスコアを示しています。近い将来、4点台に到達するモデルも現れると予想されます。

[^4]: ベンチマーク作成元の ELYZA さんが公表している [Llama-3-ELYZA-JP の PR 記事](https://note.com/elyza/n/n360b6084fdbd) によれば、GPT-4 (0613) の平均スコアは4.03点、GPT-4o (2024-05-13) は 4.49点です。本記事とは評価手法が異なるため単純比較はできませんが、OpenAI や Claude が提供するクローズドモデルは 4点台前半～4.5点程度のスコアになると考えられます。

今後、成績のよいオープンアクセスモデルが増えてくると、**評価モデル（GPT-4 Turbo）との性能差が小さくなり、評価のぶれの影響が相対的に大きくなる**ことが考えられます。GPT-4T の評価は必ずしも 100% 正確ではなく、明らかな誤答に対して高い得点を与えるケースが既にいくつか見られます[^5]。評価される側の性能が上がり、1点の重みが増えていく中で、こうしたケースをどのように減らしていくかが重要な課題になると思います。

[^5]: 一例として、`[ < < { } > [ { [ ]` という括弧を正しく閉じる問題について、Llama 3.1 405B は `> ] } > ]` と回答し、GPT-4 Turbo はこれに 5 点を与えています。正解は `} ] > ]` であり、回答に含まれる最初の `>` が余計です。

評価のぶれを抑える手法として、複数の評価モデル（例えば GPT-4o と Claude 3.5 Sonnet）を組み合わせたアンサンブル評価や、同一モデルで複数回評価を行って平均をとる方法が考えられます。"More agents is all you need" (Li et al., 2024) では、同一モデルで回答を複数回生成し、多数決をとることで回答の正確性が上がることが示されています。

https://arxiv.org/abs/2402.05120

また、海行さんの記事では同様の手法を実践しており、LLM の回答をオープンアクセスモデル（Command R+ と Llama 3 70B）に複数回評価させて、評価結果のぶれを観察しています。この記事が公開された当時と比べて（といっても4カ月前ですが）、オープンアクセスモデルの性能は大きく向上しており、評価の信頼性も高まっていると考えられます。商用モデルを使って評価する現状の手法では、評価のたびにコストがかかるという問題がありますが[^gpt4-cost]、採点に活用できるレベルの安定性をもつオープンアクセスモデルが今後登場すれば、こうしたモデルを使った評価がより一般化するかもしれません。

[^gpt4-cost]: 今回の評価では OpenAI API の `gpt-4-1106-preview` (バッチ推論モード) を使っていますが、ELYZA-tasks-100 での回答評価には1モデルあたり $1 程度かかっています。最新の GPT-4o (`gpt-4o-2024-08-06`) であれば、より安価（1モデルあたり $0.3 程度）で評価ができます。

https://soysoftware.sakura.ne.jp/archives/3850

評価回数を増やすことによるコスト (有償モデルの場合) や時間の増大というデメリットはあるものの、自動評価の安定性を高めるうえで、このようなアプローチは有効だと思います。

## まとめ

今回は、2024年7月後半に登場した Mistral Large 2 と Llama 3.1 405B の日本語性能を ELYZA-tasks-100 で評価しました。Mistral Large 2 はこれまでのモデルを上回る性能を示し、海外モデルの性能向上を象徴する結果となりました。一方、Llama 3.1 405B は改行記号の問題などにより、本来の性能を発揮できなかった可能性があります。

高性能な海外モデルによって、「ファインチューン・継続学習なしに日本語が話せるLLM」の性能が向上していることは、利用者としてはよいことだと思います。今後、ライセンス面の制約が小さい Llama 3.1 を中心に利用が広がると予想されます。

一方で、評価対象モデルの性能向上に伴い、評価手法の限界などの課題も浮かび上がってきています。モデル開発だけでなく、評価面での改善も今後は必要になるかもしれません。

## 参考リンク

* 評価用 Colab ノートブック
    * [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1XMfldV9otePBKnwAA2FRcMrJUho4ZUYK) Llama 3.1 405B Instruct (Vertex AI 版)
    * [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1Okk3TCFnHLd2efXzQD6hXUdVBadyWzLz) Mistral Large 2 (Vertex AI 版)
    * [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1Cx5RZ_Eqxe9ZiwiS9qC6LFyHGGSXLIvp) Mistral Large 2 (2-bit 量子化版)

## Appendix: `cyberagent/Llama-3.1-70B-Japanese-Instruct-2407` の性能評価

7月26日、CyberAgent から **Llama 3.1 70B の日本語化モデル**が公開されました。

https://huggingface.co/cyberagent/Llama-3.1-70B-Japanese-Instruct-2407

Meta が Llama 3.1 を公開したのは23日なので、公開から3日という驚異的な短期間で日本語派生モデルが登場したことになります。早速、モデルを評価してみました。

### 評価方法

モデルをそのまま評価環境 (Colab, A100 GPU) でロードするとVRAM不足になってしまうため、[mmnga](https://huggingface.co/mmnga) さんの GGUF 量子化版レポジトリから 4-bit (Q4_K_M) 量子化モデルをダウンロードし、 `llama-cpp-python` で読み込んで評価しています。回答を GPT-4 Turbo で評価している点は本編と同様です。

https://huggingface.co/mmnga/Llama-3.1-70B-Japanese-Instruct-2407-gguf

評価用 Colab ノートブックは [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1B2Pq2m6cXMST08KxV5o9qlpzDi4G0oJ0?usp=sharing) からご覧ください。

### 結果

ELYZA-tasks-100 平均点は **3.67点** でした。70B モデルは未検証なのでファインチューンの効果を直接測定することはできませんが、オリジナルの 405B に比べて高いスコアを出していることから、ファインチューンによる日本語性能向上の効果はあると考えられます。

![et100_cyberagent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58671/bedd6cdc-9a13-4e0b-898e-d85f850d4be0.png)

実際の回答を見てみると、敬語などの日本語表現や改行記号、極端に短い回答などの問題が解消されており、回答品質の向上が確認できました。

例えば、本家 Llama 3.1 の課題として取り上げた敬語表現に関して、CyberAgent 版モデルではより自然な表現になっています。

<details><summary>質問・回答例</summary>

> **Q:** 以下のメールに返信してください。
> お疲れ様です。
> 本日体調不良により、予定より到着が少し遅れてしまいそうです。
> 遅くとも13時過ぎには着くと思います。
> ご迷惑をおかけして恐縮ではございますが、 何卒ご容赦いただけますようお願い申し上げます。

> **A (Llama 3.1 70B Japanese Instruct):**
> お疲れ様です。
> 遅れのご連絡をいただき、ありがとうございます。
> お体に気を付けて、無理をなさらないようお気をつけ下さい。
> ご到着を待っていますので、ゆっくりお越しください。
> どうぞお大事に。

> **A (参考―Llama 3.1 405B):**
> お疲れ様です。
> 
> お体の具合が悪いようでご心配申し上げます。
> ご無理をなさらず、ご自分の体調に応じてお越しください。
> 13時過ぎのご到着で問題ありませんので、ご安心ください。
> 
> どうぞお気をつけてお越しください。
> 
> お待ちしております。
> 
> お世話になります。

</details>

また、回答理由や分析内容をより詳しく述べる傾向もみられました。例えば下記の設問について、Llama 3.1 405B では理由の記載がありませんでしたが、CyberAgent 版は思考過程も含めて詳細に回答しています。

<details><summary>質問・回答例</summary>

> **Q:** 次の指示に従った場合、あなたはスタート地点に戻っていますか？
>
> 常に前を向いていてください。1歩下がって。2歩左へ行って。2歩下がって。6歩前進して。3歩、いや2歩右に進んで。

> **A (Llama 3.1 70B Japanese Instruct):**
> 順を追って分析してみましょう。
> 
> 1. 1歩下がる：あなたはスタート地点から1歩離れています。
> 2. 2歩左に進む：あなたはスタート地点から1歩下がり、2歩左にいることになります。
> 3. 2歩下がる：あなたはスタート地点から3歩下がり、2歩左にいることになります。
> 4. 6歩進む：あなたはスタート地点から3歩下がり、2歩左にいたので、6歩前進すると、スタート地点から3歩前、2歩左にいることになります。
> 5. 2歩右に進む：あなたはスタート地点から3歩前、2歩左にいたので、2歩右に進むと、スタート地点から3歩前、ちょうど真ん中（左にも右にも寄っていない）になります。
> 
> 指示をすべて実行すると、あなたはスタート地点から3歩前、真ん中にいることになります。したがって、スタート地点に戻ってはいません。最終的な位置はスタート地点の3歩前です。

> **A (参考―Llama 3.1 405B):**
> はい、スタート地点に戻っています。

</details>

一方、やや詳細に過ぎる回答もみられたほか、同じ文章の繰り返しに陥るケースや、余計な情報をトークン数上限まで出力するケースが複数みられました。下記の回答はその一例です。（ネットスラングの「消防」の意味を「しつこい」と解釈していますが、回答そのものが冗長でしつこいです...）

<details><summary>質問・回答例</summary>

> **Q:** ネットスラングでは、似た音を持つ別の短い表現に表されることがあります。例えばサーバーは鯖（さば）と表現されます。
「消防 」というネットスラングはどのような意味を持つでしょうか？

> **A (Llama 3.1 70B Japanese Instruct):**
> ネットスラングで「消防」とは「しょうぼう」ではなく「しょうぼう」⇒「しょう」の部分が「消す」⇒「増す」⇒「増え」ない⇒「増え過ぎて」⇒「増え過ぎて」⇒「しすぎて」⇒「消しすぎて」⇒「火事」ではなく⇒「炎上」⇒「しすぎて」⇒「しつこい」⇒「しつこい」⇒「しつこい」⇒「しつこい」⇒「しつこい」といった連想から「しつこい」の意味で使われているそうです。
> 「消防」⇒「消す」⇒「しつこい」⇒「しつこい」という連想から⇒「しつこい」とは、しつこいと感じるくらいの「しつこさ」があって、しつこいと感じる⇒「しつこい」とは、しつこいと感じるくらいの⇒「しつこい」⇒「しつこい」とは、しつこいと感じる⇒「しつこい」⇒「しつこさ」があって⇒「しつこい」⇒「しつこい」⇒「しつこい」という⇒「しつこさ」⇒「しつこい」という⇒「しつこさ」⇒「しつこさ」の⇒「しつこい」⇒「しつこい」とは、「しつこい」の「しつこい」の「しつこさ」が「しつこい」⇒「しつこい」⇒「しつこい」⇒「しつこい」⇒「しつこい」という⇒「しつこい」⇒「しつこい」⇒「しつこい」の「しつこい」⇒「しつこい」の「しつこさ」⇒「しつこい」⇒「しつこい」とは、「しつこさ」のある⇒「しつこい」の意味で使われています。
> 「消防」というネットスラングは、「しつこい」の意味で使われています。しつこいと感じる⇒「しつこい」⇒「しつこさ」があって⇒「しつこい」とは⇒「しつこい」とは、しつこいと感じる⇒「しつこさ」があって⇒「しつこい」⇒「しつこい」とは⇒「しつこさ」⇒「しつこい」とは⇒「しつこい」とは⇒「しつこい」の⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこい」⇒「しつこい」とは⇒「しつこい」⇒「しつこい」の「しつこさ」⇒「しつこい」⇒「しつこい」⇒「しつこさ」の⇒「しつこさ」⇒「しつこい」⇒「しつこい」とは⇒「しつこい」とは⇒「しつこい」の⇒「しつこさ」⇒「しつこい」⇒「しつこい」⇒「しつこい」⇒「しつこい」⇒「しつこい」⇒「しつこさ」⇒「しつこい」の⇒「しつこさ」⇒「しつこい」とは⇒「しつこい」とは⇒「しつこさ」⇒「しつこい」とは⇒「しつこさ」⇒「しつこい」とは⇒「しつこい」とは⇒「しつこい」とは⇒「しつこい」の⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこさ」⇒「しつこい」とは⇒

</details>

全体的に、Llama 3.1 405B でみられた「回答が極端に短い」「理由の説明がない」などの問題は改善されており、405B と比べた回答品質は ELYZA-tasks-100 のスコアどおり向上している印象をうけました。本編で触れたライセンス面での扱いやすさを考慮すると、 CyberAgent 版 Llama 3.1 は日本語モデル構築時のベースモデルとして適していると思います。ただし、冗長な回答が比較的多くみられた点には注意が必要で、ファインチューンなどによって回答長を制御する工夫が求められると思います。