ELYZAの新しい言語モデル(ELYZA-japanese-Llama-2-7b)を無料版Google Colabで試してみた
こんにちは。横須賀市デジタル・ガバメント推進室生成AI推進チームのM田です。私はどちらかというと技術に寄ったちょっとマニアックな記事を書いていきます。
今回は、東京大学松尾研究室発のAIスタートアップ「ELYZA」の「ELYZA-japanese-Llama-2-7b」という大規模言語モデルを、Google Colaboratory(無料版)で試してみました!
1.ELYZA-japanese-Llama-2-7b
ELYZAがMetaの「Llama 2」をベースに開発したモデルが「ELYZA-japanese-Llama-2-7b」です。
以下のIT naviさんのnoteの「まとめ」にもあるように、母体となったLlama2の性能は「オープンソースモデルの中では極めて優秀」ですが、我々日本人が使うためには日本語の回答がほぼ出ないという弱点がありました。
「ELYZA-japanese-Llama-2-7b」は、Llama2に日本語による追加事前学習を行っており、日本語で回答が返ってきます。また、商用利用も可能なようです。
なお、大規模言語モデルの性能は規模(パラメーター数)に比例します。また、規模が大きくなるとコンピューターの性能(特にGPU)が要求されます。
今回のELYZAのモデルのパラメータ数は7B (Billion)、つまり70億です。また今後、より大きな規模(130億及び700億)のモデルも出てくるとのことです。
(ちなみにGPT-4やGPT-3.5のパラメータ数は非公開ですが、それらの前身のGPT-3でもパラメータ数は1750億です)
2.早速試してみた
プログラムは、npakaさんとshi3zさんのnoteを参考(というかほぼそのまま)に動かしました!
まずは、必要なパッケージをインストールします。
# パッケージのインストール
!pip install transformers accelerate bitsandbytes
次に、トークナイザーとモデルを準備します。トークナイザーとは、文章をトークン(≒単語)単位に分割し、IDを振るものです。(npakaさんのnoteより)。
モデルをメモリに展開して利用可能にするので、すこし時間がかかります。
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
"elyza/ELYZA-japanese-Llama-2-7b-instruct"
)
model = AutoModelForCausalLM.from_pretrained(
"elyza/ELYZA-japanese-Llama-2-7b-instruct",
torch_dtype=torch.float16,
device_map="auto"
)
そして、モデルを使ってテキストを生成する関数を定義して、準備完了です。生成される最大のトークン数は、いったん1024としてみました。
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"
def q(text):
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,
)
with torch.no_grad():
token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
output_ids = model.generate(
token_ids.to(model.device),
max_new_tokens=1024,
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)
早速話しかけてみましょう。
q("""こんにちは。元気ですか?""")
ちゃんと返ってきました。少し長い文章も生成してもらいましょう。
q("""大規模言語モデルを動かすのになぜGPUが必要なのですか?""")
日本語として普通に読める文章が返ってきました!
3.ChatGPTとの比較
(1)アンケートの設問づくり
以下のプロンプトを使って、ChatGPTと比べてみましょう。
横須賀市役所の職員向けに、データ利活用のためのBIツールの利用方法の研修を行いました。
研修の結果の効果測定のため、参加者にアンケートを取りたいと考えています。
アンケートの設問を5問と、それぞれの設問に対する回答の選択肢の案を考えてください。
まずはChatGPTから。
今回のモデルではこうなりました。
(2)ドメインを考えてもらう
次に、以下の記事で使ったプロンプトも試してみましょう。
##命令文:
あなたは有能なコピーライターで、特にWebサイトの名称やドメインを考えるプロフェッショナルです。
次に示すWebサイトの概要と、条件をふまえたWebサイトのドメインの案を5つ考え、それぞれの案に込められた思いを簡潔に説明する文とともに示してください。
##Webサイトの概要:
・生成AIを活用していく取り組みを、いくつかの地方自治体が共同で発信する
・このWebサイトは、横須賀市が主催する
・地域の住民や他の地方自治体、さらに企業、研究機関等に、行政が取り組む生成AI活用の生の情報を発信する
・地方自治体が生成AIに取り組む価値を伝える
・生成AIに取り組む自治体や企業を増やし、生成AI活用の取り組み全体を盛り上げることが目的
##条件:
・横須賀市が主催だが、横須賀市を表す文字はドメインには入れない
・ドメインの長さは10文字以内にすること
・覚えやすく、言いやすい、キャッチーなドメイン名にすること
・日本のWebサイトなので、.jpドメインにすること
##ドメインの案:
GPT-4だと、次のような回答が来ていました。(前のnote記事より)
今回のモデルだとどうでしょうか?
日本語モデルなので、ドメイン名が日本語で返ってきてしまいました!また「それぞれの思い」の内容も怪しいです。とはいえ、指示はおおむね通じてる雰囲気ですね。
(3)比べてみて感じたこと
今となっては驚きは少ないですが、GPT-3.5-Turbo、GPT-4ともに、ChatGPTはさすがの回答です。(巨大なモデルなので、当たり前ですが…)
一方、「ELYZA-japanese-Llama-2-7b-instruct」も、7Bという小さいモデルの割にちゃんと返ってきている感じがします。
指示したことはちゃんと通じているようですし、もう少し精度が上がれば十分業務でも使えるのではないでしょうか?
4.これは何が凄いの?
ChatGPTをはじめ、現在多くのユーザーに使われている大規模言語モデルは、クラウド上の巨大なサーバー、多数のGPUによって動いています。したがって、ユーザーはインターネットを経由して言語AIを使わざるを得ません。
しかし今回の7Bのモデルは、"逸般の誤家庭"にある数十万円程度のゲーミングPC…つまり個人で買えるレベルのコンピューターで動きます。こういった比較的小規模なモデルの精度が上がっていくと、いずれ、ちゃんと使える言語AIがクローズでローカルな環境で動くようになります。
ローカルで閉じた環境の中であれば、情報が流出する心配は格段に抑えられます。地方自治体にとっては、言語AIで個人情報の入ったデータも扱うことができるようになり、言語AIの活用の幅がとても広がります!
5.まとめ
今回は、東京大学松尾研究室発のAIスタートアップ「ELYZA」の「ELYZA-japanese-Llama-2-7b」という言語モデルを試用してみました。
もちろん、今すぐこれを自治体の中で使うことは難しいとは思いますが、かなり可能性を感じる結果だったと思っています。
なお、今回のColab notebookは、以下から閲覧できます。ぜひコピーして試してみてください。
(M田主任三郎)