プロセス全体の大規模なモデル微調整
ファインチューニングの過程では、上記のプロセスを厳密に守ることが推奨される。これは、ステップをスキップすることを避けるためであり、その結果、非効率的な労働が発生する可能性がある。例えば、データセットが十分に構築されておらず、最終的に微調整したモデルの効果の低さがデータセットの品質に問題があることが判明した場合、事前の努力は水の泡となり、労力は半減する。
データ収集と照合
データセットの入手可能性に基づいて、データセットは、一般に入手可能なデータセットと入手困難なデータセットの2種類に分類することができる。
一般公開されているデータセットにアクセスするには?
一般に公開されているデータセットにアクセスする最も簡単な方法は、関連するオープンソースプラットフォームで検索し、ダウンロードすることである。例えば、GitHub、Hugging Face、Kaggle、Magic Hitchなどのプラットフォームは、多数のオープンデータセットを提供している。さらに、ポスティング、Zhihu、業界ごとのウェブサイトなど、クローラー技術を使っていくつかのウェブサイトからデータを取得することもできる。クローラーを使ってデータを取得するには、通常、技術的なサポートが必要であり、関連する法律や規制に従う必要がある。
必要なデータがネットワーク上で入手できなかったり、入手が困難な場合はどうするのか?
既存の一般に利用可能なデータセットが需要を満たさない場合、もう一つの選択肢は、データセットを自分で構築することである。しかし、数百から数千のデータセットを手作業で構築するのは、面倒で時間がかかることが多い。では、どうすれば効率的にデータセットを構築できるのだろうか?データセットを素早く構築するための2つの一般的なアイデアを以下に紹介する:
1.ビッグ・モデル・プラットフォームの「データ強化」機能の活用
現在、多くのビッグモデルプラットフォームがデータ拡張機能を提供しており、データセットを効果的に拡張することができる。例えば、質量分析オープンプラットフォーム、Xunfeiオープンプラットフォーム、volcanoオープンプラットフォームなどは、これらのプラットフォームの拡張機能により、生データを使ってより多くのサンプルを迅速に生成することができる。まず、少量のデータ(例えば50項目)を手作業で準備し、これらのプラットフォームにアップロードする。プラットフォームはデータ拡張技術によってデータを拡張し、データセットの拡張を迅速に実現する。
2.大規模モデルを使ったデータ生成
データを生成するもう一つの効率的な方法は、ビッグモデルの助けを借りることである。まず、少量のデータ(例えば数十件)を用意し、ビッグモデルに例として与える。ビッグモデルは、これらの例に基づいて類似したデータ内容を生成することができる。生成されたデータの品質を確保するために、最初の生成では一度に多くのデータを生成せず、20個のデータを生成し、ビッグモデルが犯しそうな一般的な間違いを特定するために注意深くレビューすることをお勧めします。そして、これらのエラー例をビッグ・モデルにフィードバックし、生成を改善する。
プロンプトの例 以下の例を参考に、同じような「最近の運勢」を20問出力してください。なお、あまり大げさな表現にせず、「活動中」「大会中」などの限定詞や属格の使用は避け、できるだけ簡潔な表現にし、不必要な修飾は避けてください。例 今期は順調ですか? 今期はお金持ちになれますか? 最近どんなことが待っていますか? 近い将来何が起こるだろう? 近い将来、私は幸運の神々の恩恵を受けるだろうか?
データクリーニングとデータセット構築の微調整
未加工のデータセットは通常、モデル学習と互換性がないため、モデルを学習したフォーマットと互換性を持たせるために、クリーニングと加工を行う必要がある。ほとんどの場合、微調整されたデータセットは通常AIpacaフォーマットを使って構築される。
AIpacaフォーマットの紹介
AIpacaフォーマットはシンプルな構造で、テキスト生成、翻訳、要約、特に1ラウンドタスク指向の命令微調整などのタスクに特に適している。以下はその主な構成要素についての詳細な説明である:
- instruction(命令): ユーザー入力(必須)に似たタスク命令で、モデルに何をすべきかを明示的に指示する。
- input: タスクが必要とする入力。タスクがオープンエンドか明示的な入力を必要としない場合、通常は空文字列になる。
- output(出力): 指示と入力を与えられたモデルが生成する必要のある望ましい出力、つまり参照解答(必須)。
- system:モデルのための事前プロンプトとみなすことができ、モデルの動作を設定するために使用され、通常はモデルのためのいくつかの初期ヒント(オプション)。
- 履歴(history): モデルが文脈上の関係を確立するのに役立つ過去の対話情報。複数ラウンドのタスクでは、モデルは履歴ダイアログに基づいて答えを生成する(オプション)。
例えば、AIpacaのデータ形式は以下の通り:
[ { "instruction": "「夢」、「忍耐」、「成功」という言葉を使って文章を作りなさい。", "input": ""、 "output": "夢を追い続けることによってのみ、最終的に成功することができる。" }, { "instruction": "『三国志』を簡単に紹介してください。", "input": ""、 "output": "三国志は中国古典四大名作の一つで、東漢末期から西晋初期までの約1世紀の歴史を描き、東漢末期の武将たちの戦乱の混乱や、魏・蜀・呉の三国間の政治的・軍事的闘争を再現し、多くの英雄的人物を描いている。" , "input": "", "output": "三国志は中国古典四大名作の一つで、東漢末期から西晋初期までの約1世紀の歴史を描き、東漢末期の武将たちの戦乱の混乱や、魏・蜀・呉の三国間の政治的・軍事的闘争を再現し、多くの英雄的人物を描いている。 } ]
データセット構築方法
微調整用のデータセットを作るには、通常、データをAIpacaフォーマットに準拠したJSONファイルに変換する必要がある。以下に、データセットの一般的な作成方法を2つ紹介する:
- データセットの手動構築:必要なデータを整理し、AIpacaフォーマットに従って構築した後、Pythonコードを書くことによってデータセットを手動で構築することができる。この方法は、単純なシナリオや小規模なデータセットに適している。
- マクロモデルを使った自動構築:マクロモデル・インターフェイスを呼び出すことで、データセットを自動生成する。このアプローチは大規模なデータセット、特にタスクの命令と出力のパターンが比較的決まっている場合に適している。
完全なデータセット形式
タスクのコマンド、入力、出力、システムプロンプトの単語、過去のダイアログ情報を含む完全なAIpacaフォーマットを以下に示す:
[ { "instruction": "人間の指示(必須)"、 "input": "人間の入力(オプション)"、 "output": "模範解答(必須)"、 "system": "システムプロンプト(オプション)"、 "履歴": [ ["第2ラウンドの指示(任意)", "第2ラウンドの回答(任意)" ]。 ] } ]
この形式は、指示+入力=問題、出力=答えという練習問題をモデルに与えるのと同じように、モデルが指示から出力への対応関係を学習するのに役立つ。
ベースモデルの選択
- モデルタイプの選択:タスク要件に基づいて、GPT、LLaMA、BERT などのベースモデルを選択する。
- サイズとパラメータ:計算資源、学習時間、推論速度を考慮して、モデルサイズ(例えば7B、13B、65Bのパラメータサイズ)を決める。
- オープンソースと商用モデルの比較:オープンソースモデル(LLaMA、Falconなど)と商用クローズドソースモデル(OpenAI GPTファミリーなど)のどちらかを選択する必要性を分析する。
- テストデータを使って比較テストを行い、選択した複数のモデルの中で最も適合するものを見つける。
モデル・パラメーターの説明
魂の5つの質問
I. ファインチューニングとは何か?
ファインチューニングとは、すでに訓練済みのモデルを新しいデータセットでさらに訓練するプロセスである。これらの事前学習済みモデルは、通常、大規模なデータセットで豊富な特徴や知識をすでに学習しており、一定の汎用的な能力を持っている。ファインチューニングの主な目的は、この一般的な知識を新しい、より具体的なタスクやドメインに移行させ、モデルが特定の問題をよりよく解決できるようにすることである。
なぜ微調整なのか?
1.コンピューティング・リソースの節約
大規模なモデルをゼロからトレーニングするには、多くの計算資源と時間が必要であり、非常にコストがかかる。ファインチューニングでは、事前に訓練されたモデルを出発点として使用するため、良好な結果を得るために新しいデータセットでの訓練が少なくて済み、計算コストと時間が大幅に削減される。
2.モデル性能の向上
事前に訓練されたモデルは、一般化された能力を持つ一方で、特定のタスクではうまく機能しないことがある。ファインチューニングは、ドメイン固有のデータを使ってモデルのパラメータを調整することにより、精度と効率を向上させ、ターゲットタスクの処理により習熟させる。
3.新しい地域への適応
事前に訓練された一般的なモデルは、特定のドメインのデータの特性をよく理解していない可能性があり、ファインチューニングを行うことで、モデルを新しいドメインに適応させ、特定のタスクのデータをよりうまく扱えるようにすることができる。
III.微調整は何をもたらすのか?
微調整により、最適化され調整されたモデルが得られる。このモデルは、事前に訓練されたオリジナルのモデルの構造に基づいているが、新しいタスクやドメイン要件によりよく適応するようにパラメータが更新されている。
例を挙げよう:
一般的な物体を認識する、事前に訓練された画像分類モデルがあるとする。特定の種類の花を認識する必要がある場合、様々な花の画像とラベルを含む新しいデータセットを使ってモデルを微調整することができる。ファインチューニングの後、モデルのパラメータは、これらの花の種類をより正確に認識するように更新される。
IV.微調整されたモデルをどのように実戦投入するか?
1.本番環境への展開
ウェブサイト、モバイルアプリ、その他のシステムへのモデルの統合は、TensorFlow Serving、TorchServe、Hugging Faceが提供するAPIなどのモデルサーバーやクラウドサービスを使用して展開することができる。
2.推論タスク
微調整したモデルを推論に使用する。例えば、入力から予測を行ったり、結果を分析したりする。
3.継続的な更新と最適化
新たな要件やフィードバックに基づいて、モデルをさらに微調整したり、最適なモデル性能を維持するためにトレーニング用のデータを追加したりする。
V. どのように微調整法を選ぶか?
- LoRA:リソースに制約のある環境において、微調整パラメータのサイズを小さくするための低ランク適応。
- QLoRA: LoRAに基づく定量的最適化により、大規模モデルの微調整をより効率的に処理。
- P-チューニング:手がかり学習技法で、少量のサンプルタスクや少量のラベル付きデータに適している。