Skip to content
This page has been auto-translated and may contain errors.View in English

ファインチューニング

docs.scrimba.com

**ファインチューニング**は、既存のモデルを取り込み、自分自身の例でトレーニングを継続して、そのデフォルトの動作が望む方向にシフトするようにすることを意味します。この章では、それが何を変えるのか、何が得意なのか、そしていつプロンプトまたはレトリーバルの代わりにそれに手を伸ばすべきかについての実践的な理解を示します。

トレーニングが実際に何をするのか

ファインチューニングが何を変えるのかを見るには、モデルがどこから来るのかを知ることが役に立ちます。モデルは2つの大きな段階で構築されます。

最初は**事前トレーニングです。モデルは膨大な量のテキストを読み、何度も何度も次のトークンを予測することを学び、副作用として文法、事実、推理のパターンがそこに定着するまでトレーニングされます。出力されるのはベースモデル**で、流暢ですが焦点が定まっていません。テキストを喜んで続けますが、質問に答えるために役立つアシスタントになるように教えられていません。

2番目の段階は事後トレーニングです。ベースモデルはさらに、良い応答のキュレートされた例と、どの答えが優れているかについての人間からのフィードバックでトレーニングされます。これが、生のテキスト予測器を、実際に会話する指示に従うアシスタントに変えるものです。APIから呼び出すモデルはすでに両方の段階を通過しています。

両方の段階は同じメカニズムで機能します。モデルに例を示し、その内部の数値(パラメータまたは重み)を調整して、その予測がこれらの例に近づくようにします。トレーニングは、モデルを永久に変更したままにする予測練習です。

Junoトレーニングが実際に何をするのか モデルは2つの段階で構築されます。事前トレーニングでは、次のトークンを膨大な量のテキストにわたって予測させ、流暢ですがフォーカスされていないベースモデルを生成します。その後、事後トレーニングは、キュレートされた良い応答と人間のフィードバックでそれをトレーニングして、役立つアシスタントに変えます。どちらも同じように機能します。モデルの内部の重みを調整して、その予測が示された例と一致するようにします。

モデルは2つのトレーニング段階を経て到達し、各段階の形状を知ることで、ファインチューニングが何を動かせるかを示しています。

事前トレーニングは最初に来ます。モデルは膨大なテキストを読み、1つのドリルを行います。何十億回も次のトークンを予測することです。文法、世界知識、推理パターンは副作用として重みに定着します。結果はベースモデルで、テキストを続けるのに流暢ですが、まだアシスタントではありません。質問に答えるのではなく拡張することを知りません。

事後トレーニングは2番目の段階であり、ファインチューニングが模倣するものです。ベースモデルはさらに、良い応答のキュレートされた例と、どの答えが良いかについての人間の選好シグナルでトレーニングされます。それが、APIから呼び出す指示に従う動作を生み出すものです。

両方の段階は同じループを実行します。モデルに例を与え、その予測をターゲットと比較し、重みを調整してギャップを閉じます。ファインチューニングはそのループですが、自分の例に限定され、プロバイダーの2つの段階の後に実行されます。トレーニングは動作をルックアップテーブルを追加するのではなく重みを編集することで変えます。そしてその区別が、ファインチューニングがいくつかの仕事に得意で他の仕事に苦手な理由全体です。

Junoトレーニングが実際に何をするのか モデルを生成する2つの段階があります。事前トレーニングは次のトークン予測を流暢なベースモデルに練習させ、事後トレーニングはキュレートされた例と選好データを使ってそれをアシスタントに形作ります。両方とも同じループを実行します。例を与え、重みを調整してそれに向かい、ファインチューニングはそのループを自分のデータに限定します。それは重みを編集します。ルックアップテーブルを追加しません。これが、動作をうまく変え、事実をひどく保存する理由です。

モデルは2つのトレーニング段階の後に到達し、その境界はファインチューニングが住む場所です。

事前トレーニングは、1回のモデル当たりの高価な段階です。膨大なテキストコーパス、次のトークン予測の単一の目的、そして重み(モデルの調整可能な数)が副産物として文法、知識、推理を吸収することです。出力はベースモデルで、流暢ですが役立つことに向けられていません。事後トレーニングはそのベースモデルを、キュレートされたデモンストレーションと人間の選好データを使ってアシスタントに合わせます。APIモデルを呼び出すまでに、両方が実行されています。

