2024-05-29
Über 150.000 Datensätze von Hugging Face mit DuckDB nutzen
The Hugging Face and DuckDB teams
Wir freuen uns, die Unterstützung für hf://-Pfade in DuckDB anzukündigen: Damit stehen über 150.000 Datensätze für künstliche Intelligenz zur Verfügung. Gemeinsam mit Hugging Face wollen wir den Zugriff, die Bearbeitung und die Erkundung von Datensätzen, mit denen KI-Modelle trainiert und bewertet werden, demokratisieren.
Dataset-Repositories
Hugging Face ist eine beliebte zentrale Plattform, auf der Nutzer Machine-Learning-Modelle, Datensätze und andere Ressourcen speichern, teilen und gemeinsam bearbeiten können.
Ein Datensatz enthält typischerweise Folgendes:
- Eine
README-Datei: Diese reine Textdatei gibt einen Überblick über das Repository und seinen Inhalt. Sie beschreibt oft Zweck, Nutzung und besondere Anforderungen oder Abhängigkeiten. - Datendateien: Je nach Repository-Typ können das Dateien wie CSV, Parquet, JSONL usw. sein. Das sind die Kernbestandteile des Repositorys.
Ein typisches Repository sieht so aus:

Lesen über hf://-Pfade
Beim Arbeiten mit Daten müssen Sie oft Dateien in verschiedenen Formaten (z. B. CSV, JSONL und Parquet) lesen. Seit Version v0.10.3 hat DuckDB native Unterstützung für hf://-Pfade als Teil der httpfs-Extension, sodass all diese Formate leicht zugänglich sind.
Sie können sie jetzt mit dem folgenden URL-Muster abfragen:
hf://datasets/⟨my_username⟩/⟨my_dataset⟩/⟨path_to_file⟩Um zum Beispiel eine CSV-Datei zu lesen, können Sie folgende Abfrage nutzen:
SELECT *FROM 'hf://datasets/datasets-examples/doc-formats-csv-1/data.csv';Dabei gilt:
datasets-examplesist der Name des Users/der Organisationdoc-formats-csv-1ist der Name des Dataset-Repositorysdata.csvist der Dateipfad im Repository
Das Ergebnis der Abfrage ist:
| kind | sound |
|---|---|
| dog | woof |
| cat | meow |
| pokemon | pika |
| human | hello |
Um eine JSONL-Datei zu lesen, können Sie ausführen:
SELECT *FROM 'hf://datasets/datasets-examples/doc-formats-jsonl-1/data.jsonl';Zum Lesen einer Parquet-Datei nutzen Sie folgende Abfrage:
SELECT *FROM 'hf://datasets/datasets-examples/doc-formats-parquet-1/data/train-00000-of-00001.parquet';Jeder dieser Befehle liest die Daten aus dem jeweiligen Dateiformat und zeigt sie in einer strukturierten Tabellenform. Wählen Sie den passenden Befehl je nach Dateiformat.
Eine lokale Tabelle anlegen
Um den Remote-Endpunkt nicht für jede Abfrage anzusprechen, können Sie die Daten mit einem CREATE TABLE ... AS-Befehl in einer DuckDB-Tabelle speichern. Zum Beispiel:
CREATE TABLE data AS SELECT * FROM 'hf://datasets/datasets-examples/doc-formats-csv-1/data.csv';Danach fragen Sie die Tabelle data einfach so ab:
SELECT *FROM data;Mehrere Dateien
Bei großen Datensätzen müssen Sie oft mehrere Dateien gleichzeitig abfragen. Schauen wir uns ein kurzes Beispiel mit dem Datensatz cais/mmlu (Measuring Massive Multitask Language Understanding) an. Dieser Datensatz erfasst einen Test mit Multiple-Choice-Fragen aus verschiedenen Wissensgebieten. Er umfasst 57 Aufgaben, darunter Elementarmathematik, US-Geschichte, Informatik, Recht und mehr. Um bei diesem Test hohe Genauigkeit zu erreichen, müssen KI-Modelle über umfangreiches Weltwissen und Problemlösefähigkeit verfügen.
Zuerst zählen wir die Zeilen in einzelnen Dateien. Die Zeilenzahl einer einzelnen Datei im Datensatz cais/mmlu erhalten Sie so:
SELECT count(*) AS countFROM 'hf://datasets/cais/mmlu/astronomy/dev-00000-of-00001.parquet';| count |
|---|
| 5 |
Ebenso für eine andere Datei (test-00000-of-00001.parquet) im selben Datensatz:
SELECT count(*) AS countFROM 'hf://datasets/cais/mmlu/astronomy/test-00000-of-00001.parquet';| count |
|---|
| 152 |
Um alle Dateien eines bestimmten Formats abzufragen, können Sie ein Glob-Muster nutzen. So zählen Sie die Zeilen in allen Dateien, die auf *.parquet passen:
SELECT count(*) AS countFROM 'hf://datasets/cais/mmlu/astronomy/*.parquet';| count |
|---|
| 173 |
Mit Glob-Mustern können Sie große Datensätze effizient handhaben und umfassende Abfragen über mehrere Dateien ausführen, was Inspektion und Verarbeitung vereinfacht. Hier sehen Sie, wie Sie nach Fragen suchen, die das Wort „planet“ in der Astronomie enthalten:
SELECT count(*) AS countFROM 'hf://datasets/cais/mmlu/astronomy/*.parquet'WHERE question LIKE '%planet%';| count |
|---|
| 21 |
Und ein paar Beispiele:
SELECT questionFROM 'hf://datasets/cais/mmlu/astronomy/*.parquet'WHERE question LIKE '%planet%'LIMIT 3;| question |
|---|
| Why isn’t there a planet where the asteroid belt is located? |
| On which planet in our solar system can you find the Great Red Spot? |
| The lithosphere of a planet is the layer that consists of |
Versionierung und Revisions
In Hugging-Face-Repositories sind Dataset-Versionen oder Revisions verschiedene Aktualisierungen eines Datensatzes. Jede Version ist ein Snapshot zu einem bestimmten Zeitpunkt, mit dem Sie Änderungen und Verbesserungen nachverfolgen können. In Git-Begriffen kann man das als Branch oder konkreten Commit verstehen.
Sie können verschiedene Dataset-Versionen/Revisions mit der folgenden URL abfragen:
hf://datasets/⟨my_username⟩/⟨my_dataset⟩@⟨my_branch⟩/⟨path_to_file⟩Zum Beispiel:
SELECT *FROM 'hf://datasets/datasets-examples/doc-formats-csv-1@~parquet/**/*.parquet';| kind | sound |
|---|---|
| dog | woof |
| cat | meow |
| pokemon | pika |
| human | hello |
Die vorherige Abfrage liest alle Parquet-Dateien unter der Revision ~parquet. Das ist ein besonderer Branch, in dem Hugging Face automatisch die Parquet-Dateien jedes Datensatzes erzeugt, um effizientes Scannen zu ermöglichen.
Authentifizierung
Konfigurieren Sie Ihr Hugging-Face-Token im DuckDB Secrets Manager, um auf private oder geschützte Datensätze zuzugreifen. Besuchen Sie zuerst Hugging Face Settings – Tokens, um Ihr Access Token zu holen. Setzen Sie es dann in Ihrer DuckDB-Sitzung über DuckDBs Secrets Manager. DuckDB unterstützt zwei Provider für die Secret-Verwaltung:
-
CONFIG: Der Nutzer muss alle Konfigurationsinformationen in die AnweisungCREATE SECRETübergeben. Um ein Secret mit dem ProviderCONFIGzu erzeugen, nutzen Sie:CREATE SECRET hf_token (TYPE huggingface,TOKEN 'your_hf_token'); -
credential_chain: Versucht automatisch, Credentials zu holen. Für das Hugging-Face-Token versucht es, es aus~/.cache/huggingface/tokenzu lesen. Um ein Secret mit dem Providercredential_chainzu erzeugen, nutzen Sie:CREATE SECRET hf_token (TYPE huggingface,PROVIDER credential_chain);
Fazit
Die Integration von hf://-Pfaden in DuckDB vereinfacht den Zugriff auf und das Abfragen von über 150.000 auf Hugging Face verfügbaren Datensätzen erheblich. Dieses Feature demokratisiert Datenbearbeitung und -erkundung und erleichtert den Umgang mit Formaten wie CSV, JSON, JSONL und Parquet. Über hf://-Pfade können Nutzer komplexe Abfragen ausführen, große Datensätze effizient handhaben und die umfangreichen Ressourcen der Hugging-Face-Repositories nutzen.
Die Integration unterstützt nahtlosen Zugriff auf einzelne Dateien, mehrere Dateien über Glob-Muster und verschiedene Dataset-Versionen. DuckDBs robuste Fähigkeiten sorgen für eine flexible und schlanke Datenverarbeitung. Diese Integration ist ein großer Schritt, um den Zugriff auf KI-Datensätze für Forschende und Entwickler zugänglicher und effizienter zu machen, Innovation zu fördern und den Fortschritt im Machine Learning zu beschleunigen.
Möchten Sie mehr über DuckDB mit Hugging-Face-Datensätzen erfahren? Schauen Sie sich den ausführlichen Leitfaden an.