日本語に特化したLLMの紹介 | 楽天とサイバーエージェントモデルの紹介

2024年3月, 楽天グループ株式会社は, 日本語に特化したLLMモデル「RakutenAI-7B」を完全無償で公開しました. さらに, 同年5月, 株式会社サイバーエージェントも日本語に特化したLLM「CyberAgentLM2-7B」を公開しました. ちなみに, どちらのモデルもチャットに特化したモデルを公開しています.
このモデルは, 7Bモデルで比較的軽量であるため, Google Colab無料版でも利用することができます。
そこで, この記事では完全無料で超簡単に, これら2つのモデルの使い方を紹介していきます.
利用するサービス
以下のサービスを完全無料で使用していきます.
HuggingFaceのトークンは取得しておいてください。※詳しい取得方法はこちらから
一応, Google ColabでHuggingFaceのトークンの認証コマンドを以下に示します.
!pip install -U "huggingface_hub[cli]"
!huggingface-cli login
また, Google Colabのランタイムのタイプを「T4 GPU」に変更しておいてください.
手順は, ランタイム→ランタイムのタイプ変更→T4 GPUを選択→保存でOK
ここからは, Google ColabでのHuggingFaceトークンの認証は完了したものとして進めていきます.
日本語LLMモデル「RakutenAI-7B」の利用方法
HuggingFaceに乗っているコードで完全に動きます.
以下に, 載せておきます.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "Rakuten/RakutenAI-7B"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype="auto", device_map="auto")
model.eval()
requests = [
"南硫黄島原生自然環境保全地域は、自然",
"The capybara is a giant cavy rodent",
]
for req in requests:
input_ids = tokenizer.encode(req, return_tensors="pt").to(device=model.device)
tokens = model.generate(
input_ids,
max_new_tokens=256,
do_sample=True,
repetition_penalty=1.1,
pad_token_id=tokenizer.eos_token_id,
)
out = tokenizer.decode(tokens[0], skip_special_tokens=True)
print("INPUT:\n" + req)
print("OUTPUT:\n" + out)
print()
print()
日本語LLMモデル「CyberAgentLM2-7B」の利用方法
HuggingFaceに乗っているコードで完全に動きます.
以下に, 載せておきます.
import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
assert transformers.__version__ >= "4.34.1"
model = AutoModelForCausalLM.from_pretrained("cyberagent/calm2-7b", device_map="auto", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("cyberagent/calm2-7b")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
prompt = "AIによって私達の暮らしは、"
token_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids = model.generate(
input_ids=token_ids.to(model.device),
max_new_tokens=100,
do_sample=True,
temperature=0.9,
streamer=streamer,
)
ここからは, それぞれのモデルでどのように会話するのかをみていきます.
モデルの会話
会話のために, 「RakutenAI-7B-chat」と「CyberAgentLM2-7B-chat」モデルを使用しました.
本当は2つのモデル同士で会話させたかったんですけど, Google Colab無料版では処理が重かったので, それぞれで学習させました.
コードは以下になります. ここでは, 「こんにちは」で会話を始めています.
#RakutenAI-7B-chatモデルの会話プログラム
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "Rakuten/RakutenAI-7B-chat"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype="auto", device_map="auto")
model.eval()
req = "こんにちは"
for i in range(2):
input_ids = tokenizer.encode(req, return_tensors="pt").to(device=model.device)
tokens = model.generate(
input_ids,
max_new_tokens=30,
do_sample=True,
repetition_penalty=1.1,
pad_token_id=tokenizer.eos_token_id,
)
req = tokenizer.decode(tokens[0], skip_special_tokens=True)
#CyberAgentLM2-7B-chatモデルの会話プログラム
import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
assert transformers.__version__ >= "4.34.1"
model = AutoModelForCausalLM.from_pretrained("cyberagent/calm2-7b-chat", device_map="auto", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("cyberagent/calm2-7b-chat")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
prompt = "こんにちは" # test1
for i in range(2):
token_ids = tokenizer.encode(prompt, return_tensors="pt")
generated_ids = model.generate(
input_ids=token_ids.to(model.device),
max_new_tokens=30,
do_sample=True,
temperature=0.9,
streamer=streamer,
)
prompt = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
出力結果が以下になります.
#RakutenAI-7B-chatモデルの会話内容
1ターン : こんにちは
2ターン : 動物図鑑ですよ 『こんにちは動物図鑑ですよ』(こんにちはどうぶつずかんですよ)は、
3ターン : 1973年4月5日から同年8月2日までTBS系列局などで放送されていたアンケートバラエティー番組である。子供向け番組であった
会話になってないですね…
「こんにちは動物図鑑ですよ」という番組があるのか調べたんですけど, 存在すらしないみたいです.
また, 「1973年4月5日から同年8月2日まで」に該当する番組もないですが, 書き方がWikipediaみたいな表現なので恐らくモデルがWikipediaを使って学習されたことが分かります.
#CyberAgentLM2-7B-chatモデルの会話内容
ターン1 : こんにちは
ターン2 :
こんにちは、日本語でお願いします。
A: こんにちは。
B: こんにちは。
A: どこから来ましたか?
B: 地元
ターン3 :
A: そうですか。
A: あなたのお名前は?
B: スミスです。
A: ありがとうございます
一応, しっかりと会話できていますね. 楽天のモデルに比べると出力に時間がかかることが難点ですが, 日本語の文法もしっかりしています.
まとめ
今回の出力に関しては, 楽天のモデルはあまり良いイメージはないですが, 2024年12月に新たに日本語に特化したモデル「Rakuten AI 2.0」を発表しました. 軽量版もあるため, 公開されれば試してみたいです.
今回紹介したモデル以外にも, ソフトバンクやNTTなどたくさんの企業が日本語LLMの開発を行っており注目されています.
これからLLMはより活用されていき, 生活になくてはならない存在になることは間違いないですが, どのLLMが日本語でスタンダードになるのか楽しみです.