ファインチューニングは事後トレーニングの継続で、自分のデータに限定され、すでに合わせられたモデルの上で実行されます。メカニズムは同じです。例を提示し、予測がターゲットからどのくらい離れているかを測定し、そのギャップを減らすために重みを調整します。運用上重要な結果は、ファインチューニングが他のすべてを保持する同じグローバルパラメータを動かすことです。モジュールを追加していません。共有サーフェスをわずかに押しています。これが、ファインチューニングがターゲットタスクを改善でき、同時に静かに無関係な機能を低下させることができる理由です。

その共有サーフェスプロパティは、この章の後半のすべての失敗モードを設定します。過剰適合、忘却、ドリフト。ファインチューニングは動作を再形成します。事実ストアを取り付けることは決してありません。それを保持して、正しい理由のためにそれに到達し、間違った理由のためにそれをスキップします。

Junoトレーニングが実際に何をするのか 事前トレーニングは、次のトークン予測をベースモデルに練習させる1回のモデル当たりの重量級です。事後トレーニングはそれをアシスタントに合わせ、ファインチューニングは自分のデータでその2番目の段階を継続します。毎回同じループ。例を提示し、重みを調整してそれに向かいます。キャッチは、モジュールをボルト留めするのではなく、共有されたグローバルパラメータを動かしているため、ファインチューニング1回で同じ実行でタスクを持ち上げ、無関係なものをへこませることができ、過剰適合と忘却がそこから来る理由です。

ファインチューニングとは

ファインチューニングはその2番目の段階の小規模でターゲットを絞ったバージョンで、自分で実行します。既にトレーニングされているモデルを取り、自分の例のセットで継続してトレーニングし、各例は入力と、希望する出力が一致しています。十分な例の後、モデルの重みはシフトして、この種の応答がデフォルトになり、プロンプトで毎回それを求めることなくなります。

プロンプト設定とRAGとの実際の区別は、変更がどこに住むかです。プロンプト設定とRAGはモデルを凍結したままにして、呼び出しの時点で提供するコンテキストを通じてそれを操舵します。ファインチューニングはモデル自体を変更するため、新しい動作が焼き付けられ、短いプロンプトでも表示されます。実行時により良い指示を与えていません。すでに望む方向に傾いているモデルを配布しています。

実際には、プロバイダーに例の会話のファイルを渡し、トレーニングジョブを実行させて、新しい**モデルID**を取得します。そのIDを他のモデルと同じように呼び出します。ただし、その答えはトレーニング内容を反映しています。ファインチューニングは動作をモデルに移し、プロンプト設定とRAGは凍結されたものを操舵します。

Junoファインチューニングとは ファインチューニングは、自分で実行する事後トレーニングの小規模なバージョンです。既にトレーニングされたモデルを取り、自分の入出力例でトレーニングを継続して、望む動作がデフォルトになるまで。プロンプト設定とRAGとは異なり、凍結されたモデルをコンテキストを通じて操舵し、ファインチューニングはモデルの重みを変更するため、動作は焼き付けられ、短いプロンプトでも表示されます。例のファイルを渡して、新しいモデルIDを取得し、他のモデルと同じように呼び出します。

ファインチューニングは、1つのタスクに限定され、自分で実行される事後トレーニングです。既にトレーニングされたモデルから始めて、例でそれを継続してトレーニングし、各例は入力と希望される出力ペアです。十分なそれらを与えて、重みが定着して、応答がデフォルトになり、プロンプトの指示はそれを求めていません。

重要な線は、操舵がどこに住むかです。プロンプト設定とRAGは重みを凍結したままにして、呼び出し時に提供されるコンテキストを通じて動作を形作るため、すべての呼び出しが指示を運びます。ファインチューニングは重みを1回編集して、事前にそうして、動作は**モデルID**内に配布され、短いプロンプトを生き残ります。実行時の操舵対焼き付けられた動作。それがあなたが作るトレードです。

