For the complete documentation index, see llms.txt. This page is also available as Markdown.

📈データセットガイド

ファインチューニング用データセットの作成と準備方法を学びましょう。

データセットとは?

LLMにとって、データセットとはモデルの訓練に使えるデータの集まりです。学習に役立てるには、テキストデータはトークナイズできる形式である必要があります。また、あなたはどのように Unsloth内でデータセットを使うか.

データセットを作成するうえで重要な要素の1つは、あなたの チャットテンプレート と、それをどのように設計するかです。トークナイゼーションも重要です。なぜなら、テキストをトークンに分割するからです。トークンは単語、サブワード、文字などであり、LLMが効果的に処理できるようになります。これらのトークンはその後埋め込み(embeddings)に変換され、モデルが意味や文脈を理解するのを助けるよう調整されます。

データ形式

トークナイズのプロセスを可能にするために、データセットはトークナイザーで読み取れる形式である必要があります。

形式
説明
学習タイプ

生コーパス

ウェブサイト、本、記事などのソースから得られた生のテキスト。

継続事前学習(CPT)

Instruct

モデルに従わせたい指示と、目指す出力の例。

教師ありファインチューニング(SFT)

会話

ユーザーとAIアシスタントの複数ターンの会話。

教師ありファインチューニング(SFT)

RLHF

ユーザーとAIアシスタントの会話で、アシスタントの応答がスクリプト、別のモデル、または人間の評価者によって順位付けされます。

強化学習(RL)

これらの各タイプには、異なる形式のスタイルが存在することに注意する価値があります。

はじめに

データを整形する前に、次の点を特定しておきたいです。

1

データセットの目的

データセットの目的を知ることで、どのデータが必要か、どの形式を使うべきかを判断しやすくなります。

目的としては、要約のような新しいタスクに合わせてモデルを適応させることや、特定のキャラクターになりきる能力を高めることなどがあります。例えば:

  • チャットベースの対話(Q&A、新しい言語の学習、カスタマーサポート、会話)。

  • 構造化タスク(分類、要約、生成タスク)。

  • ドメイン特化データ(医療、金融、技術)。

2

出力のスタイル

出力のスタイルによって、望む出力を実現するためにどのデータソースを使うべきかが分かります。

例えば、目指す出力の種類はJSON、HTML、テキスト、コードなどかもしれません。あるいはスペイン語、英語、ドイツ語などにしたいのかもしれません。

3

データソース

必要なデータの目的とスタイルが分かったら、データの品質と 量 を分析する必要があります。Hugging Face と Wikipedia はデータセットの優れたソースであり、特に言語を学習するモデルを訓練したい場合は Wikipedia が有用です。

データのソースはCSVファイル、PDF、あるいはウェブサイトでも構いません。また 合成生成する こともできますが、各例が高品質で関連性があることを নিশ্চিতするために、より慎重な対応が必要です。

🦥 Unsloth データレシピ

Unsloth Data Recipes は、PDF や CSV ファイルなどの文書をアップロードし、使用可能なデータセットに変換できます。グラフノードのワークフローを通じて、データセットを視覚的に作成・編集します。

レシピページは主な प्रवेश点です。レシピはブラウザ内にローカル保存されるため、保存した作業に後で戻れます。ここから、空のレシピを作成するか、ガイド付き学習レシピを開けます。

Data Recipes も同じ基本的な流れです。レシピページを開き、レシピを作成または選択し、エディタでワークフローを作成し、検証してプレビューを実行し、出力が正しければフルデータセットを実行します。シードデータと生成ブロックを追加し、ワークフローを検証し、サンプル出力をプレビューしてから、フルデータセットの構築を実行します。

一見すると、通常のワークフローは次のようになります:

  1. レシピページを開きます。

  2. 新しいレシピを作成するか、既存のものを開きます。

  3. ブロックを追加して、データセットのワークフローを定義します。

  4. クリック 検証 して、設定の問題を早めに見つけます。

  5. プレビューを実行して、サンプル行をすばやく確認します。

  6. レシピの準備ができたら、フルデータセットのビルドを実行します。

  7. 進捗と出力をグラフ上または 実行 ビューで詳細を確認します。

  8. Unslothで結果のデータセットを選択し、モデルをファインチューニングします。詳細はこちら:

Data Recipes

データの整形

関連する条件を特定し、必要なデータを収集したら、そのデータを学習可能な機械可読形式に整形できます。

