Show HN: Hyperparam - 用于在浏览器中本地探索数据集的 OSS 工具
Hyperparam 开源项目
创建 Hyperparam 的目的是为了解决机器学习生态系统中的一个关键缺口:缺乏用户友好、可扩展的 UI 来探索和管理海量数据集。
我们的使命基于这样的信念:数据质量是机器学习成功的关键因素,因此需要更好的工具来构建更好的训练集。在实践中,这意味着使数据科学家和工程师能够_"查看他们的数据"——即使是 TB 级别的文本语料库——完全在浏览器中交互式地进行,而无需繁重的基础设施。通过结合高效的数据格式、高性能的 JavaScript 库以及新兴的 AI 辅助,Hyperparam 的愿景是将数据质量置于模型开发的最前沿。我们的座右铭"AI 数据的缺失 UI"_反映了其目标,即让大规模数据探索、标注和质量管理像现代 Web 应用程序一样直观,同时通过本地优先的设计尊重隐私和合规性。
使命和愿景:浏览器中的数据中心 AI
我们的使命是帮助 ML 从业者为最佳模型创建最佳训练数据集。这源于整个行业的一个共识,即模型性能最终受数据质量的限制,而不仅仅是模型架构或超参数。Hyperparam 设想了一种新的工作流程,其中:
- 大规模的交互式数据探索: 用户可以通过快速、自由的交互方式自由探索海量数据集(数百万或数十亿条记录),从而发现有价值的见解。与处理大型数据时表现不佳的传统 Python 笔记本(通常需要降采样或笨拙的分页)不同,Hyperparam 利用浏览器技术提供流畅的 UI。
- AI 辅助的数据管理: Hyperparam 集成了 ML 模型,以帮助标注、过滤和转换数据,其规模是手动审核不切实际的。通过将高度交互的 UI 与模型辅助相结合,我们使用户可以使用数据来准确表达他们希望从模型中获得什么。
- 本地优先和私有: Hyperparam 完全在客户端运行,没有服务器依赖性。这种设计不仅简化了设置(无需复杂的管道或云),而且还解决了企业合规性和安全问题,因为敏感数据无需离开用户的机器。完全包含在浏览器中的工具可以绕过主要的采用障碍。
数据工程和 MLOps 领域的专家广泛认同需要更好的数据探索和标注工具来解决当今的瓶颈。我们认为,实现这一目标的方法是使以数据为中心的 AI 工作流程更快、更易于部署且更具可扩展性——使用户能够迭代地提高数据质量,从而产生更好的模型。
Hyperparam OSS 生态系统
Hyperparam 通过一套开源工具来实现我们的愿景,这些工具解决了数据管理的各个方面。这些工具使用 TypeScript/JavaScript 构建,以便在浏览器和 Node.js 中无缝使用。
我们关心性能、最小依赖性和标准合规性。
Hyparquet:浏览器中的 Parquet 数据访问
Hyparquet 是一个轻量级的纯 JS 库,用于直接在浏览器中读取 Apache Parquet 文件。Parquet 是一种流行的大型数据集列式格式,Hyparquet 使 Web 应用程序能够利用这种效率,而无需任何服务器。
Hyparquet 允许数据科学家立即在浏览器 UI 中打开大型数据集文件进行检查,而无需 Python 脚本、服务器或云数据库。它对于快速数据集验证(例如,检查新数据的样本是否存在质量问题)以及为基于 Web 的数据分析工具提供支持非常有用。由于它是纯 JS,开发人员可以将 Hyparquet 集成到任何需要读取 Parquet 的 Web 应用程序或 Electron 应用程序中。它是 Hyperparam 自身数据集查看器的核心引擎,实现了以前认为不可能的事情:客户端大数据探索。
- 浏览器原生和无依赖: Hyparquet 没有外部依赖项,旨在在现代浏览器和 Node.js 中运行。压缩后约为 9.7 KB,非常轻巧。它实现了完整的 Parquet 规范,旨在成为“世界上最兼容的 Parquet 解析器”,可以打开比其他库更多的文件(所有编码和类型)。
- 大规模数据的高效流式传输: Hyparquet 在设计时考虑了性能,仅加载给定查询或视图所需的数据部分。它利用 Parquet 的内置索引来动态获取所需的行或列。这种“及时加载”的方法使得在 Web 应用程序中以交互方式探索数千兆字节甚至数十亿行的数据集成为可能。
- 完整的压缩支持: Parquet 文件通常使用压缩(Snappy、Gzip、ZSTD 等)。Hyparquet 默认处理常见情况(未压缩、Snappy),并使用配套库 Hyparquet-Compressors 支持 所有 Parquet 压缩编解码器。这是通过 WebAssembly 优化的解压缩器实现的——尤其是 HySnappy,一个 WASM Snappy 解码器,可在最小占用空间的情况下加速解析。
Hyparquet-Writer:从 JavaScript 导出 Parquet 文件
为了补充 Hyparquet 的读取功能,Hyparquet-Writer 提供了一种在 JavaScript 中写入或将数据导出为 Parquet 格式的方法。它的设计与读取对应物一样轻巧高效。
在使用 Hyperparam 的工具探索或过滤数据集后,用户可能希望保存子集或注释。Hyparquet-Writer 使得可以将这些结果 在浏览器中 导出为 Parquet 文件(或在 Node.js 中,而无需 Python/Java 库)。这对于创建可共享的_"精炼数据集"_或在系统之间移动数据同时保持 Parquet 格式(避免昂贵的 CSV 转换)非常有价值。
- JS 中的快速 Parquet 写入: Hyparquet-Writer 可以接收 JavaScript 数据(每列的值数组)并输出二进制 Parquet 文件。它提供高效率和紧凑的存储,因此即使在浏览器内进行数据操作,也可以将结果保存为列式格式。它在表示稀疏注释数据方面尤其有效。
- 极佳的数据压缩: Parquet 可以非常有效地表示大型数据集。它在表示稀疏注释数据方面尤其有效,这正是我们注释和管理数据集所需要的。
- 体积小巧且易于部署: 在 Hyparquet-Writer 之前,从浏览器写入 parquet 文件的唯一方法是巨大的 wasm 包(duckdb、datafusion)。Hyparquet-Writer 的大小不到 100kb 的纯 JavaScript,因此可以轻松地包含在现代前端应用程序中。
HighTable:可扩展的 React 数据表格组件
HighTable 是一个基于 React 的虚拟化表格组件,用于在浏览器中查看非常大的表格。它是显示由 Hyparquet 或其他来源获取的数据的 UI 主力。
HighTable 对于可视化数据探索至关重要。在 Hyperparam 的数据集查看器中,HighTable 呈现 Parquet 文件的内容,允许您滚动浏览远远超出内存限制的数据。您还可以将 HighTable 嵌入到自定义 Web 应用程序中,在这些应用程序中需要大型结果表(例如,查看日志、遥测或任何大型表格数据),而不会失去交互性。通过仅处理可见内容,它可以弥合大数据后端和流畅前端体验之间的差距。
HighTable 提供:
- 用于大型数据的虚拟滚动: HighTable 不是呈现数千或数百万行(这会阻塞浏览器),而是仅呈现当前视口中的行,并在滚动时动态加载更多行。这可确保即使对于具有数百万个条目的数据集也能获得流畅的性能。
- 异步数据加载: HighTable 使用灵活的数据模型,可以动态获取数据。该表通过提供的函数请求给定范围(例如,100-200)的行。这意味着数据可能来自内存数组、IndexedDB 存储或通过 Hyparquet 的远程源。只要它可以检索切片,HighTable 便是不可知的。这种设计允许无限滚动浏览“任何大小”的数据。
- 丰富表格功能: 尽管专注于规模,HighTable 提供了在类似电子表格的界面中期望的便捷功能:可选的列排序、可调整的列宽和事件挂钩(例如,双击单元格)。它甚至显示每个单元格的加载占位符,以指示何时正在获取数据,从而保持响应性。
Icebird:JavaScript Apache Iceberg 表格读取器
Icebird 将 Hyperparam 的覆盖范围扩展到存储在 Apache Iceberg 格式中的数据。Iceberg 是一种流行的数据湖表格格式(通常在 Hadoop/S3 存储上使用),它在底层包含 Parquet 文件。重要的是,Iceberg 允许您有效地发展大型数据集(添加/删除行、添加列等)。Icebird 本质上是一个 JavaScript Iceberg 客户端,可以读取 Iceberg 表格元数据并检索数据文件,它构建于 Hyparquet 之上。
如果您正在使用 Data Lake/Lakehouse 架构,Icebird 使得可以检查大型 Iceberg 表格而无需大数据引擎。数据工程师可以将 Hyperparam 的查看器指向 Iceberg 表格的 S3 路径,并快速查看几行或几列以进行验证。这比启动 Spark 或 Trino 进行小型检查任务要简单得多。Icebird 将我们的_"无后端"_理念带到了另一种主要数据格式。
- Iceberg 表格访问: 给定一个指向 Iceberg 表格的指针(例如,云存储上的目录或目录条目),Icebird 可以读取表格的模式和元数据,然后使用 Hyparquet 读取构成表格的实际 parquet 文件片段。它支持 Iceberg 的功能,例如模式演变(重命名列)和位置删除,并计划根据需要涵盖更多功能。
- 时间旅行查询: Icebird 允许用户通过指定要读取的元数据版本从数据集的旧快照中检索数据(Iceberg 的一项功能)。这对于审核数据随时间的变化或在以前的数据集状态下重现实验非常有用——所有这些都来自浏览器环境。
Hyllama:Llama.cpp 模型元数据解析器
Hyllama 是 Hyperparam 套件中一个略有不同的工具——它专注于模型文件而不是数据集文件。具体来说,Hyllama 是一个 JavaScript 库,用于解析 llama.cpp .gguf
文件(一种用于 LLaMA 和相关大型语言模型权重的格式)并提取其元数据。
Hyllama 的主要用例是允许用户检查 LLM 模型的内容(架构参数、词汇量大小、层数等),甚至可能查询其列出的令牌或其他元数据 在浏览器中。例如,您可以使用 Hyllama 将 .gguf
模型文件拖放到网页上,并快速查看它具有什么架构和量化,而无需运行该模型。您可以使用 Hyllama 轻松内省模型文件或验证模型文件是否与数据集方案期望匹配。
- 高效的元数据提取: GGUF 格式的 LLM 模型文件可能达到数十 GB,这对于完全加载到内存中是不切实际的。Hyllama 旨在通过使用部分读取(例如,读取包含标头和索引的前几个 MB)仅从文件中读取元数据(和张量索引)而不加载完整权重。
- 无依赖项和 Web 友好: 与 Hyparquet 一样,Hyllama 没有依赖项,可以在 Node 和浏览器环境中运行。对于浏览器使用,它建议使用 HTTP 范围请求来仅获取模型文件所需的字节。
Hyperparam CLI:本地数据集查看器
Hyperparam CLI 将所有内容绑定到面向用户的应用程序中。它是一个命令行工具,运行时 (npx hyperparam
) 会启动一个用于数据集查看的本地 Web 应用程序。从本质上讲,这是一种在您自己的本地数据上启动 Hyperparam 浏览器 UI 的单命令方法。
- 可扩展的本地数据集查看器: 通过运行 CLI,用户可以将其指向包含数据的文件、文件夹或 URL,并打开一个交互式浏览器视图。例如,
npx hyperparam mydataset.parquet
将打开 Hyperparam Web UI 并在可滚动表格中显示该 Parquet 文件的内容。如果给出了目录,它将提供一个文件浏览器来选择数据集。在底层,CLI 使用 Node.js 来提供静态应用程序,并使用 Hyparquet/Icebird 库(通过内置 API)从本地磁盘或远程 URL 获取数据,然后在浏览器中使用 HighTable 显示它。
这些工具如何协同工作
Hyperparam 的开源工具套件是专为机器学习数据工作流程量身定制的统一生态系统的支柱,可直接在浏览器中实现交互式探索和管理。通过集成高效的浏览器内数据处理(Hyparquet 和 Icebird)、可扩展的可视化(HighTable)、直观的数据导出功能(Hyparquet-Writer)和模型元数据检查(Hyllama),我们希望表明有一种更好的方法来构建以数据为中心的 ML 工具。我们正在将这项工作作为开源发布,因为我们相信每个人都可以从拥有强大的 AI 数据工具生态系统中受益。
如果您发现这些免费的开源工具有用,请展示出来!我们喜欢 GitHub Stars ⭐
输入您的电子邮件以了解新的 Hyperparam 工具和库:
Submit ×