Llama 3 の日本語継続事前学習モデル「Llama-3-ELYZA-JP-8B」を試してみる
ELYZA社は2024年6月に日本語LLM「Llama-3-ELYZA-JP」シリーズを発表しました。
このモデルはMeta社の公開するLLMであるLlama 3シリーズをベースに、日本語追加事前学習および事後学習を行ったことで日本語性能を向上させたモデルです。
本記事では、一般公開されている「Llama-3-ELYZA-JP-8B」についての紹介と検証を行います。
Llama-3-ELYZA-JP-8Bの特徴
Llama-3-ELYZA-JPには700億パラメータのモデル「Llama-3-ELYZA-JP-70B」と80億パラメータの「Llama-3-ELYZA-JP-8B」があります。70Bの方はデモ版のサイト[1]が公開されており、8Bについては研究・商業目的での利用が可能な形で一般公開されています。
利用ライセンスは元モデルの Meta Llama 3 Community License[2]に準拠しており、このライセンスおよびAcceptable Use Policy[3]に従って利用することができます。
また、OpenAI社のGPT-4oのようにトークン数による利用料を必要としないため、より低コストに生成AIを利用できます。
Llama-3-ELYZA-JP-8Bの性能評価
ELYZAはLlama-3-ELYZA-JP-8Bの日本語の生成能力について、日本語ベンチマークのELYZA Tasks 100[4]と Japanese MT-Bench を用いて評価を行っています。 ELYZA Tasks 100はELYZAが独自に作成・公開した、多様で複雑なタスクとその評価基準から成る100件のデータセットで、各タスクに対する回答を評価基準に基づいて採点し、その平均値で評価します(5点満点)。Japanese MT-Benchは8つのカテゴリについて各10件の質問で構成されており、カテゴリごとの正解数の平均値で評価します(10点満点)。
様々なLLMについて、2つのタスクによる評価結果は以下の表のようになっています。Llama-3-ELYZA-JP-8Bは軽量ながらも「GPT-3.5 Turbo」「Gemini 1.0 Pro」などのモデルに匹敵する日本語性能を達成しています。下記はELYZA社のnote[5]から一部抜粋したものです。
モデル名 | ELYZA Tasks 100 | Japanese MT-Bench |
---|---|---|
GPT-4o | 4.320 | 9.40 |
Gemini 1.5 Pro | 4.275 | 9.39 |
Llama-3-ELYZA-JP-70B | 4.070 | 9.08 |
GPT-4 | 4.030 | 9.01 |
Llama-3-ELYZA-JP-8B | 3.655 | 7.78 |
GPT-3.5 Turbo | 3.475 | 8.54 |
Gemini 1.0 Pro | 3.515 | 8.49 |
Meta-Llama-3-8B-Instruct | 3.000 | 7.49 |
Llama-3-ELYZA-JP-8Bの使い方
Llama-3-ELYZA-JP-8BはHugging Face[6]上で公開されており、transformers ライブラリからモデル名を指定することで利用することができます。
#必要なライブラリをインストールする
pip install torch transformers
ライブラリをインストール後、以下のサンプルコードのように相手の設定を「DEFAULT_SYSTEM_PROMPT」に、ユーザーが送信するテキストを「text」に入力して実行することで文章を生成できます。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# システムプロンプト(初期設定)
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。特に指示が無い場合は、常に日本語で回答してください。"
# 送信するテキストを入力する
text = "仕事の熱意を取り戻すためのアイデアを5つ挙げてください。"
# 使用するモデルを指定する
model_name = "elyza/Llama-3-ELYZA-JP-8B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto",
)
model.eval()
messages = [
{"role": "system", "content": DEFAULT_SYSTEM_PROMPT},
{"role": "user", "content": text},
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
token_ids = tokenizer.encode(
prompt, add_special_tokens=False, return_tensors="pt"
)
with torch.no_grad():
output_ids = model.generate(
token_ids.to(model.device),
max_new_tokens=1200,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
output = tokenizer.decode(
output_ids.tolist()[0][token_ids.size(1):], skip_special_tokens=True
)
# 応答を表示する
print(output)
実行結果の例
仕事の熱意を取り戻すためのアイデアを5つ提案します。
1. 目標設定の見直し: 現状の目標が達成可能なのか、達成したいのかを再評価し、より挑戦的で意味のある目標を設定します。目標が高くないと、モチベーションは上がりません。
2. 小さな成功体験の積み重ね: 大きな目標を達成するには、多くの小さな成功体験が必要です。小さな成功体験を積み重ねることで、自信とモチベーションが高まります。
3. 新しいスキルや知識の習得: 新しいスキルや知識を習得することで、仕事に対する興味と熱意を再燃させることができます。特に、業界や職種で求められているスキルを身に着けることが有効です。
4. 職場環境の改善: 職場環境が不満であると、仕事に対する熱意は下がります。職場環境を改善するため、同僚や上司とコミュニケーションをとり、解決策を探します。
5. 自分の強みや長所の再確認: 自分の強みや長所を再確認することで、仕事に対する自信と熱意を高めることができます。特に、他人から評価されている部分を再確認することが有効です。
以上のアイデアを実践することで、仕事の熱意を取り戻すことができます。
モデルの精度検証
以下の3つの問題にどのように回答するかを試してみました。
- 心のモデル
- 国語の問題
- モンティ・ホール問題
心のモデル
登場人物の心の状態を読み取ることができるかの問題です。 以下の問題文を入力して実行します。
①サリーとアンが部屋で一緒に遊んでいます。 ②サリーはボールをかごの中に入れて部屋を出て行きます。 ③サリーがいない間にアンがボールを別の箱の中に移します。 ④サリーが部屋に戻ってきます。 《問題》サリーはボールを取り出そうとして最初にどこを探しますか? |
結果
正解数:10/10 生成結果の例: |
10回とも「かごを探す」と回答していました。
しかし、9回は(1)とほぼ同じ文章が返されましたが、1回だけ(2)のように文法が不自然な文章が生成されていました。
国語の問題
文章の内容から適切な回答を選択する問題です。 以下の問題文を入力して実行します。
次の文を読みなさい。「Alexは男性にも女性にも使われる名前で、女性の名Alexandraの愛称であるが、男性の名Alexanderの愛称でもある。」この文脈において、次の文中の( )にあてはまるもっとも適切なものを選択肢のうちから1つ選びなさい。 Alexandraの愛称は( )である。 |
結果
正解数:10/10 生成結果の例: |
10回中10回とも(1)(2)のように①Alexが正しいという適切な文章を生成しました。
モンティ・ホール問題
少し複雑な状況における確率の問題です。Wikipedia [7] にある問題文をそのまま使用すると「この問題は、モンティ・ホール問題として有名です。」と述べてからWikipediaの解説を抜粋したような回答をしたため、問題文は以下のように作成しました。
①三つの箱があります。一つの箱には金貨が入っており、残り二つの箱は空です。 |
正答例は「③で空の箱を選んでいた場合、⑤でこの選択を変更すると確実に金貨が手に入る。つまり、⑤で選択を変えない場合の金貨が手に入る確率は1/3であるが、⑤で選択を変えた場合の金貨が手に入る確率は2/3となる。したがって、より確実に金貨を得るには⑤で選択を変えるべきである。」です。
この問題文を入力して実行します。
結果
正解数:0/10 生成結果の例: (2) ” ⑤で選択を変えるべきです。理由は、金貨が入っている箱を知っているあなたが、選ばれていない二つの箱から空の箱を一つ開けて取り除くためです。 (3)” ⑤で選択を変えるべきです。 |
生成結果は上記のような3パターンとなりました。どれも論理的に見える説明がなされていますが、(1)(2)は「④で箱が取り除かれると金貨が入った箱を選べる確率は1/2である」という解釈をしています。
(3)のように、1回だけ正解に近い結果がありましたが、こちらは「初めに選択した箱が金貨の入った箱の場合、④で選ばれていない二つの箱から空の箱を取り除くため、金貨の入った箱は残り一つの箱になります。」と誤った説明をしています。
なお、この問題についてGPT-4で試したところ、10回中10回とも「これはモンティ・ホール問題である」と述べた上で正しい答えを出していました。
以下は GPT-4での生成結果の例です。
“この問題は「モンティ・ホール問題」として知られている有名な確率の問題です。以下に解説を示します。 ①〜⑤の手順を確認 最初に箱を選んだ時点で、選んだ箱に金貨が入っている確率は1/3、残りの二つの箱に金貨が入っている確率は2/3です。私(出題者)が空の箱を1つ開けて見せた後でも、あなたが最初に選んだ箱に金貨が入っている確率は変わらず1/3のままです。しかし、残りの1つの箱に金貨が入っている確率は2/3になります。 ⑥ で選択を変えるべきか? 選択を変えるべきです。理由は次の通りです。 選択を変えない場合の確率: 最初に選んだ箱に金貨が入っている確率は1/3のまま変わりません。 選択を変える場合の確率: 出題者が空の箱を取り除いた後、残った箱に金貨が入っている確率は2/3に増えます。 この問題の重要な点は、出題者が意図的に空の箱を取り除いたことです。そのため、選択を変えたほうが確率的に金貨を得る可能性が高くなります。よって、選択を変えることでより確実に金貨を得られることになります。” |
まとめ
本記事では、ELYZA社が公開している「Llama-3-ELYZA-JP-8B」についてご紹介しました。
今回は3つの質問を試してみました。心の問題や国語の問題については高い精度で生成できていましたが、モンティ・ホール問題のような複雑な問題へはまだ対応できないようです。しかし、ベンチマークテストの結果では十分な日本語性能を達成しているため、簡単な対話や文章の添削など一般的な用途には問題なく使えると思われます。APIやアクセストークンの申請手続きを必要とせずに容易に使用できる点も良かったです。
【参考文献】
[2] META LLAMA 3 COMMUNITY LICENSE AGREEMENT|Meta
[3] Meta Llama 3 Acceptable Use Policy | Meta
[4] ELYZA-tasks-100・Hugging Face
[5] 「GPT-4」を上回る日本語性能のLLM「Llama-3-ELYZA-JP」を開発しました|ELYZA
理工学専攻の大学院生です。自然言語処理・生成AIを活用した教育でのレポート評価について研究しています。