【この記事の目的】
この記事では、学習中のモデルの性能検証の前に行う、Continuos pre-trainingとInstruction tuningについて説明する。
事前学習では補えない知識や解答能力の獲得方法を紹介する。
【機材協力について】
本記事(および本連載プロジェクト)は、株式会社ハイレゾ様よりGPUクラウドサービス「GPUSOROBAN」の計算資源(NVIDIA A100 80GB)をご提供いただき、開発・検証を行っています。
0. はじめに
こんにちは!東京大学文科3類2年で、東大AI研究会 代表の青木です。
私たち東大AI研究会は東大で活動するサークルで、1年かけて0からGPT型モデルを開発するために、毎週水曜日に勉強会を開催しています。勉強会では初心者でも理解しやすいスライドと、充実したカリキュラムを用いて開発を進めています。
株式会社ハイレゾ様は自社でGPUデータセンターを運営し「GPUSOROBAN」 というGPUのクラウドサービスを提供する会社です。高性能GPUは非常に高価で、私たちのような学生サークルが簡単に手を出せるような代物ではありません。GPUSOROBANではクラウド上で必要な期間・量だけGPUを借りることができるため、初期投資を抑えてGPUを活用し開発を行うことができます。
現在株式会社ハイレゾ様の協力のもと、25億パラメーターのGPT型モデルの実装と訓練を行っています。その名もSGT(Scratch Generative Transformer)プロジェクト!前回に引き続き、SGTプロジェクトの様子をお伝えします。
モデルの事前学習が進んでおり、検証段階へ移行していきます。この記事は、Part5前編【評価準備編】として、モデルの性能検証に必要な事後学習の手法についてまとめます。
1. Continuous Pre-training
事前学習が完了したら、Continuous Pre-trainingとInstruction Tuningを行います。
Continuous Pre-trainingは、日本語では継続事前学習と呼ばれることもあります。これは、事前学習済みモデルに対して、特定分野のテキストを追加で学習させる方法です。
事前学習では、一般公開されたWebデータを中心に、幅広い文章を学習させています。Web上のデータにはさまざまな知識が含まれているため、最初は「600億トークン近く学習すれば、G検定レベルの機械学習の知識もそれなりに習得できるだろう」と思っていました。
しかし、学習が半分くらい完了した時点で推論テストをしたところ、最後まで学習を進めても、G検定に十分対応できるほどの知識を安定して獲得するのは難しそうだと感じました。
そこで、事前学習の重みに対して、G検定向けの知識を追加でチューニングする必要があります。G検定レベルの知識獲得を目的とする今回のモデル学習では、Continuous Pre-trainingは非常に役立つ手法です。しかし、決して万能というわけではありません。特定分野の知識を集中的に学習させることで、事前学習で得た一般知識や自然な文章生成能力を損なってしまうリスクもあります。
リスクは大きく2つあります。
-
1つ目は、知識の忘却です。
Continuous Pre-trainingで特定分野の知識を集中的に学んだ場合、事前学習で学んだ知識の一部を忘れてしまうことがあります。人間で例えると、「数学ばっかり勉強していたら、前に勉強した英単語を忘れちゃったよ」というような状態です。 -
2つ目は、文体の偏りです。
GPT型のAIモデルが学習データから学ぶのは、単純な知識だけではありません。文章形態、いわば「話し方」も学びます。学習データのもとになるWebデータには、ブログのような口語の文章から、報告書のような文語の文章まで、幅広い形態の文章が含まれています。この多様性が、より自然な文章生成を行うために重要になります。逆に、同じような形態の文章のみを学習させたら、モデルが出力する文章はどんどんその特定の形態に近づいていきます。敬語の文章ばかり学習させたら、モデルの出力も敬語に寄りますし、体言止めばかりの文章を学習させたら、モデルの出力も体言止めに寄る可能性があります。せっかく学んだ自然な「話し方」を失ってしまうのはもったいないですし、何よりモデルの汎用性が下がってしまいます。
G検定の知識を追加で獲得しつつ、事前学習で得た知識の忘却を防ぐためには、以下の工夫が重要です。
-
1つ目は、学習率を下げることです。
学習率を下げることで、モデルの重みが一度に大きく変わりすぎるのを防ぎます。Continuous Pre-trainingでは、すでに事前学習で獲得した知識の上に、G検定向けの知識を少しずつ追加していくことが重要です。学習率が高すぎると、既存の知識を上書きしてしまう可能性があるため、通常の事前学習よりも慎重に学習率を設定します。 -
2つ目は、G検定の学習データセットに、一般的なテキストデータを混ぜることです。G検定用のデータだけを学習させると、モデルがその分野の文体や知識に偏りすぎる可能性があります。そこで、G検定の学習データに加えて、事前学習で使ったような一般的なテキストも一部混ぜます。これにより、G検定の知識を追加しながら、事前学習で身につけた汎用的な言語能力や一般知識を復習させることを狙います。
2. G検定用データセットの作り方
それでは、肝心のContinuous Pre-training用データセット、つまりG検定の学習データセットはどのようにして準備するのでしょうか。G検定に関する知識を学習させるわけですから、もちろんG検定に出る可能性がある単語の知識を学習させます。
G検定のシラバスには重要単語の一覧が載っています。この重要単語に関する解説をしているテキストを集めなければならないのですが、モデルに学習させるに足るほどの解説データを集めるのはなかなか骨が折れる作業です。ネット上から集める方法もありますが、必要な用語を網羅し、品質をそろえ、学習用に整形するには時間がかかります。
そこで、今回は教師モデルを使って、G検定用語の解説文を生成することにしました。
性能の高い教師モデルの出力を学習データとして使い、別のモデルにその知識や振る舞いを学習させる方法を、蒸留と呼びます。
AIを使ってG検定用語の解説文を大量に生成することで、時間を短縮しながら、欲しい用語の解説を大量に用意できます。
AIを使ったG検定用語のデータ生成は、2つの段階に分かれています。「G検定の解説データを生成する」というゴールから遡る形で、それぞれの段階を見ていきます。
- 1つ目は、質問をプロンプトとして、「解説文となる回答」をAIに生成させることです。
- 2つ目は、そのプロンプトとして使う「G検定用語に関する質問」をAIに生成させることです。
つまり、「解説文となるAIの回答」を生成させるためのプロンプトになる「G検定用語の質問」も、AIで生成させるわけです。少しややこしいですが、一つ一つのやり方は単純です。
流れとしては、
G検定用語
↓
用語に関する質問
↓
質問に対する解説文
という形になります。
3. G検定用語の質問生成
まず、G検定に出る重要単語として、シラバスから481単語を抜粋しました。
これは、AIにG検定のシラバスに載っている単語を一つ一つ渡して、「この単語に関する質問を100個生成してください」と頼めば作成できます。
ただし、単純に「100個生成して」とだけ頼むと、同じような質問が重複してしまいます。そこで、以下のようなプロンプトを使用しました。
G検定に関する質問を生成します。
出力規則:
- 質問文だけを出力する
- 1行につき1問を出力する
- 各行の先頭に1から100までの番号を付ける
- 質問同士の論点をできるだけ重複させない
できるだけ解説文の多様性を残すため、質問生成のプロンプトはあまり複雑にしすぎず、単純な形にしました。
このプロンプトで、481単語 × 100個の質問を生成しました。つまり、合計で48,100個の質問です。
その後、この質問をさらにAIに入力して、解説文を生成させます。生成した解説文は学習用にトークナイズを施し、特定の用語に関する説明が一か所に集中しないように、文単位でシャッフルを行います。
蒸留は、大量のテキストを効率よく生成できる有効な手法です。ただし、蒸留を行う際には、蒸留元モデルのライセンスや利用規約に十分注意する必要があります。
ChatGPTやGeminiなどのクローズドな商用サービスでは、出力を他モデルの学習に使うことが制限されている場合があります。蒸留元の性能が高いほど、よい学習データを作りやすい一方で、利用規約上の制限もあります。そのため、規約をしっかり確認し、学習データ作成に利用できるモデルを選ぶ必要があります。
今回の蒸留では、gpt-oss-120bというモデルを使用しました。gpt-oss-120bは、OpenAIが公開しているオープンウェイトモデルです。今回はOpenRouterを経由してgpt-oss-120bを使用しました。
OpenRouterは、さまざまなモデルを共通のAPI形式で利用できるサービスです。OpenRouterのAPIキー1つで複数のモデルを扱えるため、大量のデータ生成を行う際に便利です。
Providerの欄にgpt-oss-120bをGPU付きで提供する会社の一覧がある。gpt-oss-120bの重みを載せたGPUごと使えるイメージ。
4. Instruction Tuning
Continuous Pre-trainingで知識を獲得した後は、Instruction Tuningでより自然な「回答の仕方」を学びます。
先ほどのContinuous Pre-trainingの項目で、モデルは事前学習の段階で「話し方」を学ぶということを説明しました。ただし、事前学習で学ぶのはあくまで「Webデータの話し方」です。
事前学習だけのモデルは、基本的に文章の続きを予測するように学習されています。そのため、ネット上の記事のような文章を続けることはできても、人間側の多様な要求に柔軟に対応できるとは限りません。
そこで、人間のプロンプトと、そのプロンプトで期待される回答形式をセットにした学習データセットを用意して、モデルに「回答の仕方」を学ばせます。
これがInstruction Tuningです。
たとえば、人間のプロンプトに対して、箇条書きで答えている回答文を多めに学習させたら、モデルも箇条書き中心で回答するようになります。選択肢問題に対して、正解の選択肢を答えるデータを学習させれば、選択肢問題に答える形式に近づいていきます。
ただし、Instruction Tuningは、Continuous Pre-trainingほどのデータ量を必要としないことが多いです。むしろ重要なのは、データ量だけではなく、指示と回答の品質、形式の多様性、目的に合ったデータ設計です。
今回は、Hugging Face上のInstruction Tuning用データセットの中から、llm-jp/magpie-sft-v1.0 を使用する予定です。
(llm-jp/magpie-sft-v1.0の例)
ただし、Instruction Tuningばかりを強く行ってしまうと、ここでも自然な文章生成能力が損なわれたり、特定の回答形式に偏りすぎたりする可能性があります。そのため、Instruction Tuningでも、学習率、学習step数、データ量には注意する必要があります。
5. 今後の検証
Continuous Pre-trainingとInstruction Tuningを行うことで、G検定に必要な知識と、柔軟な回答方法を兼ね備えたモデルを作ることを目指します。
ここでやっと、G検定の模擬問題を解かせる準備が整います。
とはいえ、G検定のような4択問題を渡しても、最初からきれいにA/B/C/Dのいずれかで回答してくれるとは限りません。特に、事前学習直後のモデルやContinuous Pre-training直後のモデルでは、「正解だけを出してください」という指示に従う能力がまだ弱い可能性があります。
そのため、評価方法にも工夫が必要です。
具体的な検証手法と検証結果については、Part5の後半で掲載します。
関連リンク
株式会社ハイレゾ 公式サイト:https://highreso.jp/
クラウドサービス GPUSOROBAN:https://soroban.highreso.jp/

