プログラマー向けモードで表示中ビジネスユーザー向けへ
Bright Data 学習ポータル
UC-AI-006AILv4

Training Data Pipeline(学習データ調達)

モデル学習用データをコンプラ要件込みで継続調達する運用を構築する。

Training DataCrawl API

KPI 例

  • 取得量
  • 重複率
  • 法務クリア率

Training Data の実務では、取得対象を増やすことより、継続して同じ条件で集められること が重要です。Bright Data の AI ユースケースでは Training Data が独立項目として案内されていますが、実装の中心は Crawl API を使った収集ジョブ管理と、保存単位の設計に置くと理解しやすくなります。

誰の課題か

  • RAG や継続学習のために公開 Web から定期収集したい MLOps 担当
  • 手作りクローラの保守より、取得基盤の標準化を優先したいデータ基盤チーム
  • 学習データの更新周期と保持期間を明確にしたい AI プロダクト担当

単発で数ページ集めるだけなら学習データ基盤とは呼べません。対象 URL、取得日時、出力形式、保存先を固定し、再実行時に差分を追えるようにして初めて運用可能になります。

推奨製品セット

製品役割使いどころ
Training Dataユースケース全体の整理軸学習向けデータ供給の設計単位
Crawl API実データの取得複数 URL を Markdown / HTML / JSON で収集する
  • まずは Crawl API で取得ジョブを安定させ、その後に保存先や評価基盤へ広げる順番が安全です。
  • 学習用途では Markdown が扱いやすい一方、再解析や監査には HTML も有効です。用途に応じて出力形式を決めます。

最小実装イメージ

Crawl API ジョブを作成する

curl -X POST https://api.brightdata.com/v1/crawl/jobs \
  -H "Authorization: Bearer $BRIGHTDATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": [
      "https://example.com/docs/getting-started",
      "https://example.com/docs/authentication"
    ],
    "output": "markdown"
  }'

Python で結果をファイル保存する

import os
import time
import requests
 
API_KEY = os.getenv("BRIGHTDATA_API_KEY")
BASE_URL = "https://api.brightdata.com/v1/crawl/jobs"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
 
def create_job(urls: list[str]) -> str:
    response = requests.post(
        BASE_URL,
        headers={**HEADERS, "Content-Type": "application/json"},
        json={"urls": urls, "output": "markdown"},
        timeout=60,
    )
    response.raise_for_status()
    return response.json()["job_id"]
 
def wait_until_complete(job_id: str) -> None:
    while True:
        response = requests.get(f"{BASE_URL}/{job_id}/status", headers=HEADERS, timeout=60)
        response.raise_for_status()
        status = response.json()["status"]
        if status == "completed":
            return
        if status == "failed":
            raise RuntimeError(f"crawl job failed: {job_id}")
        time.sleep(10)
 
def download_result(job_id: str) -> str:
    response = requests.get(
        f"{BASE_URL}/{job_id}/result?format=markdown",
        headers=HEADERS,
        timeout=120,
    )
    response.raise_for_status()
    return response.text
 
if __name__ == "__main__":
    job_id = create_job([
        "https://example.com/docs/getting-started",
        "https://example.com/docs/authentication",
    ])
    wait_until_complete(job_id)
    body = download_result(job_id)
    with open("training_corpus.md", "w", encoding="utf-8") as f:
        f.write(body)

この例ではローカル保存までに留めていますが、本番では保存先パス、取得日時、ソース URL 一覧を必ず一緒に残します。

運用ポイント

  • 学習データ用の取得ジョブは、検証用途や監査用途のジョブと分けます。同じ URL でも保持期間や出力形式が違うためです。
  • URL リストは都度生成せず、版管理できるファイルやテーブルで持ちます。学習データの再現性が上がります。
  • クロール結果は本文だけでなく、取得日時、元 URL、ジョブ ID を保持します。後から除外や再取得が必要になるためです。
  • 取得件数を増やす前に、重複除去、ドメイン偏り、言語混在のチェックを入れます。
  • 公開情報であっても、利用規約、保持期間、削除依頼への対応方針は先に決めておく必要があります。

関連リンク