ワークフローは具体的です。例の会話のファイルを組み立て、トレーニングジョブを開始して、プロバイダーは新しいモデルIDを返します。そのIDを他のモデルと同じように呼び出します。

python
# 各例は、実行時に送信する正確な形状の会話で、
# モデルが学習したい出力で終わります。
training_examples = [
    {"messages": [
        {"role": "system", "content": "チケットの緊急度を低、中、高に分類します。"},
        {"role": "user", "content": "今週2回請求されたので、今日中に修正が必要です。"},
        {"role": "assistant", "content": "high"},
    ]},
    {"messages": [
        {"role": "system", "content": "チケットの緊急度を低、中、高に分類します。"},
        {"role": "user", "content": "ダークモード設定はどこかにありますか?"},
        {"role": "assistant", "content": "low"},
    ]},
    # ... 期待される入力の全範囲をカバーする数百から数千個以上
]
# メッセージの形状とトレーニングジョブAPIはプロバイダーによって異なります。考え方は同じです。
Junoファインチューニングとは ファインチューニングは自分のタスクに限定された事後トレーニングです。モデルを入出力例でトレーニングを続けて、望む動作がデフォルトになるまで。プロンプト設定とRAGは凍結されたモデルを毎回呼び出しするコンテキストを通じて操舵し、ファインチューニングは重みを1回編集して、動作がモデルIDの中に乗ります。例の会話のファイルを構築し、トレーニングジョブを実行し、返されたIDを他のモデルと同じように呼び出します。

ファインチューニングは、制御するデータセット上の継続された事後トレーニングで、新しいIDの背後にある派生モデルを生成します。各トレーニング例は入力と対になったターゲット出力で、ジョブは重みを調整して、ターゲット応答がモデルのデフォルトになるまで。動作は重みに配布されるため、短いプロンプトはそれを呼び起こすのに十分です。

正確に代替案に対して設定します。なぜなら、違いは哲学的ではなく運用的だからです。プロンプト設定とRAGは重みを凍結して、コンテキスト(モデルが呼び出し時に読むテキスト)を通じて動作を注入し、文字列を編集して数秒で再配布することで動作を変更できることを意味します。ファインチューニングは動作を重みに焼き付けるため、それを変更するには新しいトレーニングを実行し、評価パスを実行し、新しいモデルIDを再配布する必要があります。実行時の操舵は数秒で編集可能であり、ファインチューニングはトレーニングサイクルでのみ編集可能です。

python
# ファインチューニングされたモデルは別のIDです。呼び出しの形状は変わりません。
response = client.chat.completions.create(
    model="your-org/urgency-classifier-v1",  # これをピン留めします。あなたの契約の一部として扱います
    messages=[
        {"role": "system", "content": "チケットの緊急度を低、中、高に分類します。"},
        {"role": "user", "content": "エクスポートボタンをクリックするときに何もしません。"},
    ],
)
# response.choices[0].message.content -> "low"  (ラベルのみ、トレーニングした動作)
# 表示される呼び出し形状はOpenAI-SDKスタイルです。プロバイダーによって異なります。

そのコスト非対称性は、コミットする前に内部化するべき事柄です。ファインチューニングされたIDはバージョン管理されたアーティファクトです。そのライフサイクル、評価、そして希望する動作が動く度毎のリトレーニングを所有しています。IDをピン留めして、バージョン管理して、それが学んだものへの変更が別のコミットではなく別のジョブであるという事実を予算化します。

Junoファインチューニングとは ファインチューニングは自分のデータでの継続された事後トレーニングで、動作が重みに住む新しいIDの背後にある派生モデルを生成します。プロンプト設定とRAGとの対比は運用的です。実行時の操舵は数秒で再配布する編集可能な文字列で、ファインチューニングはトレーニング実行、評価パス、再配布でのみ変更するバージョン管理されたアーティファクトです。IDをピン留めして、契約として扱い、すべての動作変更が別のジョブであるという事実を予算化します。

何が得意で、何が苦手か

