nikkie-ftnextの日記

イベントレポートや読書メモを発信

rasbtさんにならって、MacBook上でLlama 3を動かしてLLMの出力を評価させてみる

我が機械学習ヨーダ、rasbt氏1が興味深いことをやっていたのでパクってみます

目次

LLMの出力の評価

LLMが生成する文章の評価はなかなかホットなトピックです2
例えばOpenAIのドキュメントにはGPTを使ってLLMの出力を評価させる例が載っています。

Evaluate model outputs with reference to gold-standard answers

GPTは正解を参照してLLMの出力を評価します。

どうやらrasbt氏は、これがローカルで動かすLlama 33でもできたと投稿しているようなのです(キャッチーに言えば、ローカルLLMでLLM-as-a-Judge)。

I got a pretty high 0.8 correlation with GPT-4 scores.

(Llama 3 8B Instructによるスコアは)GPT-4のスコアと0.8の相関

ただし氏が検証に使っているのはトイデータと思われます(件数は100件)。
https://github.com/rasbt/LLMs-from-scratch/blob/aba7ed2eb1fce4ebbca28eeed11ab19687cb1764/ch07/03_model-evaluation/eval-example-data.json

MacBook上でLlama 3でLLMの出力評価

こちらのnotebookをベースにしました。

ライブラリのバージョン

annotated-types==0.7.0
anyio==4.4.0
certifi==2024.6.2
distro==1.9.0
h11==0.14.0
httpcore==1.0.5
httpx==0.27.0
idna==3.7
openai==1.34.0
pydantic==2.7.4
pydantic_core==2.18.4
sniffio==1.3.1
tqdm==4.66.4
typing_extensions==4.12.2

% pipx run https://gist.githubusercontent.com/ftnext/ac42ed33019cf4856a7a3437f91a2dfc/raw/aa38ed6f34f46fc0d81084c9285997e83228add0/rasbt_llm-instruction-eval-ollama.py

(このブログでたびたび取り上げている、PEP 723を一部サポートしたpipxを使っています4

ollamaでLlama 3をserve

もふもふ

% ollama pull llama3
% ollama run llama3

「What do llamas eat?」のようにチャットを打ち込むと、応答が生成されます

macOSの場合、ollamaのGUIアプリケーションを起動すると、Web APIが立ち上がっています。
なお、macOSではollamaはGPUも使っていると最近知りました(MPSってやつらしいです5)。

動かしているLlama 3は、こちらですね6
https://ollama.com/library/llama3:8b-instruct-q4_0

ollamaの機能、OpenAI互換のAPI

% curl http://localhost:11434/v1/chat/completions -d '{
  "model": "llama3",
  "messages": [
    { "role": "user", "content": "What do llamas eat?" }
  ]
}'

上記記事にならってopenai-pythonを使って叩きました(rasbt氏コードへの変更提案)。
OpenAIのAPI仕様を見ながらパラメタを設定しています。
https://platform.openai.com/docs/api-reference/chat/create

評価結果の確認

今回評価対象のモデルは2つですが、1つずつ評価します。
Llama 3には入力(Instruction)と正解、モデルの回答の3つを与えて、評価を0から100の整数値で答えさせています。

rasbt氏が用意したデータのうち2件だけを使いました。

1例目

### Instruction:
Name 3 different animals that are active during the day.
correct output: 1. Squirrel
2. Eagle
3. Tiger

model 1 response:
1. Squirrel
2. Tiger
3. Eagle
4. Cobra
5. Tiger
6. Cobra
score 60/100

model 2 response:
1. Squirrel
2. Eagle
3. Tiger
score 95/100
  • 「昼行性の動物を(重複無しで)3つ挙げよ」というinstruction
  • 正解は3つ挙げています(リス、ワシ、トラ)
  • model 1は6つ挙げました。しかも重複あり
  • model 2は正解同様の3つですね
  • 評価者のLlama 3はmodel 2に95点、model 1に60点をつけました

model 2の方が正解しているので、この例におけるLlama 3の数値化は大小関係が私たちの感覚と合うものです。
(model 2に100点をつけていない点が少し気になりますが)

2例目

### Instruction:
Take the following noun and turn it into a verb.

### Input:
Light
correct output: To light.

model 1 response:
To light.
score 80/100

model 2 response:
Light is the most abundant element in the periodic table.
score 67/100
  • instructionは「名詞を動詞に変換せよ」
  • 名詞としてLight(光)が与えられています
  • 正解は「To light」。文法でいう不定ってやつで、lightは動詞になっているってことかな?
  • model 1は正解同
  • model 2は名詞の光について説明していますね
  • 評価者のLlama 3はmodel 1に80点、model 2に67点をつけました

正解しているmodel 1に100点をつけていないのは気になりますが、Llama 3が付与したスコアの大小関係はこの例でも私たちの感覚と合います。

終わりに

rasbt氏にならってローカルでLlama 3を動かしてLLMの出力を評価させました。
この種の評価ってGPTなどプロプライエタリなかしこいモデルが必要だった認識なのですが、オープンなモデルでも実現しようとしています。
分野の進展がやばいですね。

rasbt氏のnotebookでは2つのモデルの出力を100件分評価し、スコアの平均を確認していました。
この記事ではそのうちたった2件しか動かしていないので、もっと検証は必要ですし、トイデータではなく現実のデータでLlama 3がどこまでやれるかは未知数です。
ですが、ローカルLLMで評価という可能性を感じさせる結果でした。


  1. Python機械学習プログラミング』の著者ですし、機械学習の評価についての論文が大変学びになりました
  2. 例えばJSAI 2024の岡崎先生資料
  3. Llama 3のライセンスについてはこちらで確認しています
  4. pipxのまとめ的な記事です
  5. 参考リンク(NLP2024 松田さんのチュートリアル資料) https://docs.google.com/presentation/d/1iROcbUOOBZlqIgmbySS_LYcrJsk8RRJxoHzhmkGV-Wk/edit#slide=id.g2bc017ed1ff_0_132
  6. ollamaは量子化したLLMを動かせます