為資料集而生的 SQL 控制檯

HuggingFace發表於2024-10-30

隨著資料集的使用量急劇增加,Hugging Face 社群已經變成了眾多資料集預設存放的倉庫。每月,海量資料集被上傳到社群,這些資料集亟需有效的查詢、過濾和發現。

Dataset Monthly Creations

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

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

資料集的 SQL 控制檯介紹

在每個公共資料集中,您應該會看到一個新的 SQL 控制檯標籤。只需單擊即可開啟 SQL 控制檯以查詢該資料集。

查詢 Magpie-Ultra 資料集來獲取優秀的高質量推理指令。

查詢 Magpie-Ultra 資料集來獲取優秀的高質量推理指令。

所有的操作都在瀏覽器中完成,控制檯還配備了一些實用的功能:

  • 完全的本地化支援: SQL 控制檯由 DuckDB WASM 驅動,因此您可以無需任何依賴即可查詢您的資料集。
  • 完整的 DuckDB 語法支援: DuckDB 支援全面的 SQL 語句,幷包含許多內建函式,如正規表示式、列表、JSON、嵌入等。您會發現 DuckDB 的語法與 PostgreSQL 非常相似。
  • 結果匯出: 您可以將查詢的結果匯出為 parquet 格式 .
  • 分享: 您可以使用連結分享公共資料集的查詢結果 .

工作原理

Parquet 格式轉換

大多數在 Hugging Face 上的資料集都儲存為 Parquet 格式,這是一種最佳化了效能和儲存效率的列式資料格式。Hugging Face 的 資料集檢視 和 SQL 控制檯會直接從資料集的 Parquet 檔案中載入資料。如果資料集是以其他格式儲存的,則前 5GB 自動轉換為 Parquet 格式。您可以在 Dataset Viewer Parquet API 文件 中找到更多關於 Parquet 轉換過程的資訊。

使用這些 Parquet 檔案,SQL 控制檯會為您建立檢視,基於資料集的劃分和配置供您進行查詢。

DuckDB WASM 🦆引擎

DuckDB WASM 是驅動 SQL 控制檯的引擎。它是一個在瀏覽器中執行於 Web Assembly 的程序內資料庫引擎,無需伺服器或後端。

僅在瀏覽器中執行,它為使用者提供最大程度的靈活性,可以自由查詢資料而不需要任何依賴項。這也使得透過簡單的連結分享可復現的結果變得非常簡單。

你可能在想,“這是否適用於大資料集?”答案是“當然可以!

以下是對 OpenCo7/UpVoteWeb 資料集的查詢,該資料集經過 Parquet 格式轉換後有 12.6M 行。

Reddit Movie Suggestions

您可以看到,我們在不到 3 秒內的時間內收到了簡單過濾查詢的結果。

雖然基於資料集的大小和查詢的複雜度查詢可能會發生很長時間,您會感到吃驚您用 SQL 控制檯做到的事情。

就像任何技術一樣,也有其侷限性:

  • SQL 控制檯可以處理許多查詢。然而記憶體限制約為 3GB,因此有可能超出記憶體並無法處理查詢 (提示: 嘗試使用過濾器來減少您正在查詢的資料量,並結合使用 LIMIT )。
  • 儘管 DuckDB WASM 非常強大,但它並不完全與 DuckDB 功能一致。例如,DuckDB WASM 尚未支援 hf:// 協議以查詢資料集

示例: 將資料集從 Alpaca 轉換為對話格式

現在我們已經介紹了 SQL 控制檯,讓我們透過一個實際例子來實踐一下。當微調大型語言模型時,我們經常需要處理不同的資料格式。其中特別流行的一種格式是對話式格式,在這種格式中,每一行代表使用者與模型之間的多輪對話。SQL 控制檯可以幫助我們高效地將資料轉換為這種格式。讓我們看看如何使用 SQL 將 Alpaca 資料集轉換為對話式格式。

通常開發人員會透過 Python 預處理步驟來完成這項任務,但我們可以展示一下在不到 30 秒的時間內利用 SQL 控制檯實現相同的功能。

在上方的資料集中,點選 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 對結構化的資料型別和函式有很好的文件說明,你可以參考 資料型別函式。你會發現許多資料集包含帶有 JSON 資料的列。DuckDB 提供了易於解析和查詢這些列的功能。

Alpaca to Conversation

一旦我們得到結果,就可以將其下載為一個 Parquet 檔案。你可以在下面看到最終輸出的樣子。

試一下!

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

SQL 片段

DuckDB 有許多我們仍在探索的應用場景。我們建立了一個 SQL 片段 空間,以展示您可以在 SQL 控制檯中完成的操作。

這裡有一些非常有趣的用例:

  • 使用正規表示式過濾呼叫特定函式的資料集
  • 從開放 LLM 排行榜中找到最受歡迎的基礎模型
  • 將 alpaca 資料集轉換為對話格式
  • 使用嵌入進行相似性搜尋
  • 從資料集中過濾超過 5 萬行以獲取最高質量的推理指令

請記住,只需點選一下即可下載您的 SQL 結果作為 Parquet 檔案並用於資料集!

我們非常希望聽聽您對 SQL 控制檯的看法,如果您有任何反饋,請在以下 帖子中留言!

資源

  • DuckDB WASM
  • DuckDB 語法
  • DuckDB WASM 論文
  • Parquet 格式簡介
  • Hugging Face + DuckDB
  • SQL 摘要空間

英文原文: https://hf.co/blog/sql-console

原文作者: Caleb Fahlgren

譯者: smartisan

相關文章