LLM学習でよく使われるデータ形式

損失なしの 継続事前学習では、特定の構造を持たない生テキスト形式を使います:

この形式は自然な言語の流れを保ち、モデルが連続したテキストから学習できるようにします。

モデルを新しいタスクに適応させ、特定の一連の指示に基づいて1ターンでテキストを出力させたい場合は、 Instruction 形式を Alpacaスタイルで

複数ターンの会話を行いたい場合は、ShareGPT形式を使えます:

テンプレート形式では "from"/"value" 属性キーを使い、メッセージは humanと gptの間で交互になります。これにより自然な対話の流れが可能になります。

もう1つの一般的な形式はOpenAIのChatML形式で、Hugging Face のデフォルトでもあります。おそらく最も使われている形式で、 user と assistant

UnslothでChatテンプレートを適用する

通常のChatML形式に従うデータセットでは、学習やファインチューニングのためにデータセットを準備するプロセスは、次の4つの簡単なステップで構成されます:

  • Unslothが現在サポートしているChatテンプレートを確認してください:\

    これにより、Unslothで現在サポートされているテンプレートの一覧が表示されます。以下は出力例です:\

    \

  • 使用 get_chat_template トークナイザーに正しいChatテンプレートを適用するには:\

    \

  • フォーマット関数を定義します。以下は例です:\

    この関数はデータセット全体をループし、定義したChatテンプレートを各サンプルに適用します。\

  • 最後に、データセットを読み込み、必要な変更を適用しましょう: \

    データセットがChatMLの "role"/"content" 形式ではなく、ShareGPTの "from"/"value" キーを使っている場合は、 standardize_sharegpt 関数を使って最初に変換できます。修正版のコードは次のようになります: \

データ整形のQ&A

Q: Alpacaのinstruct形式はどう使えばいいですか?

A: データセットがすでにAlpaca形式で整形されている場合は、Llama3.1で示したように整形手順に従ってください ノートブック 。データをAlpaca形式に変換する必要がある場合は、生データを処理するPythonスクリプトを作成する方法があります。要約タスクに取り組んでいるなら、ローカルLLMを使って各例の指示と出力を生成できます。

Q: standardize_sharegptメソッドは常に使うべきですか?

A: targetのデータセットがsharegpt形式で、モデルが代わりにChatML形式を期待している場合にのみ、standardize_sharegptメソッドを使ってください。

Q: トークナイザーに付属のapply_chat_template関数を使わないのはなぜですか。

A: この chat_template モデルが最初に元のモデル作成者によってアップロードされたときの属性には、誤りが含まれていることがあり、更新に時間がかかる場合があります。一方、Unslothでは、 chat_template 量子化バージョンをリポジトリにアップロードする際、各モデルの get_chat_template と apply_chat_template メソッドを徹底的に確認し、必要な修正を行っています。また、私たちのメソッドは高度なデータ操作機能を提供しており、Chat Templatesのドキュメントに完全に記載されています ページ.

Q: Unslothが今のところサポートしていないテンプレートだったらどうすればいいですか?

A: unslothのGitHub issueフォーラムに機能要望を投稿してください フォーラム。一時的な回避策として、機能要望が承認されて統合されるまで、トークナイザー本来のapply_chat_template関数を使うこともできます。

合成データ生成

Llama 3.3 (70B) のようなローカルLLMや OpenAI の GPT 4.5 を使って合成データを生成することもできます。一般的には、最高品質の出力を確保するために Llama 3.3 (70B) のようなより大きなモデルを使う方がよいです。vLLM、Ollama、llama.cpp のような推論エンジンを直接使って合成データを生成することもできますが、それを収集し、さらに多くのデータを促すための手作業が必要になります。合成データには3つの目的があります:

  • まったく新しいデータを作る - ゼロから、または既存のデータセットから

  • データセットを多様化して、モデルが 過学習 しすぎて、特定化されすぎないようにする

  • 既存データの拡張 例:データセットを自動的に選んだ正しい形式に構造化する

合成データにUnslothを使う

Unsloth Studioの データレシピ に、構造化されていないデータや構造化データを簡単にアップロードでき、 自動的に使える / 合成データセットに変換してくれます。詳細は.

ローカルLLMまたはChatGPTを合成データに使う

