日本語大規模言語モデル「Japanese Stable LM Beta」シリーズをリリースしました
Stability AI Japan は、オープンな日本語大規模言語モデルの中で最高性能*のものを含む「Japanese Stable LM Beta (JSLM Beta)」シリーズをリリースしました。 各モデルは Llama-2 をベースとしており、追加の学習を行うことで日本語の能力や日本に関する知識等を追加し、日本における用途に特化させています。特に、最大サイズの指示応答言語モデルである JSLM Beta 70B は、700億パラメータの商用利用可能な日本語言語モデルです。2023年11月現在、我々の知る限りでは最大規模のオープンな日本語特化言語モデルとなります。
*注:性能の評価方法は後述
今回公開した6つのモデルを3つのカテゴリに分けて説明します。
汎用言語モデル「JSLM Base Beta」
「JSLM Base Beta」は、日本語の読み書きの能力や日本に関する知識を増強するため、Llama-2のbase モデルに対し、継続事前学習 (continued pretraining) を行ったものです。これは、通常の事前学習 (pretraining) と同じように、ウェブを中心とした大規模なデータを用いてテキストの生成を学習するステップです。ただし、通常の事前学習と異なり、すでに事前学習を一度行った Llama-2のbase モデルに対し、日本語を中心とした異なるデータを用いた事前学習を行っています。
継続事前学習は Wikipedia, mC4, CC-100, OSCAR, SlimPajama(Books3を除く)等の日本語と英語データを利用し、のべ約1000億トークンで行われました。
指示応答言語モデル「JSLM Instruct Beta」
「JSLM Instruct Beta」は、継続事前学習を行った上述のBaseモデルに対し、Supervised Fine-Tuning (SFT) を施し、ユーザーの指示に受け答えできるようにした指示応答言語モデルです。SFT には Databricks Dolly-15k, Anthropic HH などの公開データセットを利用しました。
語彙拡張済みモデル「JSLM JA-Vocab Beta」
「JSLM JA-Vocab Beta」は、上述のプロセスに加え語彙の拡張を行ったモデルです。今回ベースとしたLlama-2は英語に特化したトークナイザが用いられています。そこで、トークナイザに日本語の語彙を追加することで、日本語の処理を効率化することを目指しました。
語彙の追加は継続事前学習の前に行いました。語彙は約20000語追加しています。語彙の追加語、新たな語彙に対する埋め込み層等の初期化・学習を行った後、継続事前学習を行っています。語彙の追加により、日本語の生成速度は約2倍程度向上しています。
性能評価
モデルと同様に、評価方法にも様々な改善を行いました。
2023年8月の「Japanese Stable LM Alpha」のリリースおよび2023年10月の「Japanese Stable LM 3B-4E1T」「Japanese Stable LM Gamma 7B」のリリースの際と同様に、今回のモデルの性能の評価にも日本語言語理解ベンチマーク (JGLUE) のタスクを中心として、文章分類、文ペア分類、質問応答、文章要約などの合計9タスクで評価を行いました。より具体的には、今回はlm-evaluation-harness の commit 9b42d412d0 を用いています。
以下は汎用言語モデルの比較です。700億パラメータの Japanese Stable LM Base Beta 70B が最も高いスコアを達成しています。また、70億パラメータのモデルとしては Japanese Stable LM Base Beta 7B が(Japanese Stable LM Gamma 7B に次ぐ)2番目に高いスコアを獲得しています。
以下は指示応答言語モデルの比較です[注釈]。ここでも汎用言語モデルと同様に、700億パラメータの Japanese Stable LM Instruct Beta 70B が最も高いスコアを達成しています。また、70億パラメータのモデルとしては Japanese Stable LM Instruct Beta 7B が(Japanese Stable LM Instruct Gamma 7B に次ぐ)2番目に高いスコアを獲得しています。
これまでのリリースと比べ、より公平でより正確な評価のためいくつかの改善も下記の通り行いました。
lm-evaluation-harness には各モデルに適した Prompt Template という概念が存在します。例えば、一般に汎用言語モデルには prompt template version 0.2、そして(日本語版 Alpaca テンプレートに従う)指示応答言語モデルには prompt template version 0.3 を使うことが推奨されます。一方、JCommonSenseQA において各種汎用言語モデルが汎用言語モデル向けの version 0.2 を用いるよりも指示応答言語モデル向けの version 0.3 を用いると高いスコアを出すという意図せぬ挙動を示していました。そこで、JCommonSenseQA の prompt template version 0.2 において答えを番号として返答するという必要以上に複雑な指示を取り除いた、答えそのものを返す prompt template version 0.2.1 を追加し採用しました。
Version 0.2:「質問と回答の選択肢を入力として受け取り、選択肢から回答を選択してください。なお、回答は選択肢の番号(例:0)でするものとします。」
Version 0.2.1:「与えられた選択肢の中から、最適な答えを選んでください。」
JNLI および MARC-ja においてクラス不均衡が大きいため accuracy ではなく balanced accuracy での評価に変更しました。
今回の評価は言語モデルの日本語の能力を測るのが主目的のため、JNLI においてプロンプトに含まれる「entailment」「contradiction」「neutral」のそれぞれを「含意」「矛盾」「中立」に変更しました。この変更を行う前には、多くのモデルのスコアがチャンスレート(完全にランダムに3クラスのうちの1つを予測した時に得られる評価結果)である 0.33 であったことから、タスクの難易度が高すぎたと思われます。
変更前:「前提と仮説の関係をentailment、contradiction、neutralの中から回答してください。」
変更後:「前提と仮説の関係を含意、矛盾、中立の中から回答してください。」
質問応答のタスクである JSQuAD と JAQKET v2 において部分一致に対しても部分点を与えるため exact match ではなく F1 での評価に変更しました。
文の文法の正確さを測定するタスクである JCoLA を追加しました。こちらのタスクに関してもクラス不均衡が大きいため JNLI および MARC-ja と同様に balanced accuracy での評価を採用しています。
クラス不均衡が大きいタスクに対し few-shot 学習を用いる場合、クラスを層 (stratum) とした層化抽出法 (stratified sampling) を用いるように変更しました。例えば JNLI においては stratified sampling を用いた 3-shot 学習、JCoLA においては stratified sampling を用いた 2-shot 学習を採用しています。
Few-shot 学習における shot 数をタスクの難易度に応じて変更しました。2023年10月時点において公開されている主要なオープンモデルおよび Stability AI 内部のモデルの計数十種類のモデルに対し評価を行い、各種モデルのスコアのばらつきが低く、上位のモデルのスコアが理論上の最大値より大幅に小さい場合はタスクの難易度が高いとし、shot 数を大きくしました。一方、各種モデルのスコアのばらつきが高く、上位のモデルのスコアが理論上の最大値に近い場合はタスクの難易度が低いとし、shot 数を小さくしました。これにより、タスクの難易度が高い場合は各種モデルの能力の差異をより明確にし、タスクの難易度が低い場合はモデルの素の能力を測れることを期待しています。
変更前:
JCommonSenseQA: 3-shot
JNLI: 3-shot
MARC-ja: 3-shot
JSQuAD: 2-shot
JAQKET v2: 1-shot
XLSum-ja: 1-shot
XWinograd-ja: 0-shot
MGSM: 5-shot
変更後:
JCommonSenseQA: 3-shot
JNLI: 3-shot
MARC-ja: 0-shot
JSQuAD: 2-shot
JAQKET v2: 1-shot
XLSum-ja: 1-shot
XWinograd-ja: 0-shot
MGSM: 5-shot
注釈: 指示応答言語モデルの評価においては全てのモデルに対し prompt template version 0.2 を用いて行いました(ただし JCommonSenseQA のタスクのみにおいては前述のように version 0.2.1 を用いています)。前述のとおり、version 0.2 は本来、汎用言語モデル向けの prompt template であり、指示応答言語モデルには version 0.3 などを用いることが推奨されています。しかし、今回の評価において各モデルに対し全 prompt template version の組み合わせを試してみたところ、以下の図のように指示応答言語モデル向けの prompt template を用いると汎用言語モデル向けの prompt template を用いたときよりもスコアが低くなるという意外な現象を発見しました。
特に、JSLM Instruct Beta などの Llama 2 形式のプロンプトを用いたデータによって得られた指示応答言語モデルには本来 Llama 2 形式の prompt template である version 0.6 を使うと最もスコアが高くなることが期待されますが、そのような結果は得られませんでした。このような問題のため、version 0.3 や 0.6 などの指示応答言語モデル向けの prompt template ではなく、 汎用言語モデル向けではありますが今回の比較対象のほぼ全てのモデルにおいて最も高いスコアを出した version 0.2 を用いて評価を行いました。こちらの現象については現在も調査中です。
評価結果がプロンプトの差異に大きな影響を受ける問題は Preferred Networks のブログ記事「日本語LLMベンチマークと自動プロンプトエンジニアリング」でも述べられており、いまだに解決されていません。より公平で安定した評価を行うため、今後コミュニティとともにこの課題に取り組みたいと思います。
言語モデルの生成例
lm-evaluation-harness を用いて言語モデルを客観的に評価するだけでなく、開発中にはしばしば言語モデルが異なる応用シナリオで生成する結果を実際に観察しています。例えば、ユーザーがテキストから重要な情報を抽出したいという要求に対する JSLM Instruct Beta 70B の応答は以下の通りです:
上記の例に示すように、私たちのモデルは、ユーザーの要求に基づき、テキストから重要な情報を抽出し、ユーザーが指定した形式で情報を整理することができます。次に、言語モデルが複数ターンの対話において、期待通りの振る舞いをするかどうかも観察します。例として、以下は JSLM Instruct Beta 70B が上記の質問に答えた後、ユーザーの新しい質問に対する回答例です:
注意深い皆様はお気付きでしょうが、この例ではGPT-4を使って私たちの言語モデルを評価する手助けをしており、GPT-4 は言語モデルの回答が満足できると考えています。LLM-as-a-Judge の研究を参考に、現在、 Japanese Multi-Turn Bench(JMT-Bench)を開発しています。近い将来に、JMT-Bench を用いたモデルの比較の結果についてお知らせできればと考えています。また、将来的にはより効率よく安定した言語モデルの評価ベンチマークが増えることを期待しており、コミュニティの皆様からのサポートとフィードバックも心から歓迎しています。