我が機械学習のヨーダ、rasbt氏1が興味深いことをやっていたのでパクってみます
Was toying around with LLM model eval that run well on a laptop.
— Sebastian Raschka (@rasbt) 2024年6月11日
Turns out Llama 3 8B Instruct is a pretty good evaluator that runs on a MacBook Air.
I got a pretty high 0.8 correlation with GPT-4 scores.
Standalone notebook here if you want to give it a try:… pic.twitter.com/F3df053Y9E
目次
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で評価という可能性を感じさせる結果でした。