ファインチューニングは、プロンプトが固定化するのに苦労する**一貫した動作**が必要な場合にその場所を獲得します。毎回正確な出力フォーマット、特定のトーンやハウススタイル、または分類のような狭いタスクが数千の呼び出しに渡って確実に実行されます。また、そうでなければ長いプロンプトで綴る動作がモデルに焼き付けられるため、呼び出しはより安く、より速くできます。

それが落ちる場所は知識です。ファインチューニングは新しい事実をモデルに教えるのに貧弱で、変わる事実に更に貧弱です。トレーニング例は正確でルックアップ可能なエントリとして保存されるのではなく一般的なパターンにぼやけるため、ファインチューニングされたモデルはまだ詳細を発明し、情報が更新される瞬間に依然として陳腐化します。価格や政策が変わるたびにリトレーニングするのは遅く、高額です。「モデルはXを知りません」という問題の答えはほぼ常にRAGで、ファインチューニングではありません。

経験則:形を変えるファインチューン、事実を追加するのではなく。モデルに答え方を教え、取得に事実の処理をさせます。

Juno何が得意で、何が苦手か ファインチューニングは一貫した動作に良く、固定出力フォーマット、特定のトーン、確実に実行される狭いタスク、そして呼び出しをより安くするための短いプロンプトです。知識に悪く、事実を確実に保存しず、それらが変わるときに陳腐化し、リトレーニングするのに高額です。ルールはファインチューン形を変え、事実を追加しないことで、RAGに事実を処理させます。

ファインチューニングは****に報いました。毎回呼び出しで正確な出力形状、固定トーンやハウススタイル、または数千のリクエストに渡って保持される分類のような狭いタスク。プロンプト設定だけが継続的にドリフトするとき、モデルがほとんどの時間フォーマットを尊重しますが十分に確実ではなく、ダウンストリームを解析するとき、勝利が複合します。動作に焼き付けて、フォーマットは毎回呼び出しで望むものではなくなります。

また、プロンプトを短縮し、スケールではそれは本当のコストレバーです。現在、すべてのリクエストでフォーマットと数個の例を綴っている場合、これらの指示トークンはすべての呼び出しで課金されます。それらを重みに折り込んで、呼び出しごとのプロンプトは縮小します。算術は価値があります。ファインチューニングは1回支払われる固定トレーニングコストを持ちますが、長いプロンプトは永遠に支払われる呼び出しごとのコストを持つため、プロンプト短縮は、保存されたトークンがトレーニング法案を越える十分に高い呼び出しボリュームのときに支払われます。

それが落ちる場所は知識です。トレーニング例は一般的なパターンにぼやけ、正確に検索可能なエントリではなく、ファインチューニングされたモデルは詳細を発明し続け、価格や政策が変わる瞬間に陳腐化し続けます。事実を更新するということは別のトレーニング実行を意味します。形のためにファインチューン、RAGで事実を使い、組み合わせてください。強いパターンは両方の一度です。モデルをフォーマットとトーンのためにファインチューンしてから、実行時に現在の事実を取得して、チューニングされたモデルにそれらを述べさせます。

まず、ファインチューニングに登る前に、プロンプト設定が実際に失敗したことを確認してください。「失敗」は、さまざまな入力でテストされた、明確な指示と数個のよく選ばれた例を意味し、ターゲットレートを逃します。それは、最初の1行のプロンプト設定が引き出されているわけではありません。その試験を実行していない場合、ファインチューニングする準備ができていません。

Juno何が得意で、何が苦手か ファインチューニングは形のためのもので、固定出力形状、設定トーン、狭いタスク保持安定、そしてすべての呼び出しでトークンを節約する短いプロンプトです。コスト算術は固定の一度のトレーニング対支払い永遠のプロンプトトークンのため、プロンプト短縮は高いボリュームで支払われます。これは事実に貧弱で、パターンにぼやけて、陳腐化するため、チューニングされたモデルとRAGを組み合わせてください。形は重みから、事実は取得から。そして実際のプロンプト、多様な入力でテストされた例とともに、ファインチューニングする前にプロンプト設定が失敗したことを証明してください。

