DuckDB:在 Hugging Face Hub 上對 50,000 多個數據集執行 SQL 查詢
Hugging Face Hub 致力於向所有人提供資料集的開放訪問許可權,併為使用者提供探索和理解資料集的工具。您可以在其中找到許多用於訓練流行的大型語言模型 (LLM) 的資料集,例如 Falcon、Dolly、MPT 和 StarCoder。此外,還有用於解決資料集中公平性和偏差問題的工具,例如 Disaggregators,以及用於預覽資料集中示例的工具,例如資料集檢視器。

我們很高興地宣佈,我們最近增加了另一項功能,幫助您分析 Hub 上的資料集;您可以使用 DuckDB 對 Hub 上儲存的任何資料集執行 SQL 查詢!根據 2022 年 StackOverflow 開發者調查,SQL 是第三大最受歡迎的程式語言。我們還需要一個快速的資料庫管理系統 (DBMS),專門用於執行分析查詢,這就是我們很高興能與 DuckDB 整合的原因。我們希望這能讓更多的使用者訪問和分析 Hub 上的資料集!
TLDR
資料集檢視器自動將 Hub 上的所有公共資料集轉換為 Parquet 檔案,您可以透過單擊資料集頁面頂部的“自動轉換為 Parquet”按鈕來檢視。您還可以透過簡單的 HTTP 呼叫訪問 Parquet 檔案 URL 列表。
r = requests.get("https://datasets-server.huggingface.co/parquet?dataset=blog_authorship_corpus")
j = r.json()
urls = [f['url'] for f in j['parquet_files'] if f['split'] == 'train']
urls
['https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00000-of-00002.parquet',
'https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00001-of-00002.parquet']
建立與 DuckDB 的連線,並安裝和載入 httpfs
擴充套件,以允許讀取和寫入遠端檔案
import duckdb
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;")
連線後,您就可以開始編寫 SQL 查詢了!
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)"""
)
要了解更多資訊,請查閱文件。
從資料集到 Parquet
Parquet 檔案是列式儲存的,這使得它們在儲存、載入和分析方面更有效率。這在處理大型資料集時尤為重要,而在 LLM 時代,我們看到的大型資料集越來越多。為了支援這一點,資料集檢視器會自動將 Hub 上的任何公共資料集轉換為 Parquet 檔案併發布。Parquet 檔案的 URL 可以透過 /parquet
端點檢索。
使用 DuckDB 進行分析
DuckDB 在運行復雜分析查詢方面提供了令人印象深刻的效能。它能夠直接在遠端 Parquet 檔案上執行 SQL 查詢,而無需任何開銷。藉助 httpfs
擴充套件,DuckDB 能夠使用 /parquet
端點提供的 URL 查詢 Hub 上儲存的遠端檔案(例如資料集)。DuckDB 還支援查詢多個 Parquet 檔案,這非常方便,因為資料集檢視器會將大型資料集分片成更小的 500MB 塊。
展望未來
瞭解資料集的內容對於模型開發非常重要,因為它會以各種方式影響模型質量!透過允許使用者在 Hub 資料集上編寫和執行任何 SQL 查詢,這是我們實現資料集開放訪問並幫助使用者更瞭解資料集內容的另一種方式。我們很高興您能嘗試一下,並期待您的分析能揭示出什麼樣的見解!