各例が何を表すかを定義する
意思決定を一文で表すところから始めましょう。新しいチケットのカテゴリを認識する、文書から3つのフィールドを抽出する、添付ファイルとともに質問に答える、などです。予測時点で利用可能な入力、期待される出力、対象外のケースを記述します。チケットの解決後に追加された情報は、その到着時点を表すはずの入力に含めてはいけません。
次に、行と独立した単位を区別します。会話の5つのメッセージはコンテキストを共有し、フォルダの10ページはその出所を共有します。目的が新しいフォルダに関するものであれば、各フォルダを1つのパーティションに保ちます。ユーザー、文書、機器、期間による分割はそれぞれ異なる問いに答えるものなので、将来の用途に似ているものを選び、その根拠をマニフェストに記載します。
各セットに役割を割り当てる
学習セットはモデルの調整に使います。検証セットは開発上の意思決定、すなわちプロンプト、閾値、ハイパーパラメータ、バリアントの選択を導きます。最終テストは、すでに固定された問いに答えるものです。最良の設定を選ぶために最終テストを参照すると、たとえそこで勾配を計算しなくても、このテストは徐々に開発ツールへと変わっていきます。
変換を学習するために使うデータも分離してください。コーパス全体で調整した正規化、変数選択、補完は、モデルに情報を伝える可能性があります。これらの変換は許可された分割で学習し、その後、保存した変換を他のセットに適用します。パイプラインはこの管理を容易にしますが、それ自体で不適切に分離されたグループを修正するものではありません。
| セット | 許可される用途 | 避けるべき決定 |
|---|---|---|
| 学習 | パラメータと学習済み変換を調整する | 最終テストの回答をここに取り込む |
| 検証 | 設定、プロンプト、閾値を選ぶ | 探索的な最高スコアを独立した最終結果として提示する |
| 最終テスト | 固定したルールに従い採用した構成を評価する | 結果を見た後に設定を変更し、同じスコアを確認として再利用する |
| 必要に応じたキャリブレーション | それを必要とする量子化手法を準備する | 最終テストを使って評価対象のバリアントを作成する |
技術的な出典: scikit-learn 1.9 — データリークと変換
難しいケースを消さずに重複を処理する
生のコーパスを保持し、識別子・出所・グループを付けた作業用インベントリを作成します。内容のフィンガープリントは、選んだ表現に基づいて完全一致のコピーを検出します。この表現を文書化してください。句読点をすべて除去したりテキストを小文字化したりすると、タスクにとって重要な違いを持つエントリが統合される可能性があります。除外したコピーと保持した見本の対応関係を保ってください。
準重複には追加のレビューが必要です。変更されたエクスポート、言い換えられた回答、共通の抜粋、再編集された文書などです。高い類似度は検討すべきシグナルであり、二つのアノテーションが交換可能である証拠ではありません。データを配分する前に、関連するバリアントをまとめてください。二つのコピーが矛盾する参照を持つ場合は、アノテーションの問いを立ててください。モデルが最もよく予測する方を自動的に選んではいけません。
実例:1,200行は1,200件の独立した観測ではない
この例は完全に説明用です。コーパスやモデルの測定は行っていません。240件の会話があり、それぞれが5行でエクスポートされていると仮定します。各会話に1行の完全一致コピーがあり、残りの4行は別個です。これら240件のコピーを除くと960件の例が残り、依然として240グループに組織されています。次の教育上の選択では、グループの70%を学習、15%を検証、15%をテストに割り当てます。
168、36、36件の会話、つまり672、144、144件の例が得られます。行とグループの比率が等しいのは、ここでは会話ごとに4例あるためです。サイズが変動する実際のコーパスでは、自動的にはそうなりません。これらの比率は普遍的なルールではありません。各セットに十分なグループと重要なケースを残す必要があります。
| 区分 | 会話全体 | 例 | 役割 |
|---|---|---|---|
| 学習 | 168 | 672 | 調整 |
| 検証 | 36 | 144 | 選択 |
| 最終テスト | 36 | 144 | 別途保持したセットで確認 |
クラス、長さ、時系列を確認する
区分後、クラスとそれを含むグループを数えます。多くの行に存在しても1件の会話にしかないクラスは、多くの独立したケースを提供しません。長さ、実際にカバーされている言語、不完全な文書、意思決定にとって重要なカテゴリも確認してください。安心できる平均値は、重要なケースの例が一つもない区分を隠す可能性があります。
グループを用いた層化は、グループを分散させずにクラスの比率を維持しようとします。グループが少ない場合や非常に不均衡な場合、完全な均衡を保証するものではありません。タスクが将来の観測を予測することである場合、ランダムな混合よりも時系列分割の方が適切なことがあります。変数が予測時点で利用可能であったかも確認してください。
技術的な出典: scikit-learn 1.9 — StratifiedGroupKFold とその限界 · scikit-learn 1.9 — 時系列データの検証
出力を判断するのに十分な精度で参照を記述する
例と境界ケースを挙げてアノテーション指示を書きます。抽出の場合、フィールドが欠落している場合の意味、日付の形式、通貨、許容される等価表現を明示してください。分類の場合、カテゴリ間の境界を記述してください。参照と異なる回答は、必ずしもモデルの誤りではありません。参照が曖昧または不正確である可能性があります。
多様な選択、特に不一致や重要なケースを再確認してもらい、その裁定を記録してください。修正は新しいバージョンのデータセットに保存します。修正が比較の結果を変える場合は、同じ参照で該当するすべてのバリアントを再計算してください。お気に入りのモデルに不利な行だけを修正してはいけません。
GPUキャンペーンの前に評価パッケージを作成する
この準備の成果物は、そのルールを伴う識別可能なデータセットです。これにより、ノートブックの記憶に頼らずにデータの選択を再現できます。レンタルの前にこのパッケージを準備することで、ファイルや基準の違いの解決に計算期間を消費することを避けられます。
- 識別子、グループ、区分とその根拠を確定し、それらを生成するスクリプトまたはリストを保存してください。
- パーティション間で識別子、グループ、フィンガープリントの交差を検証します。予期しない交差はすべて説明するか修正する必要があります。
- パーティション、クラス、有用なサブグループごとの件数、および除外リストとその理由をエクスポートします。
- 比較の前に、基準、正規化ルール、主要メトリクス、しきい値を確定させます。
- リビジョン、フィンガープリント、利用権、データの保管場所を保持します。フィンガープリントは識別を保証するものであり、匿名性ではありません。
- 最終テストへのアクセスは予定された意思決定まで留保します。閲覧とプロトコル変更のログを保管します。
検証が何を証明するのかを把握する
件数がインベントリと整合し、重複が管理され、各出力が明示的なルールに従って判定できる場合、準備は許容範囲です。それはモデルが成功することや、将来のすべての用途が網羅されていることを証明するものではありません。小さなデータセットは特定の問題を描写できても、希少なクラスについて結論を下すには不十分なままです。
最終テストの誤りを使ってシステムを改善する場合、そのテストは履歴として保管し、新たな独立した確認を用意します。元のデータが不明な事前学習済みモデルでは、あなたのパーティションは過去の露出がないことを証明できません。データセットを完全に未使用と断言するのではなく、この限界を記録します。
実用的な質問
常にデータの20%をテスト用に確保すべきですか?
いいえ。有用な割合は独立した単位の数と網羅すべきケースによって異なります。グループ、重要なカテゴリ、期待される結論の精度を確認します。割合だけでは有益なテストを保証できません。
識別子が異なれば重複を除外できますか?
いいえ。2つのエクスポートは、同じテキストや同じフォルダの変種を含んでいても、異なる識別子を持つことがあります。内容と出所を確認し、関連する例は、あなたのグルーピング規則に対応するパーティションに保ちます。
誤りからモデルを修正した後、テストを再利用できますか?
履歴の追跡のために保管することはできますが、それは開発に関与しています。別に保持したデータでの改善を確認するには、新たな独立したセットを使い、それぞれの役割を明確に示します。