【CyberAgentLM3-22B】独自開発オープン日本語LLMでトップレベル!
WEELメディア事業部LLMライターのゆうやです。
CyberAgentLM3-22B(CyberAgentLM3)は、サイバーエージェントが公開した最新の日本語大規模モデル(LLM)です。
このモデルは、サイバーエージェントが独自に構築したLLMであり、膨大な日本語データを用いて学習された約225億のパラメータを持つ日本語特化型のLLMです。
その日本語能力は、Meta社が開発したLlama-3-70B-Instructと同等であり、スクラッチ開発(独自開発)のオープンな日本語LLMとしてはトップクラスの性能を有しています。
今回は、CyberAgentLM3の概要や使ってみた感想をお伝えします。
是非最後までご覧ください!
CyberAgentLM3の概要
CyberAgentLM3-22B(CyberAgentLM3)は、サイバーエージェントが独自に構築した日本語大規模モデル(LLM)です。
日本語での受け答えに特化(英語でも可)しており、大量の日本語データを用いてトレーニングされ、約225億のパラメータを有しています。
その日本語能力は、LLMの日本語能力を評価するNejumi LLM リーダーボード3でのベンチマークにおいて、Meta社のLlama-3-70B-Instructと同等の能力を示しました。
Llama-3は、日本語特化ではありませんが、独自開発かつ1/3以下のサイズであるCyberAgentLM3が同等の能力を持っているのはすごいことだと思います。
CyberAgentLM3は、現在存在している独自開発のオープンソース日本語LLMとしては最も高い日本語能力があるそうです。
このモデルは、先代のCyberAgentLM2に続き、サイバーエージェントの多くのサービスに活用されていくことが予想されます。
ここからは、CyberAgentLM3の使い方について解説します!
なお、CyberAgentLM2について詳しく知りたい方はこちらの記事をご覧ください。
CyberAgentLM3のライセンス
CyberAgentLM3は、Apache License 2.0のもとで提供されており、商用利用や配布等を行うことができます。
利用用途 | 可否 |
---|---|
商用利用 | ⭕️ |
改変 | ⭕️ |
配布 | ⭕️ |
特許使用 | ⭕️ |
私的使用 | ⭕️ |
CyberAgentLM3の使い方
CyberAgentLM3は、オープンソースモデルなのでモデルをダウンロードしてローカル環境で実行することもできますが、オンラインで気軽に使えるデモも公開されています。
それぞれの使用方法を解説します。
ローカル
まずは以下のコードを実行してモデルをダウンロードします。
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
model = AutoModelForCausalLM.from_pretrained("cyberagent/calm3-22b-chat", device_map="auto", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("cyberagent/calm3-22b-chat")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
messages = [
{"role": "system", "content": "あなたは親切なAIアシスタントです。"},
{"role": "user", "content": "AIによって私たちの暮らしはどのように変わりますか?"}
]
input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
output_ids = model.generate(input_ids,
max_new_tokens=1024,
temperature=0.5,
streamer=streamer)
モデルのロードが完了したら、以下のコードで推論を実行します。
messages = [
{"role": "system", "content": "あなたは親切なAIアシスタントです。"},
{"role": "user", "content": "AIによって私たちの暮らしはどのように変わりますか?"}
]
input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
output_ids = model.generate(input_ids,
max_new_tokens=1024,
temperature=0.5,
streamer=streamer)
これで完了です。
オンラインデモ
CyberAgentLM3は、Hugging Face Spacesでデモが公開されており、以下リンクにアクセスするだけで試すことができます。
デモは、このようにGradioを使用しているので、分かりやすいUIになっています。
それでは早速CyberAgentLM3を使用してみましょう。
CyberAgentLM3を実際に使ってみた
以下のプロンプトを入力します。
代表的な画像生成AIとその特徴を教えて
結果はこのようになりました。
結果はこちら
代表的な画像生成AI(Generative Adversarial Networks、GANs)にはいくつかの種類がありますが、その中でも特に有名なものを以下に挙げ、それぞれの特徴を説明します。
- StyleGAN (Style Generative Adversarial Network)
- 開発者: Nvidiaの研究チーム
- 特徴:
- 高解像度の生成: 非常に高い解像度でリアルな顔や全身の画像を生成することができます。
- スタイルの可変性: 入力として与えられる「スタイル」パラメータにより、同じモデルから多様な外見を持つ人物を生成できます。これにより、異なる表情や髪型、服装などを簡単に変更可能です。
- トレーニングデータ: CelebA-HQやFFHQなどの高品質なデータセットで訓練されています。
- BigGAN (Big Generative Adversarial Networks)
- 開発者: Google Brainの研究チーム
- 特徴:
- 多クラス分類: 単一のGANではなく、複数のGANを組み合わせて使用し、生成する画像を特定のクラスに分類する機能を持っています。例えば、動物の種別など。
- 大規模データセット: ImageNetのような大規模なデータセットで訓練され、高精度な分類と生成が可能です。
- DCGAN (Deep Convolutional GAN)
- 開発者: Ian Goodfellow, Yoshua Bengio, Aaron Courville
- 特徴:
- シンプルなアーキテクチャ: 畳み込みニューラルネットワーク(CNN)を用いた基本的なGANのアーキテクチャ。
- 汎用性: テキストデータや他のデータ形式にも適用可能ですが、主に画像生成に用いられます。
- トレーニング効率: 比較的少ない計算資源で訓練が可能。
- CycleGAN (Cycle-Consistent GAN)
- 開発者: Tao Xiao, Jun-Yan Zhu, et al.
- 特徴:
- ドメイン変換: 一つのデータセットから別のデータセットへの変換を行うことができる。例えば、馬の写真をシマウマに変換するなど。
- サイクル整合性: 逆変換も考慮することで、元の画像と再構築された画像が一致するように設計されています。
- Progressive GAN (Progressive Growing of GANs)
- 開発者: Karras et al.
- 特徴:
- 段階的成長: 初めは低解像度の画像を生成し、徐々に高解像度にしていくことで、より詳細で高精細な画像を生成します。
- 安定性向上: 勾配消失問題を軽減し、トレーニングの安定性を向上させる手法が導入されています。
これらのモデルは、それぞれ異なる用途や目的に応じて選択されます。例えば、リアルな人間の顔を生成したい場合はStyleGAN、複数のカテゴリを生成したい場合はBigGAN、シンプルな構造でトレーニングを容易にしたい場合はDCGANなどが適しています。
GANについて、代表的なものをいくつか挙げ、その特徴を教えてくれました。
個人的にはかなり評価は高いですが、一般的に画像生成AIと言えばStable DiffusionやDALL-Eなどのプロダクトを思い浮かべる方が多いと思うので、少しマニアックすぎるとも感じます。
ここからは、先代モデルであるCyberAgentLM2と最新の日本語LLMであるLlama-3-ELYZA-JPとの比較を行っていきます。
CyberAgentLM3を実行するのに必要なスペック
公式から必要スペックに関する情報は公開されていませんが、一般的に20Bクラスのモデルを動かす場合はこのようなスペックが必要になります。
- GPU
- メモリ容量: 20Bモデルを動かすためには、最低でも40GBのGPUメモリが必要です。
- 推奨GPU: NVIDIA A100 (40GB/80GB)、それ以上の性能のGPU
- CPU:8コア以上でクロック速度3.0 GHz以上
- RAM: 最低でも64GB
- ストレージ: 2TB以上のNVMe SSD推奨
CyberAgentLM3を先代モデルとLlama-3-ELYZA-JPと比較してみた
CyberAgentLM3-22B、CyberAgentLM2-7B、Llama-3-ELYZA-JP-70Bを以下の項目で比較していきます。
- ビジネスメールの作成(日本語)
- 形態素解析(コーディング)
ここでは日本語能力に重点を置いた比較をしていきます。
早速検証していきましょう!
ビジネスメールの作成(日本語)
まずは日本語でのビジネスメールの作成です。
以下のプロンプトを入力します。
日本語でクライアントに送信する丁寧語・謙譲語を正しく使用したビジネスメールを作成してください。
結果はこのようになりました。
CyberAgentLM3の結果はこちら
もちろんです。以下は、丁寧語と謙譲語を適切に使用したビジネスメールの例です。
件名: 【重要】プロジェクト進捗報告および今後の予定について
株式会社〇〇
営業部 部長 田中様
いつも大変お世話になっております。株式会社△△の営業部、佐藤と申します。
さて、現在進行中のプロジェクトの進捗状況についてご報告させていただきます。
まず、現在の進捗状況につきまして、以下の通りご報告いたします。
プロジェクト進捗状況
- フェーズ1:要件定義
- 完了日:2023年10月15日
- 担当者:山田太郎
- 進捗率:80%
- コメント:主要な要件は確定しており、次のフェーズに進む準備が整いました。
- フェーズ2:システム設計
- 開始日:2023年10月16日
- 担当者:鈴木花子
- 進捗率:50%
- コメント:初期設計はほぼ完成しておりますが、一部仕様の再検討が必要です。
- フェーズ3:開発
- 開始日:2023年11月1日
- 担当者:高橋一郎
- 進捗率:20%
- コメント:初期段階の開発が進行中であり、順調に進んでおります。
次に、今後のスケジュールについてご案内申し上げます。
今後のスケジュール
- フェーズ4:テスト
- 開始日:2023年12月1日
- 担当者:佐藤次郎
- 終了予定日:2024年1月15日
- フェーズ5:納品および最終確認
- 開始日:2024年1月16日
- 担当者:中村恵美
- 終了予定日:2024年2月28日
最後に、何かご質問やご要望がございましたら、どうぞお気軽にご連絡ください。引き続きどうぞよろしくお願い申し上げます。
敬具
株式会社△△
営業部 佐藤次郎
電話番号:03-1234-5678
メールアドレス:jiro.sato@example.com
このメールでは、丁寧語と謙譲語を適切に使いながら、プロジェクトの進捗状況や今後のスケジュールを明確に伝える内容となっています。
CyberAgentLM2の結果はこちら
件名:[クライアント名] ご注文内容の確認について
クライアント名 様
いつもお世話になっております。
ビジネスメール作成代行のXYZメールサービスです。
ご連絡いただきありがとうございます。
ご注文内容について確認したい箇所がございますので、ご確認いただけますと幸いです。
ご確認いただき、問題なければ、下記内容について教えていただけますでしょうか?
- 材質
- サイズ
- 数量
- お届け先
お手数をお掛けいたしますが、何卒よろしくお願い申し上げます。
敬具
Llama-3-ELYZA-JPの結果はこちら
以下は、丁寧語・謙譲語を正しく使用したビジネスメールの例です。
件名: お見積もりについて
株式会社〇〇〇〇様
お世話になっております。株式会社△△△△の〇〇〇〇と申します。
先日は、お見積もりについてお問い合わせいただき、誠にありがとうございました。私どもでお見積もりを検討いたしました結果、下記の通りお見積もりを提出いたします。
[お見積もり内容]
お見積もり内容にご不明な点やご質問がございましたら、遠慮なくお申し付けください。私どもは、〇〇〇〇様のご要望に沿った提案をいたします。
今後とも、よろしくお願い申し上げます。
株式会社△△△△
〇〇〇〇
このメールでは、丁寧語・謙譲語を使用して、クライアントに敬意を表しています。具体的には、以下の表現を使用しています。
- 「お世話になっております」: クライアントに敬意を表す挨拶。
- 「〇〇〇〇と申します」: 自己紹介の際に使用する謙譲語。
- 「誠にありがとうございました」: クライアントの行為に対する感謝の表現。
- 「私どもで」: 謙譲語で、自社を表す。
- 「お申し付けください」: クライアントの行為を謙譲語で表す。
- 「よろしくお願い申し上げます」: クライアントに敬意を表す結びの言葉。
CyberAgentLM3が最も優れた回答を生成してくれたと感じます。
Llama-3-ELYZA-JPも丁寧なビジネスメールを生成してくれましたが、CyberAgentLM3のほうがより具体的かつそのままテンプレートとして使えそうなほどリアルにメールを生成してくれています。
またこの結果から、CyberAgentLM2からCyberAgentLM3の日本語能力の大幅な進化が読み取れます。
形態素解析(コーディング)
続いて、直接日本語能力にかかわる検証ではないですが、LLMの重要な要素であるコーディング能力を比較します。
今回は日本語に絡めた検証するため、英語のテキストを日本語に翻訳して形態素解析まで行うプログラムを生成してもらいます。
以下のプロンプトを入力します。
英語のテキストを日本語に翻訳して形態素解析まで行うプログラムを生成して
結果はこのようになりました。
CyberAgentLM3の結果はこちら
Pythonを使って英語のテキストを日本語に翻訳し、さらに形態素解析を行うプログラムを作成する方法をご紹介します。以下の手順に従って進めてください。
・必要なライブラリのインストール
まず、必要なライブラリをインストールします。googletrans
, mecab-python3
, および unidic-lite
を使用します。
pip install googletrans==4.0.0-rc1 mecab-python3 unidic-lite
・Pythonコードの作成
次に、Pythonコードを作成します。以下のコードは、英語のテキストを日本語に翻訳し、形態素解析を行います。
import MeCab
from googletrans import Translator
def translate_text(text, src='en', dest='ja'):
translator = Translator()
translated = translator.translate(text, src=src, dest=dest).text
return translated
def morphological_analysis(text):
tagger = MeCab.Tagger('-Ochasen')
node = tagger.parseToNode(text)
result = []
while node:
features = node.feature.split(',')
word = node.surface
pos = features[0]
# 必要に応じて他の形態素情報を追加することもできます
result.append((word, pos))
node = node.next
return result
if __name__ == "__main__":
english_text = "This is an example sentence for translation and morphological analysis."
# 翻訳
japanese_text = translate_text(english_text)
print("Translated Text:", japanese_text)
# 形態素解析
morpheme_result = morphological_analysis(japanese_text)
print("Morphological Analysis Result:")
for word, pos in morpheme_result:
print(f"Word: {word}, POS: {pos}")
・説明
- 翻訳部分 (
translate_text
関数):
googletrans
ライブラリを使用して、英語のテキストを日本語に翻訳します。
- 形態素解析部分 (
morphological_analysis
関数):
MeCab
ライブラリを使用して、日本語テキストの形態素解析を行います。- 各単語とその品詞を出力します。
・実行方法
上記のコードを実行すると、以下のように動作します。
- 英語テキストの翻訳結果が表示されます。
- 翻訳後の日本語テキストに対して形態素解析が行われ、各単語とその品詞が出力されます。
このプログラムは、基本的な翻訳と形態素解析を行うためのものです。実際の使用ケースに合わせて、エラーハンドリングや詳細な解析を追加することをお勧めします。
CyberAgentLM2の結果はこちら
英語のテキストを日本語に翻訳して形態素解析を行うプログラムをPythonで生成するためには、PythonのAPIを使用することができます。Pythonには、テキストを翻訳するためのgoogle-translate
というAPIがあり、テキストを翻訳することができます。また、形態素解析を行うためには、形態素解析器をインストールする必要があります。
以下は、google-translate
と形態素解析器を使用して、英語のテキストを日本語に翻訳して形態素解析を行うプログラムの例です。
import os
import requests
from googletrans import Translator
# 翻訳元のテキスト
source_text = "こんにちは、世界。"
# 翻訳先のテキスト
target_text = "こんにちは、世界。"
# 翻訳元のテキストを翻訳する
translator = Translator()
response = translator.translate(source_text, dest=zh)
# 翻訳先のテキストを取得する
target_text = response.text
# 形態素解析を実行する
import re
# テキストを形態素解析する
sentence = re.sub(pattern, replacement, text)
# テキストに分析される
print(sentence)
このプログラムでは、まずgoogle-translate
のAPIを使用して、英語から中国語に翻訳します。次に、翻訳されたテキストを形態素解析器を使用して形態素に分解します。最後に、分解された形態素を入力として別のプログラムに渡すことができます。
Llama-3-ELYZA-JPの結果はこちら
Pythonを使用して、英語のテキストを日本語に翻訳し、形態素解析を行うプログラムを生成します。以下はそのプログラムです。
import os
from googletrans import Translator
from janome.tokenizer import Tokenizer
def translate_and_analyze(text):
# Googletransを使用して英語を日本語に翻訳
translator = Translator()
translated_text = translator.translate(text, dest='ja').text
# Janomeを使用して形態素解析
t = Tokenizer()
tokens = t.tokenize(translated_text)
# 形態素解析結果を出力
for token in tokens:
print(token)
# 英語のテキストを指定
english_text = "This is a pen."
# 翻訳と形態素解析を実行
translate_and_analyze(english_text)
このプログラムでは、まずGoogletransを使用して英語のテキストを日本語に翻訳します。次に、Janomeを使用して翻訳された日本語テキストの形態素解析を行います。形態素解析結果は、各トークンとその品詞情報を出力します。
注意点として、Googletransはインターネット接続が必要であり、またJanomeは事前にインストールする必要があります。インストールは以下のコマンドで行うことができます。
pip install googletrans janome
また、Janomeの辞書はデフォルトでは小さいため、より正確な形態素解析を行うためには、NEologdなどの大規模な辞書をインストールすることをお勧めします。NEologdのインストールは以下のコマンドで行うことができます。
pip install neologd
NEologdを使用するには、JanomeのTokenizerの初期化時に辞書のパスを指定する必要があります。
t = Tokenizer('/path/to/neologd')
結果は、CyberAgentLM3とLlama-3-ELYZA-JPはそのままでも動作するコードを生成してくれましたが、CyberAgentLM2は不完全なコードを生成しました。
CyberAgentLM3とLlama-3-ELYZA-JPの結果を比較すると、前者は最も一般的な形態素解析ライブラリであるMecabを使用しているのに対し、後者ではJanomeというMecabよりはマイナーなライブラリを使用しています。
また、Llama-3-ELYZA-JPはNEologdをしてさらに正確な形態素解析をすることを勧めていますが、NEologdを使用する場合はMecabを用いたほうがより正確な形態素解析を行えます。
こういった点でみると、はじめから Mecabを使用しているCyberAgentLM3は、コーディングにおいても優れていると思います。
また、コーディング能力に関しても先代のCyberAgentLM2からの進化が顕著であり、全く別物に進化していると感じます。
今回の検証の結果、CyberAgentLM3は最新の日本語LLMであるLlama-3-ELYZA-JPを凌ぐ性能を有し、CyberAgentLM2からもあらゆる面で能力が大幅に向上していることが確認できました。
なお、Llama-3-ELYZA-JPについて詳しく知りたい方はこちらの記事をご覧ください。
CyberAgentLM3は最強の日本語LLM!
CyberAgentLM3-22B(CyberAgentLM3)は、サイバーエージェントが独自に構築した日本語大規模モデル(LLM)です。
日本語に特化しており、大量の日本語データを用いてトレーニングされ、約225億のパラメータを有しています。
このモデルは、既存モデルをベースとせず独自に構築された日本語オープンソースモデルとしては現状最高の性能を有しています。
実際に使ってみたところ、先代のCyberAgentLM2からはあらゆる面で大幅に性能が向上していることが確認できました。
また、Llama3 70Bをベースに構築されたLlama-3-ELYZA-JPと比較しても、日本語能力やコーディング能力の面で優れていると感じます。
今後は、CyberAgentLM3をベースにしたVLMやCyberAgentLM3を活用したプロダクトが登場することが予想されますので、今後の動向に注目しましょう!
生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。