在資料集上引入 SQL 控制檯
資料集的使用一直在爆炸式增長,Hugging Face 已成為許多資料集的預設託管平臺。每個月,隨著上傳到 Hub 的資料集數量增加,查詢、篩選和發現它們的需求也隨之增長。
我們非常激動地宣佈,您現在可以直接在 Hugging Face Hub 中對您的資料集執行 SQL 查詢了!
為資料集引入 SQL 控制檯
在每個資料集上,您應該都能看到一個新的 SQL 控制檯 徽章。只需單擊一下,您就可以開啟一個 SQL 控制檯來查詢該資料集。
所有工作都在瀏覽器中完成,該控制檯還帶有一些簡潔的功能:
- 100% 本地執行:SQL 控制檯由 DuckDB WASM 提供支援,因此您無需任何依賴項即可查詢資料集。
- 完整的 DuckDB 語法:DuckDB 支援完整的 SQL 語法,並內建了許多用於正則表示式、列表、JSON、嵌入等功能的函式。您會發現 DuckDB 的語法與 PostgreSQL 非常相似。
- 匯出結果:您可以將查詢結果匯出為 Parquet 格式。
- 可分享:您可以透過連結分享公開資料集的查詢結果。
工作原理
Parquet 轉換
Hugging Face 上的大多數資料集都以 Parquet 格式儲存,這是一種列式資料格式,針對性能和儲存效率進行了最佳化。Hugging Face 上的資料集檢視器和 SQL 控制檯直接從資料集的 Parquet 檔案載入資料。如果資料集是其他格式,前 5GB 的資料會自動轉換為 Parquet 格式。您可以在資料集檢視器 Parquet API 文件中找到有關 Parquet 轉換過程的更多資訊。
SQL 控制檯使用 Parquet 檔案,根據您的資料集拆分和配置為您建立可供查詢的檢視。
DuckDB WASM 🦆
DuckDB WASM 是驅動 SQL 控制檯的引擎。它是一個在瀏覽器中透過 Web Assembly 執行的程序內資料庫引擎。無需伺服器或後端。
透過完全在瀏覽器中執行,它為使用者提供了最大的靈活性,可以隨心所欲地查詢資料,而無需任何依賴。這也使得透過一個簡單的連結分享可復現的結果變得非常簡單。
您可能會問:“它對大型資料集也有效嗎?” 答案是:“是的!”
這是一個對 OpenCo7/UpVoteWeb 資料集的查詢,其 Parquet 轉換檔案有 1260 萬
行。
您可以看到,我們在 3 秒內就收到了一個簡單篩選查詢的結果。
雖然查詢時間會根據資料集的大小和查詢的複雜性而變長,但您會對 SQL 控制檯能做的事情感到驚訝。
與任何技術一樣,它也有侷限性。
- SQL 控制檯可以處理大量查詢。然而,記憶體限制約為 3GB,因此可能會出現記憶體不足而無法處理查詢的情況 (提示:嘗試使用篩選器來減少您正在查詢的資料量,並配合使用
LIMIT
)。 - 雖然 DuckDB WASM 非常強大,但它與 DuckDB 的功能並不完全相同。例如,DuckDB WASM 尚不支援使用
hf://
協議來查詢資料集。
示例:將 Alpaca 資料集轉換為對話格式
既然我們已經介紹了 SQL 控制檯,讓我們來看一個實際的例子。在微調大語言模型 (LLM) 時,您通常需要處理不同的資料格式。其中一種特別流行的格式是對話格式,即每行代表使用者與模型之間的多輪對話。SQL 控制檯可以幫助我們高效地將資料轉換為這種格式。讓我們看看如何使用 SQL 將 Alpaca 資料集轉換為對話格式。
通常,開發人員會透過 Python 預處理步驟來完成這項任務,但我們可以展示如何使用 SQL 控制檯在 30 秒內實現同樣的效果。
在上方的資料集中,點選 SQL 控制檯 徽章以開啟 SQL 控制檯。您應該會看到下面的查詢被自動填充。
準備好後,點選 執行查詢 按鈕來執行查詢。
SQL
-- Convert Alpaca format to Conversation format
WITH
source_view AS (
SELECT * FROM train -- Change 'train' to your desired view name here
)
SELECT
[
struct_pack(
"from" := 'user',
"value" := CASE
WHEN input IS NOT NULL AND input != ''
THEN instruction || '\n\n' || input
ELSE instruction
END
),
struct_pack(
"from" := 'assistant',
"value" := output
)
] AS conversation
FROM source_view
WHERE instruction IS NOT NULL
AND output IS NOT NULL;
在查詢中,我們使用 struct_pack
函式為每次對話建立一個新的 STRUCT 行。
DuckDB 提供了關於 STRUCT
資料型別和函式的詳盡文件。您會發現許多資料集的列中包含 JSON 資料。DuckDB 提供了可以輕鬆解析和查詢這些列的函式。
得到結果後,我們可以將其下載為 Parquet 檔案。您可以在下面看到最終的輸出結果。
快來試試吧!
作為另一個例子,您可以嘗試在 SkunkworksAI/reasoning-0.01 資料集上執行 SQL 控制檯查詢,以檢視包含超過 10 個推理步驟的指令。
SQL 程式碼片段
DuckDB 有大量的用例我們仍在探索中。我們建立了一個 SQL 程式碼片段空間來展示您可以用 SQL 控制檯做些什麼。
以下是我們發現的一些非常有趣的用例:
- 使用正則表示式從函式呼叫資料集中篩選特定函式
- 從 open-llm-leaderboard 中找出最受歡迎的基礎模型
- 將 alpaca 資料集轉換為對話格式
- 使用嵌入進行相似性搜尋
- 從一個包含 5 萬多行的資料集中篩選出最高質量的推理指令
請記住,只需單擊一下即可將您的 SQL 結果下載為 Parquet 檔案,並用於您的資料集中!
我們很想聽聽您對 SQL 控制檯的看法,如果您有任何反饋,請在這篇帖子中評論!