日本語に特化した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が日本語でスタンダードになるのか楽しみです.

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です