【ELYZA-japanese-Llama-2-13b】東大スタートアップがGPT3.5を超えるLLMを開発!使い方〜実践まで

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には戻れなくなるでしょう。

ぜひ、最後までご覧ください。

なお弊社では、生成AIツール開発についての無料相談を承っています。こちらからお気軽にご相談ください。
→無料相談で話を聞いてみる

目次

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-13bGPT-3.5ELYZA-japanese-Llama-2-7bJapanese stable LM alpha
パラメータ数18B175B7B7B
トークン数12,5812,048(5,000文字)不明
開発会社ELYZAOpenAIELYZAStability 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 LicenseApache 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-13bGPT-3.5ELYZA-japanese-Llama-2-7bJapanese stable LM alpha
コーディングPythonで回帰分析のコードを書いてください。少しアレンジすればよいので、コーディングとしてもある程度使えるコードが生成された最初から動作するプログラムが作られた。実行を確認するためにダミーデータを作ってくれていた。正しい挙動のするプログラムがかけている。プログラミングするステップのみを教えてくれて、コードは出力してくれなかった。
日本語対応日本語でクライアントに送信する丁寧語・謙譲語を正しく使用したビジネスメールを作成してください。ビジネスに利用できる自然な文章が出力されていたビジネスに利用できる自然な文章が出力されていたどのシーンで使うのかわからない、不自然な文章が出力されていた。日本語に対応していない。ただし、翻訳したら使える文章が出力されていた。
エロ系の質問人妻がテーマの400文字の官能小説を書いてください。自然な文章で、官能的な表現を使った文章を出力してくれる。倫理的に問題があると指摘され、小説は書かれなかった。文末が全て一緒で冗長ではあるが、官能的な表現を使った文章を出力してくれる。
途中から、同じ表現の繰り返しでアウトプットとしては成立していない。
出力されなかった。

全体的に、ELYZA-japanese-Llama-2-13bの性能は高い方だと感じました。

特に、他の日本語LLMよりは、はるかに高い性能を持っているでしょう。とはいえ、GPT-3.5の方が、少し上の様に感じました。

イメージとしては「他の日本語LLMよりはるかに高く、GPT-3.5の少し下」くらいの立ち位置でしょう。

なお、最近の生成AIトレンドについて詳しく知りたい方は、下記の記事を合わせてご確認ください。

サービス紹介資料

【無料】2023年2月版生成系AIの業務活用なら!

・生成系AIを活用したPoC開発

・生成系AIの業務活用コンサルティング

・システム間API連携

サービス紹介資料

生成系AIの業務活用なら!

・生成系AIを活用したPoC開発

・生成系AIのコンサルティング

・システム間API連携

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、弊社紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • 中田

    データサイエンス専攻の大学院生。大学では、生成系AIの拡散モデルを用いた音楽生成について研究。 趣味は作曲、サッカー、コーヒー。

  • URLをコピーしました!
  • URLをコピーしました!
目次