其实这个已经不是新闻了,huggingface 发布于2023年7月7日。
Hugging Face Hub 致力于为每个人(✍️:包括我们吗?)提供数据集的开放访问权限,并为用户提供探索和理解数据集的工具。您可以找到许多用于训练流行的大语言模型 (LLM) 的数据集,例如 Falcon[1]、Dolly[2]、MPT[3] 和 StarCoder[4]。有一些工具可以解决数据集中的公平性和偏差问题,例如 Disaggregators[5],还有一些工具可以预览数据集中的示例,例如数据集查看器。

使用数据集查看器预览 OpenAssistant 数据集。
我们很高兴地分享,我们最近添加了另一项功能来帮助您分析 Hub 上的数据集;您可以在 Hub 上存储的任何数据集上使用 DuckDB 运行 SQL 查询!根据 2022 年 StackOverflow 开发者调查[6],SQL 是第三大流行的编程语言。我们还想要一个专为运行分析查询而设计的快速数据库管理系统 (DBMS),这就是我们对于 DuckDB[7] 集成感到兴奋的原因。我们希望这能让更多用户访问和分析 Hub 上的数据集!
TLDR
数据集服务器[8] 自动将 Hub 上的所有公共数据集转换为 Parquet 文件,您可以通过单击数据集页面顶部的“自动转换为 Parquet”按钮来查看。您还可以通过简单的 HTTP 调用访问 Parquet 文件 URL 列表。
r = requests.get("https://datasets-server.huggingface.co/parquet?dataset=blog_authorship_corpus")
j = r.json()
urls = [f['url'] for f in j['parquet_files'] if f['split'] == 'train']
urls
['https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00000-of-00002.parquet',
'https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00001-of-00002.parquet']
创建与 DuckDB 的连接并安装和加载 httpfs
扩展以允许读写远程文件:
import duckdb
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;")
连接后,您就可以开始编写 SQL 查询!
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)"""
)
要了解更多信息,请查看 文档[9]。
从数据集到 Parquet
Parquet[10] 文件是列式的,这使得它们在存储、加载和分析方面更有效率。当您处理大型数据集时,这一点尤其重要,而我们在 LLM 时代看到的数据集越来越多。为了支持这一点,数据集服务器会自动转换和发布 Hub 上的任何公共数据集作为 Parquet 文件。可以使用 /parquet
[11] 端点检索 Parquet 文件的 URL。
✍️:有兴趣的可以详细看看这篇文章:什么是 Parquet 文件格式以及为什么要使用它?
使用 DuckDB 分析
DuckDB 在运行复杂的分析查询方面提供了非常令人印象深刻的性能。它能够直接在远程 Parquet 文件上执行 SQL 查询,而没有任何开销。使用 httpfs
[12] 扩展,DuckDB 能够查询远程文件,例如使用 /parquet
端点提供的存储在 Hub 上的数据集的 URL。DuckDB 还支持查询多个 Parquet 文件,这非常方便,因为数据集服务器将大数据集分片为较小的 500MB 块。
✍️:对DuckDB了解还不够多,这里有很多文章等着你
展望未来
了解数据集中的内容对于开发模型非常重要,因为它可以以各种方式影响模型质量!通过允许用户对 Hub 数据集编写和执行任何 SQL 查询,这是我们实现数据集开放访问并帮助用户更多地了解数据集内容的另一种方式。我们很高兴您能尝试一下,我们期待您的分析揭示出什么样的见解!
引用链接
[1]
Falcon: https://huggingface.co/datasets/tiiuae/falcon-refinedweb[2]
Dolly: https://huggingface.co/datasets/databricks/databricks-dolly-15k[3]
MPT: https://huggingface.co/datasets/mosaicml/dolly_hhrlhf[4]
StarCoder: https://huggingface.co/datasets/bigcode/the-stack[5]
Disaggregators: https://huggingface.co/spaces/society-ethics/disaggregators[6]
StackOverflow 开发者调查: https://survey.stackoverflow.co/2022/#section-most-popular-technologies-programming-scripting-and-markup-languages[7]
DuckDB: https://duckdb.org/[8]
数据集服务器: https://huggingface.co/docs/datasets-server/index[9]
文档: https://huggingface.co/docs/datasets-server/parquet_process[10]
Parquet: https://parquet.apache.org/docs/[11]
/parquet
: https://huggingface.co/docs/datasets-server/quick_start#access-parquet-files[12]
httpfs
: https://duckdb.org/docs/extensions/httpfs