目的は、指定した形式のQAデータをモデルに生成・処理させるようプロンプトを与えることです。モデルは、与えられた構造と文脈を学習する必要があるため、少なくとも10個の既存のデータ例を用意してください。プロンプト例:

  • 既存データセットに対してさらに対話を生成するプロンプト:

  • データセットがない場合のプロンプト:

    {% code overflow="wrap" %}

    {% endcode %}

  • 整形されていないデータセット向けのプロンプト:

    {% code overflow="wrap" %}

    {% endcode %}

生成されたデータの品質を確認し、無関係または品質の低い応答を削除または改善することを推奨します。データセットによっては、モデルが過学習しないよう、多くの面でバランスを取る必要がある場合もあります。その後、このクリーンなデータセットをLLMに戻してさらにデータを再生成し、今度はより多くの指示を与えることができます。

データセットFAQ + ヒント

データセットはどれくらいの大きさが必要ですか?

一般的には、妥当な結果を得るために、ファインチューニング用として少なくとも100行のデータを最低限使うことを推奨します。最適な性能を目指すなら、1,000行を超えるデータセットが望ましく、この場合、より多くのデータが通常より良い結果につながります。データセットが小さすぎる場合は、合成データを追加したり、Hugging Face のデータセットを追加して多様化することもできます。ただし、ファインチューニングしたモデルの有効性はデータセットの品質に大きく依存するため、データを十分にクリーンアップし、準備してください。

推論モデルをファインチューニングしたい場合、データセットはどのように構成すればよいですか?

DeepSeek-R1 の蒸留版(例:DeepSeek-R1-Distill-Llama-8B)のように、すでに推論能力を持つモデルをファインチューニングしたい場合でも、質問/タスクと回答のペアに従う必要があります。ただし、回答には推論/チェーン・オブ・ソートのプロセスと、答えを導くために踏んだ手順を含めるように変更する必要があります。 推論能力を持たないモデルに推論能力を後から持たせるよう訓練したい場合は、標準的なデータセットを使いますが、今度は回答に推論を含めません。この学習プロセスは 強化学習とGRPO.

複数のデータセット

ファインチューニング用のデータセットが複数ある場合、次のいずれかができます:

  • すべてのデータセットの形式を標準化し、1つのデータセットに統合して、この統合データセットでファインチューニングする。

  • を使ってください 複数データセット ノートブックを使って複数のデータセットを直接ファインチューニングする。

同じモデルを複数回ファインチューニングできますか?

すでにファインチューニング済みのモデルを何度もファインチューニングすることはできますが、代わりにすべてのデータセットを統合して、1回のプロセスでファインチューニングする方が最善です。すでにファインチューニングされたモデルを再学習すると、前回のファインチューニングで得られた品質や知識が変化する可能性があります。

Unslothでデータセットを使う

Alpacaデータセット

Google ColabでUnsloth内のAlpacaデータセットを使う例をご覧ください:

これから使うのは、GPT-4自身を呼び出して作成されたAlpacaデータセットです。これは52,000件の指示と出力のリストで、Llama-1のリリース時に非常に人気がありました。なぜなら、ベースLLMのファインチューニングをChatGPT自身に匹敵するものにしたからです。

AlpacaデータセットのGPT4版にアクセスできます こちら。以下にデータセットの例をいくつか示します:

各行に3つの列、つまりinstruction、input、outputがあることが分かります。実際には、各行を次のような1つの大きなプロンプトにまとめます。その後、これを使って言語モデルをファインチューニングし、ChatGPTに非常によく似たものにしました。このプロセスを 教師あり指示ファインチューニング.

ファインチューニングのための複数カラム

しかし大きな問題は、ChatGPT風のアシスタントでは1つのinstruction / 1つのpromptしか許可されず、複数のカラム / 入力は使えないことです。例えばChatGPTでは、複数のプロンプトではなく1つのプロンプトを送信しなければなりません。

つまり、ファインチューニングを実際に機能させるには、複数のカラムを1つの大きなプロンプトに「結合」する必要があるということです!

例えば、有名なタイタニックのデータセットには非常に多くのカラムがあります。あなたの仕事は、年齢、客室クラス、運賃などに基づいて乗客が生存したか死亡したかを予測することでした。これをそのままChatGPTに渡すことはできず、これらの情報を1つの大きなプロンプトに「結合」しなければなりません。

例えば、乗客に関するすべての情報を含む「結合済み」の単一プロンプトでChatGPTに尋ねれば、その乗客が死亡したか生存したかを推測・予測させることができます。

