Web scraping for machine learning - how to build quality training datasets - DataImpulse

機械学習モデルの性能は、学習に使うデータの質に大きく左右されます。そして多くのチームにとって、そのデータはウェブから得られます。機械学習向けのデータ収集、つまり実世界の事例を集め、クリーニングし、構造化してトレーニングデータセットにする工程は、モデルの品質を大きく左右します。本ガイドでは、機械学習のためのウェブスクレイピングをエンドツーエンドで解説します。高品質なトレーニングデータセットの作り方、「品質」とは何を意味するのか、段階的なプロセス、特に重要なクリーニング、法的な線引き、そして大規模な収集にプロキシが必要な理由を取り上げます。

私は Andrii Byzov、MLや分析向けのウェブデータパイプラインを構築する AI-Native Fractional CMO です。以下では、モデル性能を左右するデータセットの品質要素、コード付きの実践的なスクレイピングからデータセット化までのワークフロー、そしてレジデンシャルプロキシが収集のスケーラビリティと多様性をどのように支えるかを説明します。


主なポイント

  • 品質、重複排除、ラベル精度は、多くの場合、生のデータ量よりも重要です。 クリーンで多様性があり、適切にラベル付けされたデータセットは、より大きくてもノイズの多いデータセットより優れたモデルをトレーニングできます。ただし、品質が確保されていれば、規模も依然として重要です。
  • ウェブは一般的なデータソースです 多くの ML データセットにおいて、テキスト、画像、価格、レビュー、リスティングなどは、API、ライセンス済みフィード、またはオープンデータセットが適さない場合にスクレイピングによって収集されます。
  • 地域に依存するタスクでは、地域を考慮した収集を使用します。 言語、価格、または在庫状況が場所によって異なる場合、多くの地域から例を取得することで(地域指定プロキシ経由)、偏りのあるデータセットを避けられます。
  • レート制限のあるサイトを大規模にスクレイピングする場合は、プロキシがよく使われます。 単一の IP は遮断されるため、大規模な収集では、ローテーション型のレジデンシャルIPを利用します。ただし、プロキシを使ってもサイトの利用規約が無効になるわけではありません。
  • データをどのように取得したかは、法的に重要です。 Bartz v. Anthropic(2025)において、裁判所は、その事案の事実関係のもとで、lawfully acquired書籍を用いたトレーニングはフェアユースに当たると判断しましたが、海賊版コピーでライブラリを構築することについてはフェアユースを認めませんでした。データの出所もコンプライアンスの一部です。

優れたトレーニングデータセットとは?

何かをスクレイピングする前に、何を目指すのかを把握しておきましょう。質の高いトレーニングデータセットには5つの特性があります。

  • 関連性:事例が、タスクと本番環境でモデルが遭遇するデータ分布に合っていること。
  • 多様性:データソース、地域、エッジケースに幅があり、モデルが一部を暗記するのではなく汎化できること。
  • クリーンなラベル:正確で一貫したアノテーション。ラベルノイズは達成可能な精度の上限を下げます。
  • バランス:クラスやセグメントが妥当な比率で表現されており、スクレイピングしやすかったものに偏っていないこと。
  • 鮮度:パターンが依然として有効なだけ新しく、状況の変化に応じて更新する計画があること。

「データを増やしても効果がなかった」という問題の多くは、これらのいずれかが弱いことに起因します。多くは、重複、ラベルノイズ、または単一のデータソースに偏ったデータセットが原因です。このガイドではこの観点に焦点を当てます。プロキシの選び方についてはMLトレーニングに最適なプロキシを、落とし穴についてはAIトレーニングデータ収集でチームが繰り返すミスをご覧ください。


ウェブスクレイピングでトレーニングデータセットを構築する方法

ステップ1:スキーマとラベルを定義する。 収集を始める前に、必要なフィールドとラベルのセットを決めます。各サンプルに何が含まれ、どのようにタグ付けされるかを明確にします。モデルのタスクから逆算することで、不要なデータを集めてしまうことを防げます。

