Hugging Face Hub と DuckDB の統合によるデータセット分析

Hugging Face は DuckDB を統合し、ユーザーが Hugging Face Hub に保存されているパブリックデータセットに対して直接 SQL クエリを実行できるようにしました。この統合により、Hub のデータセットを Parquet カラム形式に自動変換する仕組みを活用し、ローカルにダウンロードすることなく巨大なデータセットに対して高速な分析クエリを実行できるようになります。

Automatic Parquet Conversion for Public Datasets

Hugging Face データセットビューアは、Hub 上のすべてのパブリックデータセットを自動的に Parquet ファイルに変換します。Parquet はカラム形式のストレージフォーマットで、データの保存、読み込み、分析において大幅に効率が向上し、これは現在の Large Language Models (LLMs) の時代で使用される大規模データセットにとって重要です。

ユーザーは、データセットページの「Auto-converted to Parquet」ボタンをクリックすることでこれらのファイルを特定できます。これらの Parquet ファイルの具体的な URL は、datasets-server の /parquet エンドポイントを介してプログラムから取得できます。

Analytical Querying with DuckDB

この統合では、複雑な分析クエリの実行における高いパフォーマンスから、DuckDB がデータベース管理システム(DBMS)として使用されます。このセットアップの重要な技術的機能は、DuckDB がオーバーヘッドなしでリモートの Parquet ファイルに対して直接 SQL クエリを実行できることです。

httpfs 拡張機能を使用することで、DuckDB は Hugging Face の /parquet エンドポイントが提供する URL を使ってリモートファイルの読み書きができます。これは特に大規模なデータセットに有用で、データセットビューアが大きなデータセットを 500MB 未満の小さなチャンクに分割し、DuckDB が複数の Parquet ファイルに対して同時にクエリを実行できるためです。

Implementation Example

データセットを分析するには、ユーザーは次の手順に従うことができます:

  1. Parquet URL を取得: 特定のデータセットの Parquet ファイル URL のリストを取得するために、/parquet エンドポイントに HTTP リクエストを送信します。
  2. DuckDB を初期化: 接続を作成し、httpfs 拡張機能をロードしてリモートファイルへのアクセスを有効にします。
  3. SQL を実行: リモート URL に対して標準的な SQL クエリを直接実行します。
import duckdb

# Example URL retrieved from the /parquet endpoint
url = "https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00000-of-00002.parquet"

con = duckdb.connect()
con.execute("INSTALL httpfs;

con.execute("LOAD httpfs;

# Querying the remote Parquet file
con.sql(f"""SELECT horoscope, 
    count(*), 
    AVG(LENGTH(text)) AS avg_blog_length 
    FROM '{url}' 
    GROUP BY horoscope 
    ORDER BY avg_blog_length 
    DESC LIMIT(5)""

Implications for Dataset Transparency

Hub データセットへの SQL アクセスを提供することで、研究者や開発者はモデルのトレーニングに使用されるデータセットの内容をよりよく理解できるようになります。データセットの構成がモデルの品質に直接影響するため、このツールはオープンアクセスとデータセット内容への認識の向上を促進する仕組みを提供し、構造化されたクエリを通じてユーザーが洞察を明らかにできるようにします。

Sources