在資料集上引入 SQL 控制檯

釋出於 2024 年 9 月 17 日
在 GitHub 上更新

資料集的使用一直在爆炸式增長,Hugging Face 已成為許多資料集的預設託管平臺。每個月,隨著上傳到 Hub 的資料集數量增加,查詢、篩選和發現它們的需求也隨之增長。

每月建立的資料集 每月在 Hugging Face Hub 上建立的資料集

我們非常激動地宣佈,您現在可以直接在 Hugging Face Hub 中對您的資料集執行 SQL 查詢了!

為資料集引入 SQL 控制檯

在每個資料集上,您應該都能看到一個新的 SQL 控制檯 徽章。只需單擊一下,您就可以開啟一個 SQL 控制檯來查詢該資料集。

查詢 Magpie-Ultra 資料集,尋找優質的推理指令。

所有工作都在瀏覽器中完成,該控制檯還帶有一些簡潔的功能:

  • 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 萬行。

Reddit Movie Suggestions

您可以看到,我們在 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 提供了可以輕鬆解析和查詢這些列的函式。

Alpaca to Conversation

得到結果後,我們可以將其下載為 Parquet 檔案。您可以在下面看到最終的輸出結果。

快來試試吧!

作為另一個例子,您可以嘗試在 SkunkworksAI/reasoning-0.01 資料集上執行 SQL 控制檯查詢,以檢視包含超過 10 個推理步驟的指令。

SQL 程式碼片段

DuckDB 有大量的用例我們仍在探索中。我們建立了一個 SQL 程式碼片段空間來展示您可以用 SQL 控制檯做些什麼。

以下是我們發現的一些非常有趣的用例:

請記住,只需單擊一下即可將您的 SQL 結果下載為 Parquet 檔案,並用於您的資料集中!

我們很想聽聽您對 SQL 控制檯的看法,如果您有任何反饋,請在這篇帖子中評論!

資源

社群

註冊登入 以發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.