ステップ2:データソースを特定し、大規模にスクレイピングする。 サンプルを入手できるサイトを特定し、プロキシ経由でスクレイピングして、十分な量と地域的な多様性を確保します。収集時には、すべてのサンプルにデータソースとラベルを付与します。



import requests
from bs4 import BeautifulSoup

HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                         "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}
# Rotating residential proxies: scale collection without IP blocks, and pull
# region-diverse examples so the dataset isn't skewed to one location.
proxies = {"http":  "http://LOGIN__cr.us;sid.ml1:[email protected]:823",
           "https": "http://LOGIN__cr.us;sid.ml1:[email protected]:823"}

def collect(urls, label):
    """Scrape raw text examples and tag each with its source + label."""
    rows = []
    for url in urls:
        try:
            r = requests.get(url, headers=HEADERS, proxies=proxies, timeout=30)
            r.raise_for_status()
        except requests.RequestException:
            continue
        text = BeautifulSoup(r.text, "html.parser").get_text(" ", strip=True)
        rows.append({"text": text, "label": label, "source": url})
    return rows






















ステップ3. クリーンアップと重複排除。 スクレイピングした生データにはノイズが多く、重複が大量に含まれています。重複は、バイアスが強く過学習しやすいモデルにつながります。空のデータや短すぎるサンプルを削除し、テキストを正規化し、完全一致と近似一致の重複を早い段階で削除します。



import hashlib, re

def clean(t):
    return re.sub(r"\s+", " ", t).strip().lower()

def dedup(rows, min_len=40):
    """Drop empties, too-short samples, and exact duplicates — noisy,
    duplicated data is the fastest way to a biased, overfit model."""
    seen, out = set(), []
    for row in rows:
        text = row["text"]
        if not text or len(text) < min_len:
            continue
        key = hashlib.sha1(clean(text).encode()).hexdigest()
        if key in seen:
            continue
        seen.add(key)
        out.append(row)
    return out

urls = ["https://example.com/a", "https://example.com/b"]   # your source list
dataset = dedup(collect(urls, label="positive"))
print(f"{len(dataset)} deduplicated examples")























ステップ4:ラベル付けと構造化。 一貫したラベルを適用します。可能な場合は弱教師あり学習やヒューリスティックなどのプログラム処理を用い、ラベルの品質を測るためにサンプルを人手で確認します。トレーニングを再現できるよう、データセットは構造化し、バージョン管理できる形式(JSONL/Parquet)で保存します。

ステップ5:品質を検証する。 トレーニング前に、クラスバランス、ソース分布、明らかなバイアスを確認します。クラス別、地域別、ソース別のサンプル数をすばやく監査することで、モデル性能を静かに損なう偏りを検出できます。


MLデータ収集でプロキシが重要な理由

大規模な機械学習データ収集では、プロキシがないと主に2つの問題が生じます。ボリューム:トレーニングデータセットには数千から数百万のサンプルが必要ですが、サイトは過度なクローリングに対してレート制限やブロックを行います。単一のIPはすぐに遮断されます。多様性:すべてのサンプルが1つの地域から取得されている場合、データセットはそのバイアスを引き継ぐため、多くの地域から取得したサンプルが必要です。DataImpulseのレジデンシャルプロキシ($1/GB、ローテーション、195か国)は、どちらの課題にも役立ちます。大規模なローテーションプールで必要な収集量を維持し、ジオターゲティングで地域に依存するタスク向けに地域の多様性を備えたサンプルを取得できます。ただし、プロキシは収集を支援するものであり、サイトの利用規約を無効にするものではありません。ウェブから収集するデータの全体像については、alternative dataに関するガイドをご覧ください。

MLトレーニング用にデータをスクレイピングすることは合法ですか?