他のファインチューニングライブラリでは、すべてのカラムを1つのプロンプトに結合して、ファインチューニング用にデータセットを手動で準備する必要があります。Unslothでは、次の関数を提供するだけです to_sharegpt これ1つで実現できます!

ここでは少し複雑になります。かなり柔軟にカスタマイズできるからですが、いくつかポイントがあります:

  • すべてのカラムを波括弧で囲む必要があります {}。これらは実際のCSV / Excelファイル内のカラム名です。

  • 任意のテキスト要素は [[]]で囲む必要があります。例えば「input」カラムが空なら、結合関数はそのテキストを表示せず、これをスキップします。これは欠損値のあるデータセットに便利です。

  • 出力またはターゲット / 予測カラムを output_column_nameで選択します。Alpacaデータセットでは、これは output.

例えばタイタニックのデータセットでは、下のような大きな結合プロンプト形式を作成でき、各カラム / テキストの一部は任意になります。

例えば、データセットが次のように多くの欠損を含んでいるとします:

乗船港
年齢
運賃

S

23

18

7.25

すると、結果が次のようになるのは望ましくありません:

  1. 乗客はSから乗船しました。年齢は23歳です。運賃は EMPTY.

  2. 乗客は EMPTYから乗船しました。年齢は18歳です。運賃は7.25ドルです。

その代わりに、次のようにカラムを任意で囲むことで [[]]、この情報を完全に除外できます。

  1. [[乗客はSから乗船しました。]] [[年齢は23歳です。]] [[運賃は EMPTY.]]

  2. [[乗客は EMPTYから乗船しました。]] [[年齢は18歳です。]] [[運賃は7.25ドルです。]]

は次のようになります:

  1. 乗客はSから乗船しました。年齢は23歳です。

  2. 年齢は18歳です。運賃は7.25ドルです。

複数ターンの会話

気づかなかったかもしれませんが、Alpacaデータセットは1ターン形式です。一方、ChatGPTの使用は対話的で、複数ターンで会話できます。例えば、左側が私たちが望むものですが、右側のAlpacaデータセットは単一会話しか提供しません。私たちは、ファインチューニングされた言語モデルに、ChatGPTのように複数ターン会話をどう行うかを何とか学習させたいのです。

そこで私たちは conversation_extension パラメータを導入しました。これは基本的に、1ターンのデータセットからランダムな行をいくつか選び、それらを1つの会話に結合します!例えば3に設定すると、3行をランダムに選んで1つに結合します!長くしすぎると学習は遅くなりますが、チャットボットや最終的なファインチューニングの品質は大きく向上する可能性があります!

次に output_column_name 予測 / 出力カラムに。Alpacaデータセットでは、出力カラムになります。

その後、 standardize_sharegpt 関数を使って、ファインチューニングに適した形式にデータセットを整えるだけです!これは必ず呼び出してください!

Visionファインチューニング

Visionモデルやマルチモーダルモデルをファインチューニングするためのデータセットには、画像入力も含まれます。例えば、 Llama 3.2 Vision ノートブック では、放射線画像のケースを使って、AIが医療従事者によるX線、CTスキャン、超音波の分析をより効率的に支援する方法を示しています。

ROCO放射線画像データセットのサンプル版を使います。データセットには こちらにアクセスできます。データセットには、医学的状態や疾患を示すX線、CTスキャン、超音波が含まれています。各画像には専門家が書いた説明文が付いています。目的は、VLMをファインチューニングして、医療従事者にとって有用な分析ツールにすることです。

データセットを見て、最初の例が何を示しているか確認しましょう:

画像
キャプション

パノラマX線写真は、右後方上顎に骨の吸収を伴う溶骨性病変を示しています(矢印)。

データセットを整形するには、すべてのVisionファインチューニングタスクを次のように整形する必要があります:

VLMに専門の放射線技師として振る舞うよう依頼するカスタム指示を作成します。また、単に1つの指示だけでなく、複数ターンを追加して動的な会話にすることもできます。

データセットをファインチューニング用の「正しい」形式に変換しましょう:

最初の例は次のように構造化されます:

ファインチューニングを行う前に、もしかするとVisionモデルはすでに画像の分析方法を知っているかもしれません。これが本当か確認してみましょう!

そして結果は次のとおりです:

詳細は、 ノートブックのデータセットセクションをご覧ください.

最終更新

役に立ちましたか?