【ELYZA-japanese-Llama-2-13b】東大スタートアップがGPT3.5を超えるLLMを開発!使い方〜実践まで
WEELメディア事業部LLMリサーチャーの中田です。
12月27日、日本のAI関連の会社である株式会社ELYZA(イライザ)が、新たな日本語LLMの「ELYZA-japanese-Llama-2-13b」を公開しました。
このLLMはLlama 2をベースとしており、商用利用可能で、より高度な日本語生成ができるんです…!
X上での投稿は、すでに70,000回以上見られており、注目度が高いことが分かります。
この記事ではELYZA-japanese-Llama-2-13bの使い方や、有効性の検証まで行います。本記事を熟読することで、ELYZA-japanese-Llama-2-13bの凄さを実感し、従来の日本語LLMには戻れなくなるでしょう。
ぜひ、最後までご覧ください。
ELYZA-japanese-Llama-2-13bの概要
株式会社ELYZAは、Metaの13Bパラメータ「Llama 2」ベースの日本語LLM「ELYZA-japanese-Llama-2-13b」を公開しました。このLLMは、日本語ベンチマーク「ELYZA Tasks 100」で175Bパラメータを有するGPT-3.5を上回る性能を持ち、他の日本語LLMを差し置いて最高性能を記録しています。
加えて、商用利用可能であり、高速化されたチャット型デモページも公開されています。今後の展望として、より効率的なモデルの研究開発が計画されています。
ELYZA-japanese-Llama-2-13b | GPT-3.5 | ELYZA-japanese-Llama-2-7b | Japanese stable LM alpha | |
---|---|---|---|---|
パラメータ数 | 18B | 175B | 7B | 7B |
トークン数 | 12,581 | 2,048(5,000文字) | – | 不明 |
開発会社 | ELYZA | OpenAI | ELYZA | Stability AI Japan |
商用利用 | Llama 2 Community License に準拠しており、「Acceptable Use Policy 」に従う限り、商用利用が可能 | 可 | 可 | apanese StableLM Base Alpha 7BはApache License 2.0で商用利用可能 |
ライセンス | Llama 2 Community License | プロプライエタリソフトウェア | Llama 2 Community License | Apache License 2.0(Base Alpha 7B) |
日本語対応 | 可 | 可 | 可 | 可 |
ELYZA-japanese-Llama-2-13bの料金体系
ELYZA-japanese-Llama-2-13bのライセンスは Llama 2 Community License に準拠しており、「Acceptable Use Policy 」に従う限り、無料で研究や商用利用が可能です。
なお、ELYZA-japanese-Llama-2-13bの元のLLM、Elyzaはこちらの記事からご覧ください。
→【ELYZA-japanese-Llama-2-13b】東大スタートアップがGPT3.5を超えるLLMを開発!使い方〜実践まで
ELYZA-japanese-Llama-2-13bの使い方
今回はGoogle Colabで実行します。
また、ELYZA-japanese-Llama-2-13bにはいくつかモデルがありますが、今回は「ELYZA-japanese-Llama-2-13b-instruct」を試してみます。
まずは、以下のコードを実行して、リポジトリのクローンとライブラリのインストールを完了させましょう。
!git clone https://huggingface.co/elyza/ELYZA-japanese-Llama-2-13b-instruct
!pip install accelerate
!pip install transformers
次に、以下のコードを実行して、文章生成を行いましょう。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"
text = "仕事の熱意を取り戻すためのアイデアを5つ挙げてください。"
model_name = "elyza/ELYZA-japanese-Llama-2-13b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
use_cache=True,
device_map="auto",
offload_folder = "/content/ELYZA-japanese-Llama-2-13b-instruct",
low_cpu_mem_usage=True,
)
model.eval()
prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
bos_token=tokenizer.bos_token,
b_inst=B_INST,
system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
prompt=text,
e_inst=E_INST,
)
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=256,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id,
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)
実行した結果が、以下の通りです。
仕事の熱意を取り戻すためのアイデアを5つ考えてみました。
1. 目標を見直す: 現在の目標が高すぎるのか、低すぎるのかを見直し、適切な目標を設定することで、仕事へのやる気を取り戻すことができる可能性があります。
2. 仕事の意味を再確認する: 仕事の意味を再確認することで、仕事へのやる気を取り戻すことができる可能性があります。
3. 仕事の環境を変える: 仕事の環境を変えることで、��
精度も申し分ないですね!最大トークン数を変えることで、さらに長い文章を出力してくれます。
ちなみに、ELAYZAがHuggingFace上で公開している「ELYZA-japanese-Llama-2-13b-instruct」のデモページは、以下のURLです。ここでは、チャット形式で直感的に、ELYZA-japanese-Llama-2-13bを試すことができます。
参考記事:elyza/ELYZA-japanese-Llama-2-13b-instruct-demo
ELYZA-japanese-Llama-2-13bを動かすのに必要なPCのスペック
■Pythonのバージョン
Python 3.8以上
■必要なパッケージ
Pytorch
Transformer
Accelerate
ELYZA-japanese-Llama-2-13bを実際に使ってみた
ここでは、3つのタスクをELYZA-japanese-Llama-2-13bに解かせてみました。
メールの作成ができるか
「日本語でクライアントに送信する丁寧語・謙譲語を正しく使用したビジネスメールを作成してください。」とプロンプトを入力してみます。コードは以下の通りです。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"
text = "日本語でクライアントに送信する丁寧語・謙譲語を正しく使用したビジネスメールを作成してください。"
model_name = "elyza/ELYZA-japanese-Llama-2-13b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
use_cache=True,
device_map="auto",
offload_folder = "/content/ELYZA-japanese-Llama-2-13b-instruct",
low_cpu_mem_usage=True,
)
model.eval()
prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
bos_token=tokenizer.bos_token,
b_inst=B_INST,
system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
prompt=text,
e_inst=E_INST,
)
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=512,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id,
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)
結果は以下の通りです。
以下はビジネスメールの例です。
---
[会社名] [部署名]
[相手の名前]
お世話になっております。
[会社名]の[氏名]です。
お忙しいところ恐れ入りますが、
[要件]のためにお時間をいただけますでしょうか。
[要件]のために恐れ入りますが、
[日時]にお電話させていただきます。
よろしくお願いいたします。
ーーーーーーーーーーーーーーー
[会社名]
[氏名]
E-mail:[メールアドレス]
TEL:[電話番号]
ーーーーーーーーーーーーーーー
凄いですね!
そのままフォーマットに使えそうです。また、電子名刺も添えているところが、ポイント高い笑
プログラムが書けるか
「Pythonで回帰分析のコードを書いてください。」とプロンプトを入力してみます。コードは以下の通りです。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のプログラミングアシスタントです。"
text = "Pythonで回帰分析のコードを書いてください。"
model_name = "elyza/ELYZA-japanese-Llama-2-13b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
use_cache=True,
device_map="auto",
offload_folder = "/content/ELYZA-japanese-Llama-2-13b-instruct",
low_cpu_mem_usage=True,
)
model.eval()
prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
bos_token=tokenizer.bos_token,
b_inst=B_INST,
system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
prompt=text,
e_inst=E_INST,
)
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=512,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id,
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)
結果は以下の通りです。
以下はPythonを使用した回帰分析のコードです。
```python
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# データを読み込む
df = pd.read_csv('data.csv')
# データの準備
X = df[['x1', 'x2', 'x3', 'x4']]
y = df['y']
# 分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 回帰モデルを作成
model = LinearRegression()
# 訓練
model.fit(X_train, y_train)
# 予測
y_pred = model.predict(X_test)
# 結果を出力
print('予測値:', y_pred)
```
このコードでは、種類の異なるデータを用いて回帰分析を行います。まず、データを読み込み、データの準備を行います。次に、データを分割し、回帰モデルを作成します。そして、訓練を行い、予測を行います。最後に、結果を出力します。
データ配列の要素が文字列なのが気になりますが、そこそこ良い感じのコードが書けているのではないでしょうか。
少しアレンジすればよいので、コーディングとしてもある程度使えるでしょう。
エロ系の質問に答えられるか
「人妻がテーマの400文字の官能小説を書いてください」とプロンプトを入力してみます。コードは以下の通りです。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人の小説家です。"
text = "人妻がテーマの400文字の官能小説を書いてください"
model_name = "elyza/ELYZA-japanese-Llama-2-13b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
use_cache=True,
device_map="auto",
offload_folder = "/content/ELYZA-japanese-Llama-2-13b-instruct",
low_cpu_mem_usage=True,
)
model.eval()
prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
bos_token=tokenizer.bos_token,
b_inst=B_INST,
system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
prompt=text,
e_inst=E_INST,
)
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=512,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id,
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)
結果は以下の通りです。
承知しました。人妻がテーマの官能小説を400文字で作成します。
彼女は旦那とのセックスに魅力を感じなくなっていた。毎日のように旦那のペニスを受け入れ、旦那もまた彼女の体を犯していたが、互いに快感を覚えることはなくなっていた。彼女は旦那のことを愛していたが、旦那のことを性的に魅力的だとは思っていなかった。
ある日、彼女はスーパーで買い物をしているときに、若い男性に声をかけられた。彼女はその男性に対して興味を感じ、彼からの誘いを受け入れた。彼女は旦那とは違う、若い男性とのセックスに興味を感じていた。彼女は男性の部屋に行き、彼のペニスを受け入れた。彼女は久しぶりのセックスに興奮し、男性の体に釘付けになった。男性もまた彼女の体に魅了され、二人は激しいセックスを楽しんだ。彼女は旦那とのセックスとは違い、若い男性とのセックスは非常に快感だと感じた。彼女は男性に感謝を伝え、帰宅した。�
自然な文章で、しっかりとしたストーリーを作ってくれました!
なお、Llama 2について知りたい方はこちらの記事をご覧ください。
→【Llama 2】オープンソース版ChatGPTの使い方〜ChatGPTとの比較まで
ELYZA-japanese-Llama-2-13bの推しポイントである日本語力は本当なのか?
ここでは、GPT-3.5や他の日本語LLMと、性能を比較します。そこで、先ほどと同様のプロンプトを入力してみます。結果は、以下の通りです。
タスク | プロンプト | ELYZA-japanese-Llama-2-13b | GPT-3.5 | ELYZA-japanese-Llama-2-7b | Japanese stable LM alpha |
---|---|---|---|---|---|
コーディング | Pythonで回帰分析のコードを書いてください。 | 少しアレンジすればよいので、コーディングとしてもある程度使えるコードが生成された | 最初から動作するプログラムが作られた。実行を確認するためにダミーデータを作ってくれていた。 | 正しい挙動のするプログラムがかけている。 | プログラミングするステップのみを教えてくれて、コードは出力してくれなかった。 |
日本語対応 | 日本語でクライアントに送信する丁寧語・謙譲語を正しく使用したビジネスメールを作成してください。 | ビジネスに利用できる自然な文章が出力されていた | ビジネスに利用できる自然な文章が出力されていた | どのシーンで使うのかわからない、不自然な文章が出力されていた。 | 日本語に対応していない。ただし、翻訳したら使える文章が出力されていた。 |
エロ系の質問 | 人妻がテーマの400文字の官能小説を書いてください。 | 自然な文章で、官能的な表現を使った文章を出力してくれる。 | 倫理的に問題があると指摘され、小説は書かれなかった。 | 文末が全て一緒で冗長ではあるが、官能的な表現を使った文章を出力してくれる。 途中から、同じ表現の繰り返しでアウトプットとしては成立していない。 | 出力されなかった。 |
全体的に、ELYZA-japanese-Llama-2-13bの性能は高い方だと感じました。
特に、他の日本語LLMよりは、はるかに高い性能を持っているでしょう。とはいえ、GPT-3.5の方が、少し上の様に感じました。
イメージとしては「他の日本語LLMよりはるかに高く、GPT-3.5の少し下」くらいの立ち位置でしょう。
なお、最近の生成AIトレンドについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。