収集とトレーニングでは、法的な論点が異なります。収集:通常のルールが適用されます。公開されている非個人データのリスクは一般に低めですが、著作権、サイト規約、アクセス制御、プライバシー法は引き続き関係します。ログインが必要なコンテンツ、個人データ、アクセス制御の回避は避けてください。トレーニングBartz v. Anthropic(2025)では、米国の裁判所が、その事案において合法的に取得された書籍を用いたトレーニングはフェアユースに当たると判断しましたが、海賊版コピーでライブラリを構築することについてはフェアユースを認めませんでした。つまり、データをどのように取得したかは、そのデータで何をするかと同じくらい重要です。データの出所を明確にし、robots.txtとサイト規約を尊重し、商用モデルについては法律専門家に相談してください。全体的な枠組みについては、whether web scraping is legalをご覧ください。これは一般的な情報であり、法的助言ではありません。


よくある質問

機械学習データ収集とは何ですか?

実世界の例を収集、クリーニング、構造化し、モデルが学習できるデータセットにするプロセスです。多くのチームにとって、主なデータソースは公開ウェブです。テキスト、画像、価格、レビュー、リスティングなどを、APIやライセンス付きフィードが存在しない場合にスクレイピングで収集し、その後、重複排除、ラベル付け、検証を行います。

モデルの学習にはどのくらいのデータが必要ですか?

タスクやモデルによって異なりますが、単純な件数より、品質と多様性の方が重要です。小規模でもクリーンで、バランスがよく、適切にラベル付けされたデータセットは、ノイズの多い大規模なデータセットを上回ることがよくあります。量を追う前に、重複やラベルノイズを取り除き、本番環境でモデルが遭遇するケースをカバーすることに注力してください。

学習データで重複排除がそれほど重要なのはなぜですか?

重複があると、繰り返される内容に過度な重みが付き、モデルにバイアスを与え、評価スコアを水増しします(同じ例が学習セットとテストセットの両方に入る可能性があります)。完全重複と近似重複の削除は、最も効果の高いクリーニング手順の一つです。汎化性能を向上させ、指標の信頼性を高めます。

ML学習データをスクレイピングするにはプロキシが必要ですか?

IP単位でレート制限を行うサイトを大量にスクレイピングする場合、通常は必要です。データセットの構築には多くのリクエストが必要で、単一のIPはすぐに遮断されます。ローテーション型レジデンシャルプロキシは処理量を維持し、地域的に多様な例を取得できるようにします。ただし、サイトの利用規約を無効にするものではないため、責任を持って収集してください。(API、ライセンス付きフィード、Common Crawlのようなオープンデータセットを使えば、スクレイピング自体を回避できる場合もあります。)

モデルを学習するためにデータをスクレイピングすることは合法ですか?

収集と学習は別々の問題です。公開されている非個人データの収集は、一般にリスクが低めです(自動的に問題がないという意味ではありません。著作権、ToS、アクセス制御、プライバシー法は引き続き適用されます)。ログイン、個人データ、制御の回避は避けてください。学習については、Bartz v. Anthropic (2025) が、合法的に取得された書籍での学習について当該事実関係の下でフェアユースと判断した一方、海賊版ライブラリについては認めませんでした。出所が重要です。サイトの規約を尊重し、商用利用については弁護士に相談してください。法的助言ではありません。


結論

高品質なトレーニングデータセットの構築は、単にデータをダウンロードするだけでは完結しないプロセスです。スキーマを定義し、適切なソースを大規模にスクレイピングし、重複排除とクリーニングを徹底し、一貫した基準でラベル付けし、バランスとバイアスを検証します。データの多くはウェブ上にあるため、地理的な多様性を確保し、大容量の収集に対応してブロックを受けにくくする収集基盤が、その後の工程を支えます。そして、それを実現するのがレジデンシャルプロキシです。出所を明確に保ち、法的な境界を意識すれば、機械学習データ収集によって、モデルが実際に学習できるデータセットを作成できます。インフラについては、MLトレーニングに最適なプロキシおよびWebスクレイピングに最適なプロキシをご覧ください。

最終更新日: June 25, 2026.




Share article: