Sarashina2.2-Instruct:コンパクトかつ性能の高い日本語Instructモデル

概要

Tuningチームの清野舜、小林滉河、馬越雅人、入亮介です。

SB Intuitionsでは日本語に特化した大規模言語モデル(Large Language Model; LLM)の開発に取り組んでおり、これまでにSarashina1、Sarashina2シリーズ国内最大規模のMoEモデルを公開しています。 また、本記事に先立って、Sarashina2を更にブラッシュアップした事前学習済みモデルを公開しました。

この度、アカデミアや産業界におけるLLMの研究開発に更に貢献することを目的として、事後学習1を行った0.5B、1B、3Bモデル(Instructモデル)をMITライセンスのもとで公開します。 これらのモデルは事前学習モデルであるSarashina2.2-{0.5B, 1B, 3B}をもとに事後学習を行っており、同サイズ帯では日本語最高水準のベンチマークスコアを達成しています。

今回公開するInstructモデルは最大でも約3Bパラメータ規模のため、計算資源が限られた環境においても利用しやすいモデルであると考えています。 事前学習済みモデルとInstructモデルの2つを広くLLMの研究開発に活用して頂ければ幸いです。

性能評価

Instructモデルの性能を報告します。今回、評価には以下のデータセットを用いました。

ELYZA-tasks-100

株式会社ELYZAが作成・公開しているInstructモデルの評価用データセットです。 合計100件のタスクから構成されており、各タスクの遂行能力が5点満点で評価されます。

English MT Bench

Instructモデルのマルチターン対話能力を評価するための英語のデータセットです。 Writing、Roleplay、Extraction、Reasoning、Math、Coding、Stem、Humanitiesの8カテゴリ・80件のタスクで構成されています。 各タスクは10点満点で評価されます。

Japanese MT Bench

Stability AI社が作成・公開している日本語版のMT Benchデータセットです。 オリジナルのEnglish MT Benchのカテゴリ分けを踏襲して作られており、Instructモデルの日本語のマルチターン対話能力を評価することができます。 English MT Benchと同様、各タスクは10点満点で評価されます。

評価結果

SB Intuitionsが開発・公開している評価ツールであるFlexEval2を用いて、各Instructモデルの出力をGPT-4o3で評価しました。 本ブログの評価を再現できる設定ファイルをFlexEval のリポジトリ内で公開していますので、詳細はそちらをご覧ください。 それぞれの表において、今回公開するInstructモデルは太字で記載しています。各評価値は、9回の評価の(モデルに3回生成させ、各生成結果に対して3回の評価を行った)平均値です。

パラメータ数が近いモデルとの比較

まず、パラメータ数が近いモデル同士での比較をおこないました。 その結果を以下に示します。

モデル Elyza-tasks-100 Japanese MT Bench English MT Bench
Qwen/Qwen2.5-0.5B-instruct 1.53 2.95 4.98
sarashina2.2-0.5B-instruct-v0.1 2.38 4.55 5.09
Rakuten/RakutenAI-2.0-mini-instruct 2.41 4.49 5.13
SakanaAI/TinySwallow-1.5B-Instruct 2.81 5.24 6.31
Qwen/Qwen2.5-1.5B-instruct 2.28 4.06 6.99
llm-jp/llm-jp-3-1.8b-instruct3 2.53 4.62 4.83
sarashina2.2-1B-instruct-v0.1 2.88 5.09 6.46
google/gemma-2-2b-jpn-it4 3.02 5.19 7.56
Qwen/Qwen2.5-3B-instruct 2.99 5.68 7.88
llm-jp/llm-jp-3-3.7b-instruct3 2.79 4.98 5.44
sarashina2.2-3B-instruct-v0.1 3.75 6.51 7.71

表では、上から順番に0.5Bパラメータ規模のモデル、1Bパラメータ規模のモデル、それ以上の規模のモデルに分けて結果を提示しています。

まず、sarashina2.2-0.5B-instruct-v0.1 は3つのタスク全てで Qwen/Qwen2.5-0.5B-instruct を上回る性能を達成しています。 次にsarashina2.2-1B-instruct-v0.1ですが、安定的に高い性能を達成しており、日本語性能と英語性能を両立できていると言えます。 最後に sarashina2.2-3B-instruct-v0.1 ですが、Elyza-tasks-100およびJapanese MT Benchで最高性能を達成しているほか、English MT BenchでもQwen/Qwen2.5-3B-instructに次いで高い性能(7.71)を達成しました。

これらの結果から、今回公開するInstructモデルは、既存の小規模モデルに負けない高い性能を達成していると言えます。

より大きなパラメータ数のモデルとの比較

次に、sarashina2.2-3B-instruct-v0.1 について、約2~3倍程度パラメータ数の大きいモデルとの比較をおこないました。 その結果を以下に示します。

モデル Elyza-tasks-100 Japanese MT Bench English MT Bench
sarashina2.2-3B-instruct-v0.1 3.75 6.51 7.71
Qwen/Qwen2.5-7B-instruct 3.53 6.57 7.24
llm-jp/llm-jp-3-7.2b-instruct3 3.24 5.57 6.02
tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.3 3.72 6.55 6.65

今回公開するInstructモデルは、約7~8Bパラメータ級のモデルと比較して小規模でありながら、各タスクにおいて、同程度またはそれ以上の性能を達成していることがわかります。

Japanese MT Bench の各カテゴリの性能について

Japanese MT Benchと English MT Bench では、問題が8つのカテゴリ5に別れており、Instructモデルの性能をカテゴリ別に評価可能です。 ここでは、Japanese MT Benchに着目し、各カテゴリの性能について詳しく見ていきます。

sarashina2.2-3B-instruct-v0.1は、8カテゴリのうち6つで最もスコアが高く、様々なカテゴリで安定して高い性能を発揮していることがわかります。 codingやreasoningカテゴリではQwen2.5-3B-instructにやや及ばないものの、幅広いタスクに対応できるモデルと言えます。

ELYZA-tasks-100 の出力

以下は、sarashina2.2-3B-instruct-v0.1が生成した出力の一部です。

本タスクでは、提示された文を別の言い回しに置き換えた上で、その言い換えの適切性を評価するよう求められています。 実際の出力を確認すると、日本語の文意を正しく理解し、的確なアドバイスを提示できていることがわかります。

質問

1. 彼は比類のない陸上選手だ。
2. 彼は比較的に良い陸上選手だ。

1の文が難しいので2の文に直そうと思っているのですが、これってあってますか?

回答

「彼は比類のない陸上選手だ」という文を「彼は比較的に良い陸上選手だ」という文に直すのは、意味が少し変わってくる可能性があります。元の表現「比類のない」は、彼に匹敵する人がいないほど非常に優れているという意味を持っています。一方、「比較的に良い」という表現は、他の人たちと比べて良いという意味ですが、どの程度優れているのかについては具体的な程度が示されていません。


もし、「彼は非常に優れた陸上選手だ」という意味を保ちつつ、より一般的な表現にしたい場合、「彼は優れた陸上選手だ」や「彼は優秀な陸上選手だ」といった表現が適切かもしれません。これにより、彼の陸上選手としての高い能力を強調しつつ、具体的な比較対象がなくてもその優秀さが伝わるようになります。

また、以下のタスクでは、与えられた条件を正しく整理し、適切に場合分けすることで、正解を導けていることがわかります。

質問

1から500までの数字を入力するのに何回キーボードを叩く必要があるでしょうか?

1桁の数字を入力するには1回、2桁の場合は2回、3桁の場合は3回キーボードを叩く必要があるものとします。

選択肢: (a) 1156 (b) 1392 (c) 1480 (d) 1562 (e) 1788

回答

1から500までの数字を入力する際に必要なキーボードの叩く回数を計算してみましょう。まず、数字の範囲とそれぞれの桁数を考慮します。

- 1桁の数字は1から9までで、9つあります。
- 2桁の数字は10から99までで、90つあります。
- 3桁の数字は100から500までで、401つあります(500を含む)。

それぞれの桁数に対するキーボードの叩く回数を計算します。

- 1桁の数字の場合:9つの数字に対して1回ずつなので、9回です。
- 2桁の数字の場合:90つの数字に対してそれぞれ2回ずつなので、\(90 \times 2 = 180\)回です。
- 3桁の数字の場合:401つの数字に対してそれぞれ3回ずつなので、\(401 \times 3 = 1203\)回です。

これらを合計すると、キーボードの叩く回数は以下の通りです:
\[9 + 180 + 1203 = 1392\]

したがって、必要なキーボードの叩く回数は 1392 です。よって、答えは (b) となります。

使い方

今回公開するのは、それぞれ0.5B・1B・3BパラメータのInstructモデルです。 各モデルはHuggingFace Hubにて商用利用も可能なライセンス(MIT)で公開しており、以下のリンクからダウンロードが可能です。

以下のようにtransformersライブラリからお試し頂けます。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, set_seed

# モデルのロード
model_name = "sbintuitions/sarashina2.2-0.5b-instruct-v0.1"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
chat_pipeline = pipeline("text-generation", model=model, tokenizer=tokenizer)
set_seed(123)

# ユーザーの入力
user_input = [{"role": "user", "content": "こんにちは。あなたの名前を教えて"}]

# モデルによる応答生成
responses = chat_pipeline(
    user_input,
    max_length=50,
    do_sample=True,
    num_return_sequences=3,
)

# 応答を表示
for i, response in enumerate(responses, 1):
    print(f"Response {i}: {response['generated_text']}")

# Response 1: [{'role': 'user', 'content': 'こんにちは。あなたの名前を教えて'}, {'role': 'assistant', 'content': 'Sarashina2と言います。本日のご要件を教えて下さい。'}]
# Response 2: [{'role': 'user', 'content': 'こんにちは。あなたの名前を教えて'}, {'role': 'assistant', 'content': 'こんにちは!私の名前はSarashina2です。今日はどうしましたか?'}]
# Response 3: [{'role': 'user', 'content': 'こんにちは。あなたの名前を教えて'}, {'role': 'assistant', 'content': 'Sarashina2と言います。本日のご要件を教えて下さい。'}]

おわりに

本記事ではSB Intuitionsが公開したInstructモデルについて、その性能も含めて紹介しました。 各モデルは商用利用も可能なライセンス(MIT)で公開していますので、ぜひ言語モデルの研究開発にご利用いただければと思います。


  1. 指示チューニングとDirect Preference Optimization (DPO)を実施しました。
  2. FlexEvalの詳細については、後日テックブログを執筆予定です。
  3. gpt-4o-2024-08-06 を用いました。
  4. google/gemma-2-2b-jpn-it のパラメータ数は、単語埋め込みのパラメータ数も含めると約2.6Bです。
  5. coding, extraction, humanities, math, reasoning, roleplay, stem, writingの8カテゴリ