mcpField
D
Dataset Curator

Dataset Curator

github.com/jmsktmデータ・データベース10208 回インストール40 週間前に更新
リポジトリ

Dataset Curator について

Dataset Curatorは、機械学習の学習データを準備するためのスキルです。品質評価、クリーニング、拡張、維持を扱い、ラベル品質やデータの来歴、バージョン管理にも注目します。

主な機能

  1. 01データセットの品質と偏りの評価
  2. 02重複の削除と欠損値の処理
  3. 03ラベル問題の確認と修正
  4. 04クラス調整とデータ拡張
  5. 05変更の追跡とバージョン管理

活用シーン

  1. 01学習前のデータセット品質確認
  2. 02重複や誤ラベル候補のクリーニング
  3. 03クラス不均衡への対処とサンプル拡張
  4. 04再現性のためのデータ処理追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jmsktm/claude-settings --skill dataset-curator

インストール後、Claude Code で/dataset-curatorを入力して読み込まれたか確認します。

詳細

データセットキュレーター

データセットキュレーターのスキルは、機械学習モデル向けの高品質なトレーニングデータを準備する重要なプロセスをガイドします。データ品質はモデルの性能を左右する最も重要な要素ですが、十分な投資が行われていないことがよくあります。このスキルを活用すると、データセットを体系的にクリーニング、検証、拡張、保守し、より優れたモデルにつなげることができます。

初期収集から継続的な保守まで、このスキルでは重複排除、ラベル品質の評価、バイアスの検出、拡張戦略、バージョン管理を扱います。本番環境の ML システムにおけるベストプラクティスを適用し、データセットを単にクリーンにするだけでなく、学習目標に合わせて戦略的に最適化します。

分類器の構築、LLM のファインチューニング、カスタムモデルのトレーニングのいずれを行う場合も、このスキルを使えばデータの基盤を確かなものにできます。

主なワークフロー

ワークフロー 1:データセットの品質を評価する
  1. データセットのプロファイルを作成します:
    • サイズと次元
    • ラベルの分布とバランス
    • 欠損値のパターン
    • 特徴量の統計情報
  2. 品質上の問題を特定します:
    • 重複(完全一致および類似重複)
    • ラベル付けが誤っているサンプル
    • 外れ値と異常値
    • データリーク
    • バイアスと表現の偏り
  3. 品質指標を測定します:
    def assess_quality(dataset):
        return {
            "size": len(dataset),
            "duplicate_rate": find_duplicates(dataset).ratio,
            "missing_rate": dataset.isnull().mean(),
            "label_balance": compute_entropy(dataset.labels),
            "outlier_rate": detect_outliers(dataset).ratio,
            "estimated_label_noise": estimate_label_noise(dataset)
        }
    
  4. 影響度に応じて問題の優先順位を付けます
  5. 是正計画を作成します
ワークフロー 2:データをクリーニングして準備する
  1. 重複を削除します:
    • 完全一致の重複:ハッシュベースの重複排除
    • 類似重複:類似度ベースのクラスタリング
    • 方針を決定:最初のもの、最良のものを残す、または統合する
  2. 欠損値を処理します:
    • 欠損のメカニズム(MCAR、MAR、MNAR)を理解する
    • 適切に補完、削除、またはフラグ付けする
  3. ラベル品質を修正します:
    • 確信度スコアを使って、ラベル付けが誤っている可能性の高いサンプルを特定する
    • 人によるレビュー、または自動修正に回す
    • ラベル付けのガイドラインを文書化する
  4. 正規化と標準化を行います:
    • 一貫性のある書式
    • スキーマの検証
    • エンコーディングの標準化
  5. クリーニング済みのデータセットを検証します
ワークフロー 3:データを拡張してバランスを調整する
  1. クラスの不均衡を分析します:
    • 不均衡比を計算する
    • モデルのトレーニングへの影響を評価する
  2. バランス調整戦略を適用します:
    • 少数クラスのオーバーサンプリング(SMOTE、ランダム)
    • 多数クラスのアンダーサンプリング
    • トレーニング時のクラス重み
  3. 拡張データを生成します:
    • テキスト:言い換え、類義語への置換、逆翻訳
    • 画像:回転、反転、色の揺らぎ、Mixup
    • 表形式データ:ノイズの注入、特徴量の摂動
  4. 拡張データの品質を検証します:
    • 拡張サンプルが現実的であることを確認する
    • 新たに生じたバイアスがないか確認する
  5. 変更をバージョン管理し、文書化します

クイックリファレンス

操作コマンド/トリガー
品質を評価する"このデータセットの品質を確認して"
重複を見つける"データセット内の重複を見つけて"
ラベルを修正する"誤ったラベルのデータを修正して"
クラスのバランスを調整する"クラスの不均衡に対処して"
データを拡張する"[task] 向けにデータセットを拡張して"
データセットをバージョン管理する"データセットのバージョン管理を設定して"

ベストプラクティス

  • 処理前にプロファイリングする:データを変更する前に、データの内容を把握します

    • 統計量を計算し、分布を可視化します
    • 参照できるように元の状態を記録します
    • 問題のパターンを特定します
  • 来歴を保持する:あらゆる変換を追跡します

    • コードと同様にデータセットをバージョン管理します
    • すべてのクリーニング操作を記録します
    • 元データとクリーニング済みデータの対応関係を維持します
  • ラベルの品質を優先する:不適切なラベルからは、不適切なモデルしか生まれません

    • 明確なラベル付けガイドラインの整備に取り組みます
    • 複数のアノテーターを起用し、評価者間の一致度を測定します
    • ラベルの品質を定期的に監査します
  • クリーニングの影響をテストする:クリーニングの効果を測定します

    • 元データとクリーニング済みデータでモデルを学習させます
    • どのクリーニング手順が最も効果的かを追跡します
    • パフォーマンスを低下させるクリーニングは避けます
  • 分割を慎重に層化する:学習用、検証用、テスト用データの分布を維持します

    • ラベルと主要な特徴量で層化します
    • 関連するサンプルは同じ分割にまとめます
    • 該当する場合は時系列順を維持します
  • すべてを記録する:将来の自分が、今の自分に感謝するでしょう

    • 主要な統計情報を記載したデータセットカード
    • 既知の問題と制限事項
    • 収集方法とバイアス

高度な手法

ラベルノイズに対する確信度ベースの学習

誤ったラベルが付いたサンプルを特定して修正します:

from cleanlab import find_label_issues

# Train model to get predicted probabilities
model.fit(X_train, y_train)
pred_probs = model.predict_proba(X_train)

# Find likely mislabeled examples
issues = find_label_issues(
    labels=y_train,
    pred_probs=pred_probs,
    return_indices_ranked_by="self_confidence"
)

# Review and correct top issues
for idx in issues[:100]:
    review_and_correct(X_train[idx], y_train[idx])
類似度ベースの重複排除

埋め込みを使って、ほぼ重複するデータを削除します:

def deduplicate_semantic(texts, threshold=0.95):
    embeddings = embed(texts)
    clusters = cluster_by_similarity(embeddings, threshold)

    # Keep one representative per cluster
    deduplicated = []
    for cluster in clusters:
        representative = select_best(cluster)  # longest, most recent, etc.
        deduplicated.append(representative)

    return deduplicated
効率的なラベル付けのためのアクティブラーニング

ラベル付けの労力を優先的に配分します:

def active_learning_loop(unlabeled_pool, labeled_set, budget):
    while len(labeled_set) < budget:
        # Train on current labeled data
        model.fit(labeled_set)

        # Score unlabeled by uncertainty
        uncertainties = model.uncertainty(unlabeled_pool)

        # Select most uncertain for labeling
        to_label = select_top_k(unlabeled_pool, uncertainties, k=10)
        labels = human_label(to_label)

        # Update sets
        labeled_set.add(to_label, labels)
        unlabeled_pool.remove(to_label)

    return labeled_set
データスライス分析

問題のあるサブグループを見つけます:

def find_weak_slices(model, data, features):
    # Evaluate on all slices
    slices = generate_slices(data, features)

    weak_slices = []
    for slice_name, slice_data in slices:
        performance = evaluate(model, slice_data)
        if performance < overall_performance - threshold:
            weak_slices.append({
                "slice": slice_name,
                "size": len(slice_data),
                "performance": performance
            })

    return sorted(weak_slices, key=lambda x: x["performance"])

避けるべきよくある落とし穴

  • テストデータを学習データと同じ方法でクリーニングする(データリークの原因になります)
  • 重複排除を過剰に行い、妥当なバリエーションまで削除してしまう
  • 欠損のメカニズムを理解せずに値を補完する
  • 非現実的なサンプルを生み出す方法でデータを拡張する
  • モデルの学習に失敗するまでクラスの不均衡を無視する
  • データセットをバージョン管理せず、実験の再現性を損なう
  • データは多いほどよいと考える(量より質が重要です)
  • データ収集におけるバイアスと制限事項の記録を怠る

コメント