概要
Pretrainingチームの高瀬翔と李凌寒です。
弊チームでは日本語能力に主眼を置いた大規模言語モデルの構築に取り組んでおり、Sarashina2-70BやSarashina2.1-1Bのように、いくつか事前学習モデルも公開してきました。 これまで公開したモデルは日本の知識を問う質問応答タスクでは高い性能を達成している一方で、数学タスクやコーディングタスク、すなわち、文章題のような自然言語で提示された計算問題や、与えられた指示を満たすコードを生成するタスクの性能は芳しくありませんでした。
これは、CommonCrawlのようなウェブ文書の中に、数学・コーディングタスクの性能向上に寄与するデータが非常に少ないことに起因していると考えられます。 そこで、学習コーパスの中から数学・コーディング能力向上に寄与しそうなデータを抽出し複数回使用する(アップサンプリング)、また、これらのデータを加工した人工データも組み合わせることで性能向上を図りました。
実際に整備したデータを用いて学習したモデルは下記の表に記すとおり、3Bパラメータと小規模なモデルであっても、日本語の数学タスク(MGSM-ja)、コーディングタスク(JHumanEval)において、以前公開した70Bパラメータのモデルである、Sarashina2-70B以上の性能を達成しています。 また、ウェブ文書の学習データ量を大幅に増やすことによって、知識を問うタスク(JMMLUやNIILC)においても、2倍以上のパラメータを持つSarashina2-7Bよりも高い性能を達成しました。
モデル | NIILC | JMMLU | MGSM-ja | JHumanEval |
---|---|---|---|---|
Sarashina2-7B | 62.2 | 42.5 | 7.2 | 12.8 |
Sarashina2-70B | 66.1 | 62.7 | 56.4 | 22.0 |
Sarashina2.2-0.5B | 34.6 | 28.8 | 21.2 | 15.2 |
Sarashina2.2-1B | 47.2 | 38.4 | 38.8 | 21.3 |
Sarashina2.2-3B | 62.2 | 52.7 | 62.4 | 39.6 |
今回、小規模な事前学習モデルとしてSarashina2.2-0.5B、Sarashina2.2-1B、Sarashina2.2-3Bを公開する運びとなりましたので、本記事ではモデルの解説も兼ねて、数学・コーディングタスクの性能向上に至るまでの試行錯誤を紹介します。
学習データ量のスケーリング則
大規模言語モデルについて、事前学習モデルの性能は費やした計算資源量に対数比例することが知られています。 計算資源量はパラメータ数と使用する学習データ量の積となるため、事前学習モデルの性能はパラメータ数と使用する学習データ量のそれぞれに対数比例します1。
英語・日本語のウェブ文書およびプログラミングコードを主たる学習データとして、3Bパラメータのモデルを10Tトークン学習した際のJMMLUの正解率の推移を下図に示します。
この図には3Bパラメータの性能の推移に加え、同程度のパラメータ数で9Tトークン学習されたモデルであるLlama3.2-3Bと、2倍以上のパラメータ数であるSarashina2-7Bの性能も示しました。 この図において、学習トークン数(=学習データ量)を表すx軸は対数スケールとしており、正解率がおよそ対数線形で向上していることが分かります。 他のモデルと比べた際には、5Tトークン学習時点でLlama3.2-3Bと同等の性能を達成し、10Tトークン学習時点ではSarashina2-7Bに迫る正解率となっています。 このように、知識を問うタスクの性能は学習データ量に応じて順調に上がっていきます。 実際、Sarashina2.1-1Bは学習に用いるウェブ文書を大幅に増やすという戦略で学習し、小規模なモデルながら、知識を問うタスクにおいては高い性能を達成していました。
では、数学やコーディングタスクの性能はどの程度でしょうか? 10Tトークン学習直後の3Bパラメータのモデルを「学習途中の3B」として、下記に数学タスク(MGSM-ja、GSM8K)とコーディングタスク(JHumanEval、HumanEval)の性能を記しました。
モデル | MGSM-ja | GSM8K | JHumanEval | HumanEval |
---|---|---|---|---|
学習途中の3B | 8.0 | 18.5 | 15.2 | 14.0 |
Qwen2.5-3B | 49.2 | 77.9 | 42.7 | 38.4 |
Llama3.2-3B | 16.8 | 29.9 | 23.8 | 25.6 |
表に示されているように、学習途中の3Bは10Tトークンを学習しているにも関わらず、数学・コーディングタスクの性能はかなり低いです。 近しいパラメータ数を持ち、18Tトークン学習されたQwen2.5-3Bや、9Tトークン学習されたLlama3.2-3Bと比べても大きな差があることが分かります。
この差は、単に学習データ量を増やせば埋められるものではありません。 10Tトークン学習時点までのMGSM-jaの性能の推移をプロットしてみましょう。
ここでは100Bから10Tトークンまでの性能の推移をプロットし、また、性能が伸び続けた場合、100Tトークンまで学習した際にどの程度まで上がるかを外挿しました。 加えて、Llama3.2-3Bの正解率も示しています。 この図からMGSM-jaの性能も学習データ量に対しておおよそ対数線形で向上していることが分かります。 しかしながら、傾きが非常に小さく、仮に学習データ量をさらに10倍し、100Tトークンまで学習したとしても、Qwen2.5-3BやLlama3.2-3Bの性能には到底及ばないことが分かります。
この原因として、我々が収集した学習データには、そもそも数学・コーディングタスクの性能向上に寄与するデータが少ないため、これらのタスクについて、学習データ量に対する性能向上の傾きが非常に緩やかになっていると考えられます。 言い換えれば、これらのタスクで高い性能を達成するには、学習データ量をただ増やし続けるのではなく、タスクに応じた学習データを整備し、学習データ量に対する性能向上の傾きを大きくする必要があると推測されます。 実際に、Llama3やQwen2.5のテクニカルレポートでは、数学やコードに特化したデータを収集する工夫についての記述があります。
そこで、我々は最終的なSarashina2.2を構築するにあたり、10Tトークンの事前学習の後に、数学・コーディングタスクに特化したデータを含めた追加事前学習を行いました。
数学・コーディングタスク性能を伸ばすために
数学・コーディングタスクの性能向上を狙うため、以下のアプローチを取りました。
- データ収集:数学・コーディングタスクに貢献すると考えられる文書をウェブ文書から抽出する
- 人工データ生成:抽出したデータを元に質問応答形式の文書を大規模言語モデルを用いて生成し、学習データを増強する
このように、ウェブ文書からタスクに貢献するデータを抽出し、大規模言語モデルを用いて洗練・加工するという手続きはZhouらやYueらにより、数学・コーディングタスク性能を向上する手法として提案されており、Qwen2.5でも数学やコーディングの性能を向上させるために用いられています。
また、構築したデータについて、さらに大規模言語モデルを用いて表現の言い換えや翻訳によるデータ増強も行いました。
10Tトークン学習したモデルについて、上記の手続きで構築したものを含むデータで追加事前学習を行います。 この追加事前学習について、100Bトークン地点までの学習データ量に対するMGSM-jaの性能を下図にプロットしました。 また、先の図と同じく、Llama3.2-3Bの正解率も記しています。
この図から、追加事前学習において、10Bトークン学習時点で既にLlama3.2-3Bの正解率を上回っていることが分かります。 すなわち、新たに構築したデータにより、学習データ量に対する性能向上の傾きが大きくなったことが分かり、タスクに応じた学習データを整備する重要性がうかがえます。 この追加事前学習後に、学習に用いていたウェブ文書全体から高品質な文書を抽出し、構築したデータと組み合わせて更に小規模な追加学習を行い、最終的なモデルとしました。
性能
今回構築したSarashina2.2-{0.5B、1B、3B}と、それに近いパラメータ数を持つ他機関の公開モデルを、各種ベンチマークで評価した性能を示します。 評価は弊社の公開している FlexEval というライブラリを用いて行い、本ブログの評価設定をリポジトリ内で公開しています。
日本語質問応答の性能として、全体的なスコアの絶対値が比較的低いタスクであるJMMLUやNIILCを示しています。 また、数学タスクとして、小学生レベルの文章題からなるGSM8Kと、その一部を日本語へと翻訳したMGSM-jaのスコアを示してます。 コーディングのタスクは、関数のdocstringが与えられ、その続きを生成するHumanEvalとその日本語版であるJHumanEvalを示しています。
モデル | NIILC | JMMLU | GSM8K | MGSM-ja2 | HumanEval | JHumanEval |
---|---|---|---|---|---|---|
Qwen2.5-0.5B | 2.4 | 25.1 | 38.0 | 8.4 | 28.7 | 20.1 |
Sarashina2.2-0.5B | 33.9 | 28.8 | 28.4 | 21.6 | 22.0 | 15.2 |
RakutenAI-2.0-mini | 19.7 | 27.4 | 4.0 | 2.0 | 9.1 | 7.3 |
TinySwallow-1.5B | 20.5 | 39.6 | 39.0 | 24.4 | 31.7 | 26.2 |
plamo2-1b | 35.4 | 28.2 | 11.0 | 8.0 | 25.6 | 18.9 |
llm-jp-3-1.8b | 28.3 | 27.4 | 2.8 | 3.2 | 0.6 | 0.0 |
Llama-3.2-1B | 7.9 | 24.9 | 8.3 | 4.4 | 18.9 | 15.2 |
Qwen2.5-1.5B | 9.4 | 39.2 | 61.7 | 30.4 | 39.0 | 31.1 |
Sarashina2.2-1B | 47.2 | 38.2 | 37.8 | 39.6 | 33.5 | 20.7 |
llm-jp-3-3.7b | 45.7 | 30.1 | 5.5 | 6.4 | 1.8 | 0.0 |
Llama-3.2-3B | 16.5 | 34.3 | 29.9 | 16.8 | 25.6 | 23.8 |
Qwen2.5-3B | 13.4 | 52.1 | 77.9 | 49.2 | 38.4 | 42.7 |
Sarashina2.2-3B | 63.0 | 52.7 | 61.7 | 63.6 | 52.4 | 39.0 |
日本語質問応答タスク(JMMLUとNIILC)は、Sarashinaが日本語に特化したモデルであることから、他のモデルに比べて高い性能を示しています。 また、数学タスク(GSM8KとMGSM-ja)、コーディングタスク(HumanEvalとJHumanEval)についても、英語性能トップである Qwen2.5 に追随、あるいは日本語評価データに関しては上回る性能を達成していることもあります。
おわりに
本記事では数学・コーディング性能の向上を目指した取り組みと、構築した事前学習モデルであるSarashina2.2-{0.5B、1B、3B}を紹介しました。 特に、ウェブ文書の量を増やすのみでは数学・コーディングタスクの性能は上がりづらい点と、これに対処するために、各能力に特化したデータの収集・合成の重要性について述べました。 Sarashina2.2-{0.5B、1B、3B}は事後学習を行ったInstructモデルとあわせて公開していますので是非お試しください。
弊チームでは今回紹介した手続きを数学・コーディングタスク以外にも適用することで、様々なタスク性能に対する学習データ効率を高め、より高性能なモデルを効率的に構築できるよう研究開発を進めています。 ご興味のある方は是非ご応募ください。
- 厳密には、綺麗に対数比例するのは、次単語予測のタスクにおける損失の値です。しかし、一部のタスクにおいては、正解率といった指標もおよそ対数比例に近い形になることを確認しています。↩
- オリジナルのMGSMデータセットの日本語サブセットには、題意を変えてしまうような問題の翻訳ミスが250件中22件含まれていることを発見しました。本ブログにおける評価では、そのような問題を修正した版を使用してスコアを算出しています。↩