Hugging Face Hub 與 DuckDB 整合用於數據集分析

Hugging Face 已整合 DuckDB,使用戶能夠直接對儲存在 Hugging Face Hub 上的公開數據集執行 SQL 查詢。此整合允許對海量數據集進行快速的分析查詢,而無需將其下載到本地,這得益於 Hub 會自動將數據集轉換為 Parquet 列式格式。

公開數據集的自動 Parquet 轉換

Hugging Face 數據集檢視器會自動將 Hub 上所有的公開數據集轉換為 Parquet 檔案。Parquet 是一種列式儲存格式,在儲存、載入和分析數據方面效率極高,這對於當前大型語言模型 (LLMs) 時代所使用的大規模數據集至關重要。

使用者可以透過點擊數據集頁面上的「Auto-converted to Parquet」按鈕來識別這些檔案。這些 Parquet 檔案的特定 URL 可以透過 datasets-server 的 /parquet 端點以程式化方式取得。

使用 DuckDB 進行分析查詢

DuckDB 被用作此整合的資料庫管理系統 (DBMS),因為它在執行複雜分析查詢方面具有高性能。此設定的一個關鍵技術能力是 DuckDB 能夠直接在遠端 Parquet 檔案上執行 SQL 查詢而無需額外開銷。

透過使用 httpfs 擴充功能,DuckDB 可以使用 Hugging Face /parquet 端點提供的 URL 來讀取和寫入遠端檔案。這對於大型數據集特別有用,因為數據集檢視器會將大型數據集分片成較小的 500MB 區塊,而 DuckDB 支援同時對多個 Parquet 檔案進行查詢。

實作範例

若要分析數據集,使用者可以遵循以下步驟:

  1. 取得 Parquet URL:使用 HTTP 呼叫 /parquet 端點來獲取特定數據集的 Parquet 檔案 URL 列表。
  2. 初始化 DuckDB:建立連線並載入 httpfs 擴充功能以啟用遠端檔案存取。
  3. 執行 SQL:直接針對遠端 URL 執行標準 SQL 查詢。
import duckdb

# 從 /parquet 端點取得的範例 URL
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;")

# 查詢遠端 Parquet 檔案
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)""")

對數據集透明度的影響

為 Hub 數據集提供 SQL 存取權限,使研究人員和開發人員能夠更好地理解用於訓練模型的數據集內容。由於數據集的組成直接影響模型品質,此工具提供了一種開放存取機制並提高了對數據集內容的認識,允許使用者透過結構化查詢來發現洞察。

Sources