ファインチューニングはのために信頼でき、事実のために信頼できず、理由は機械的です。形、出力形状、トーン、タスク規約は、重みが多くの例に渡って吸収できる動作の規則性です。事実は離散的で変更可能で、重みはそれらを検索可能な行としてではなくなく混合パターンとして保存するため、チューニングされたモデルは依然として架空し、基本的な事実が動く瞬間に依然として陳腐化します。

見出しを超えて押すと、実際のリスクはファインチューニングが低下する方法です。**過剰適合**はモデルが一般的な動作を学ぶのではなくトレーニングセットをメモライズし、その癖を含む、その例に爪と異なる入力で失敗することです。壊滅的な忘却は裏返しです。狭いタスクで厳しくトレーニングすることは、重みが共有されているため、関連のない一般的な能力を侵食できるため、分類器はより鋭くなり、他のすべてでの推理はより鈍くなります。分布ドリフトは遅いものです。前四半期の入力分布でチューニングされたモデルは、実際のトラフィックが見たものから離れるときに衰退し、衰退は測定するまで静かです。

2つの結果は、実際にこれを実行する方法を形成します。まず、ファインチューニングを気分で配布することはできません。評価セット、既知の良い答えを持つ保留された入力のバッチが必要で、前後で採点されて、ターゲットが改善され、同等に重要なことに、一般的な能力は退行しなかったことを証明します。次に、学習した動作への望ましい動作の変更はすべて別のフルジョブです。再キュレート、リトレーニング、再評価、新しいIDを再配布します。その運用上のドラッグは、パラメータ効率的な方法が存在する理由です。小さなセットの追加の重みをトレーニングしてファインチューニングする方法は、全モデルより安くて保存するのに安いですが、ファインチューニングするかどうかの決定は変わりません。どちらの方法でも、ファインチューニングが退行する前に配布しなかったことを証明してください。

Juno何が得意で、何が苦手か 形は重みに吸収し、事実はそうではありません。ファインチューニングは依然として架空し、陳腐化するため、事実を取得で保ちます。リスクは過剰適合です(セットをメモライズして、新しい入力で失敗)、壊滅的な忘却(狭いトレーニングが関連のない能力を侵食、重みが共有されているため)、そして実際のトラフィックがトレーニングデータから離れるときの分布ドリフト。そのため、保留された評価セットが前後で採点されて、退行がないことを証明するたびに、すべてのファインチューニングをゲートし、それぞれの動作変更がフルリトレーニング評価再配布サイクルであるという事実を予算化します。パラメータ効率的な方法が存在する理由です。

プロンプト、RAG、またはファインチューニング?

ほとんどの場合、ここから始めません。3つの技術は**ラダー**を形成し、変更するのに最も安く最も速い最初:

  1. プロンプト設定。 これを常に最初に試してください。反復は即座で、追加コストはなく、明確なプロンプトと数個の例が人々が期待するより多くを解決します。プロンプトを機能させていない場合、ファインチューニングする準備ができていません。
  2. RAG。 モデルが持っていない事実が必要な場合、または時間とともに変わる場合、これに到達します。RAGはそれらを質問時に提供し、モデルに触れません。
  3. ファインチューニング。 ギャップが知識ではなく動作で、プロンプト設定がそれを十分に一貫性を作ることができない場合、または自分のプロンプトが大きくなり、指示をモデルに焼き付けるのはスケールでより安くて速いときに到達します。

これらは相互排他的ではなく、最強のシステムはそれらを組み合わせます。モデルをフォーマットとトーンのためにファインチューンしてから、実行時に現在の事実を取得するためにRAGを使用します。トレーニングからの動作、取得からの知識。

そのため、ファインチューニングする前の短いテスト。より良いプロンプトでそこに着きますか?その後そうしてください。ギャップは知識がありませんか?その後、RAGです。

ラダーを上る。ファインチューニングは最初のランではなく最後のランです。プロンプトが既に正しく、事実が既に利用可能で、モデルが依然として十分に一貫して動作しないときだけ、ファインチューニングは適切なツールになります。

Junoプロンプト、RAG、またはファインチューニング? 3つのラダーとして扱う:プロンプト設定は即座で安いため最初、モデルが知識を欠いているときにRAGを追加、プロンプト設定がそれを一貫性を作ることができない動作、または長いプロンプトをスケールで短くするときにのみファインチューニング。それらは組み合わせてうまく機能します。形のためにファインチューン、事実のためにRAGを使用。ファインチューニングは最初のランではなく最後のランです。

3つの技術は**ラダー**を形成し、どのくらい速くて安いと変更できるかで順序付けられ、下から上ります。

  1. プロンプト設定 最初に、常に。数秒以内に反復して、追加のトレーニングコストはなく、明確な指示と数個の例は人々が期待するより多くをカバーします。本当のプロンプトがテストされて落ちるまで、より高いランは時期尚早です。
  2. RAG ギャップが知識で、モデルが欠いている事実、または時間とともに変わる場合、取得は質問時にそれらを提供し、重みを単独にします。事実を更新するのは、リトレーニングではなく、ソースを更新することです。
  3. ファインチューニング。 ギャップが動作でプロンプト設定がそれを固定できない場合、または指示をモデルに焼き付けるスケールでより安い場合。

診断があなたを正しいランに置く間隔はギャップに名前を付けることです。間違ったフォーマットまたはトーンは動作ギャップであるため、プロンプト、その後ファインチューン。不足している、または陳腐な事実は知識ギャップであるため、取得します。ギャップを読み間違える、あなたは知識問題を修正するためにファインチューニングし、それが陳腐化するのを見て、またはプロンプトに事実を詰め込んで、取得ステップがフェッチしてすべき。

これらは相互排他的ではなく、結合パターンは本番環境に到達するものです。形のためにファインチューン、事実のためにRAG、一緒に。一度に一貫した形と新鮮なコンテンツを取得します。どちらも他の技術だけでは提供しません。

ファインチューニングができるかどうかはモデルに依存します。クローズプロバイダーは自分のモデルの管理ファインチューニングを提供します。オープンウェイトモデルはあなた自身がファインチューニングできます。これはオープンウェイトに到達する理由の1つです(オープンモデルとクローズモデル)。

Junoプロンプト、RAG、またはファインチューニング? 最も安いランからラダーを上る。プロンプト設定を最初に、ギャップが知識のときにRAGを追加、ギャップが動作かプロンプトが短いときにのみファインチューニングを修正するか一貫性がありません。診断はギャップに名前を付けるもので、フォーマットまたはトーンは動作を意味し、不足している、または陳腐な事実は取得を意味します。本番動作は両方一緒です。形のためにファインチューン、事実のためにRAG、一度に一貫した形と新鮮なコンテンツを取得します。

ラダー、プロンプト設定その後RAGその後ファインチューニング、**反復コスト**で順序付けられます。配布されたら動作を変更するのに多くの速度と安さです。プロンプトは文字列で、数秒で編集して再配布します。取得ソースはモデルに触れずにデータを更新します。ファインチューニングはトレーニング実行、評価パス、新しいモデルID。その順序で上ると、より安いランが明らかに到達できないだけでより高い反復コストを支払うことを意味します。

本当のスキルはギャップを正しく診断することです。なぜなら失敗モードはそれに対処しないツールを選んでいるからです。動作ギャップ(間違った形、間違ったトーン、一貫しないタスク順守)はプロンプト設定とその後のファインチューニングが修正するものです。知識ギャップ(モデルが欠いている事実、または変わる事実)は取得が修正するもので、ファインチューニング知識ギャップは古典的に高額な間違いです。事実をトレーニングして、次の更新によって陳腐化して、引用できません。

操作非対称性を診断の隣に保持します。RAGの反復コストはすべての呼び出しで取得品質とレイテンシーで、永遠に支払われますが、ライブで調整可能です。ファインチューニングの反復コストは学習した動作への変更ごとに再実行で、プラスそれぞれの実行がもたらす退行リスク。

結合アーキテクチャは妥協ではなく、設計です。形の重みをチューン、取得に事実を保ち、独立して各バージョン。形はまれに変わり、遅い更新サイクルを容認します。事実は常に変わり、速いものを要求します。それぞれが独自のペースで移動でき、チューニングされたモデルを再インデックスコーパスなく再評価したり、リトレーニングジョブなく再フレッシュコーパスできます。

Junoプロンプト、RAG、またはファインチューニング? ラダーは反復コスト順序:プロンプトは数秒で編集、ソースはモデルなく更新、ファインチューニングはフルトレーニング評価再配布。診断する前に選ぶ、動作はプロンプト設定その後ファインチューニングに移動、知識は取得に移動、ファインチューニング知識ギャップは陳腐化して引用不可のコスト間違いです。本番アーキテクチャはそれらを分割します。形の重みをチューン、取得に事実を保ち、独立して各バージョンしてください。形は遅く移動し、事実は速く移動します。

実際に

ファインチューニングデータは何も異国ではありません。各例は実行時に送信する正確な形状の短い会話で、望むモデルが与えた答えで終わります。

python
# ここで数個表示されます。実際のデータセットは数百から数千の例で、
# 実行時に予期される入力の全範囲をカバーします。
training_examples = [
    {"messages": [
        {"role": "system", "content": "チケットの緊急度を低、中、高に分類します。"},
        {"role": "user", "content": "今週2回請求されたので、今日中に修正が必要です。"},
        {"role": "assistant", "content": "high"},
    ]},
    {"messages": [
        {"role": "system", "content": "チケットの緊急度を低、中、高に分類します。"},
        {"role": "user", "content": "ダークモード設定はどこかにありますか?"},
        {"role": "assistant", "content": "low"},
    ]},
    # ...
]

これらをファイルに保存し、プロバイダーでトレーニングジョブを開始して、それが完了するのを待ちます。返されるのは新しいモデルIDで、他のモデルと同じように呼び出します。

python
# ファインチューニングされたモデルは別のID。その他すべては変わりません。
response = client.chat.completions.create(
    model="your-org/urgency-classifier-v1",
    messages=[
        {"role": "system", "content": "チケットの緊急度を低、中、高に分類します。"},
        {"role": "user", "content": "エクスポートボタンをクリックするときに何もしません。"},
    ],
)
# response.choices[0].message.content -> "low"  (ラベルのみ、トレーニングした動作)

勝利は動作がモデルに住むことです。指示はより短くでき、フォーマットは数千の呼び出しに渡って保持し、あなたはそこに着くためにプロンプトを成長させる必要がありませんでした。コストはそのすべての周りです。品質**データセット**、トレーニング実行、そして学習したものを変更したいたびにフレッシュジョブが必要です。これは正確にこれがラダーの下に座る理由です。例をアップロード、モデルIDを取得、他のモデルと同じように呼び出します。

Juno実際に ファインチューニングデータは、望む答えで終わる例の会話で、数百から数千のもの。ファイルをアップロードしてトレーニングジョブを実行して、新しいモデルIDを取得します。それ以外のモデルと同じように呼び出します。動作は焼き付けられるため、プロンプトは短くなり、フォーマットは一貫しています。データセットの構築とそれが変わるたびにジョブを実行するコストで。

ワークフローはアップロード、トレーニング、呼び出しですが、それが機能するかどうかを決定する部分は、ジョブではなく、**データセット**です。品質とカバレッジは生の数より重要です。実際の入力範囲にまたがるクリーンで一貫した数百の例は、ノイズが多いか矛盾したものの数千を破ります。モデルはデータに実際にある規則性を学び、間違いを含みます。

トレーニング前にデータを分割します。モデルがトレーニング中に見ない、検証セットのスライスを保持して、トレーニング例ではなく、そこで精度をチェックしてください。モデルは既に見たデータで近く完璧にスコアでき、新しいものに悪く行くことができるため、保留された数は動作が一般化するかどうかを教えてくれる数です。

python
# トレーニングジョブが見ないスライスを予約して、実際のパフォーマンスを測定します。
split = int(len(training_examples) * 0.8)
train_set = training_examples[:split]        # ジョブはこれらでトレーニング
validation_set = training_examples[split:]   # 結果でこれらをスコア
# プロバイダーは新しいモデルIDを返します。他のモデルと同じように呼び出します。
# ジョブAPIと分割処理はプロバイダーによって異なります。いくつかは検証ファイルを直接取ります。

2つの判断呼び出しはメカニクスの上に座ります。最初に、トレーニング実行を費やす前にプロンプト設定が実際に失敗したことを確認してください。粗いドラフトではなく、多様な入力でテストされた実際の指示。次に、コストを慎重に重み付けします。ファインチューニングは1回支払われる固定トレーニングコストで、長いプロンプトの永遠に支払われる呼び出しごとのコストに対して、そのため短縮するプロンプト短縮は、保存されたトークンを成す呼び出しボリュームでのみ支払われます。そして結合パターンを忘れないでください。形のためにチューニングされたモデル、RAGはメモライズを試みるべきではない事実のため。

Juno実際に ジョブはアップロード実行呼び出しですが、データセットは結果を決定します。数百のクリーン、多様な例は数千のノイズが多い例を破ります。モデルはデータに実際にあるものを学ぶため。検証スライスを保持して、トレーニング例ではなく、そこをスコアしてください。メモライズしたモデルが実際よりも良く見えます。最初にプロンプト設定が本当に失敗したことを確認し、固定トレーニングコストを支払い続けるプロンプトトークンを重く考え、チューニングされたモデルをRAGと組み合わせてください。形を処理し、取得は事実を処理します。

パイプラインはアップロード、トレーニング、評価、配布で、エンジニアリングはデータセットと**評価セット**に住み、トレーニング呼び出しではありません。2つの分割規律はそれを運びます。検証セット、トレーニングから保留されたものは、メモライズされたのではなく動作が一般化したかどうかをあなたに告げます。別の保留された評価セット、前後で採点されたものは、ターゲット上で改善し、一般能力に退行しなかったことを証明するのは、最後のセクションから壊滅的な忘却チェック具体化します。

python
# 3つの不連続スライス。1つに列車、別に決定を見守り、3番目に判断します。
train_set      = examples[:8000]        # ジョブはこれらでトレーニング
validation_set = examples[8000:9000]    # 実行中の過剰適合を見守る
eval_set       = examples[9000:]        # 前後両方で採点される

# 同じeval_setでベースモデルとファインチューニングを採点してから比較します。
base_score = run_eval(base_model_id, eval_set)
tuned_score = run_eval(fine_tuned_id, eval_set)
# ターゲットで tuned_score ベース勝利して一般的な能力チェック保有が保有を配布します。
# 評価採点とトレーニングAPIはプロバイダーによって異なります。規律ではありません。

データセット品質は過剰適合とドリフトが勝つか失うかです。狭いか奇妙なデータセットは、セットの気難しさをメモライズし、異なる入力で失敗するモデルをトレーニングします。実際の入力分布のカバレッジが数より重要で、本番トラフィックが何をトレーニングしたかから離れるときに再測定します。陳腐な評価は、静かにドリフトするモデルが審査を通過してユーザーに失敗する方法です。

設計すべき運用現実は、学習した動作への変更がすべて完全な再実行で、編集ではありません。キュレート、リトレーニング、再評価、ピン留めされた新しいIDを再配布、毎回。その反復コスト、そしてすべての実行でのリスク、それは形が遅く変わり、事実が速く変わるため、事実をRAGに保ち、ファインチューニング動作をゆっくり変わり、各チューニングされたIDを退行に戻すことができるバージョン管理されたアーティファクトとして扱う理由です。

Juno実際に パイプラインはアップロード評価デプロイで、作業は分割にあります。メモライズキャッチの検証セット、退行が存在しないことを証明する前後で採点された保留された評価セット。実際の入力分布のデータセットカバレッジは過剰適合とドリフトを打つ方法で、トラフィックがトレーニングデータから離れると再測定します。そして反復コストのために設計します。すべての動作変更は完全なリトレーニング評価再配布なので、事実がRAGに属し、各チューニングされたIDはバージョン管理されたアーティファクトで、ロールバックできます。

これは、モデルが予測テキストを行う机の上に葉するモデルの何を知ると答えるかを形作つ最後の方法です。次の章はそれに行為する能力を与えます。ツール使用ではモデルはあなた自身の機能を呼び出し、その後ループでエージェントとして実行します。