Hugging Face Hub 和 DuckDB 集成用于数据集分析

Hugging Face 已将 DuckDB 集成,以使用户能够直接在存储于 Hugging Face Hub 的公开数据集上执行 SQL 查询。此集成利用 Hub 自动将数据集转换为 Parquet 列式格式,使用户无需在本地下载即可对海量数据集进行快速的分析查询。

公开数据集的自动 Parquet 转换

Hugging Face 数据集查看器会自动将 Hub 上的所有公开数据集转换为 Parquet 文件。Parquet 是一种列式存储格式,对于存储、加载和分析数据的效率显著提高,这对于当前大型语言模型(LLMs)时代使用的大规模数据集至关重要。

用户可以通过在数据集页面点击“自动转换为 Parquet”按钮来识别这些文件。这些 Parquet 文件的具体 URL 可以通过编程方式从 datasets-server 的 /parquet 端点检索得到。

使用 DuckDB 进行分析查询

由于 DuckDB 在执行复杂分析查询时具有高性能,因此它被用作此集成的数据库管理系统(DBMS)。此设置的一个关键技术能力是 DuckDB 能够在没有额外开销的情况下直接在远程 Parquet 文件上执行 SQL 查询。

通过使用 httpfs 扩展,DuckDB 可以使用 Hugging Face /parquet 端点提供的 URL 读取和写入远程文件。这对于大型数据集特别有用,因为数据集查看器会将大型数据集分片成较小的 500MB 块,而 DuckDB 支持同时查询多个 Parquet 文件。

实现示例

要分析数据集,用户可以按照以下步骤进行:

  1. 检索 Parquet URL:通过对 /parquet 端点发起 HTTP 调用,获取特定数据集的 Parquet 文件 URL 列表。
  2. 初始化 DuckDB:创建连接并加载 httpfs 扩展以启用远程文件访问。
  3. 执行 SQL:直接针对远程 URL 运行标准 SQL 查询。
import duckdb

# Example URL retrieved from the /parquet endpoint
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;

# Querying the remote Parquet file
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)""

数据集透明度的影响

为 Hub 数据集提供 SQL 访问使研究人员和开发者能够更好地理解用于训练模型的数据集内容。由于数据集组成直接影响模型质量,此工具提供了一种机制,以实现开放访问和提高对数据集内容的认识,使用户能够通过结构化查询发现洞察。"}

Sources