Databend x HuggingFace,海量数据,随心分析

作者:尚卓燃(PsiACE)

澳门科技大学在读硕士,Databend 研发工程师实习生

Apache OpenDAL(Incubating) Committer

https://github.com/PsiACE

HuggingFace 是目前全球最流行的 AI 社区,推动数据科学家和企业在模型、数据集和应用等诸多方面进行创新与合作。HuggingFace 上存在各种各样的数据集,不光可以用作学习和练习的样本,也可以作为企业模型数据来源的基石。

为了更好发挥数据集的作用,往往需要对数据集中的原始数据进行清洗,并且归档在数据湖中提供统一的访问入口。Databend 围绕 ETL/ELT 为中心的工作流进行设计,在载入同时即可直接对数据进行清洗、转化、合并等操作;具备丰富的结构化与半结构化数据类型,能够直接查询和分析多种格式的原始数据;企业版还支持虚拟列、计算列等高级特性,确保数据始终就绪。

在这篇文章中,我们将会展示如何利用 Databend 轻松访问 HuggingFace 上托管的数据集,并且使用 SQL 进行简单高效的分析和处理。此外,示例中还包含一个使用 SQL 实现的白盒模型,展示如何在数据仓库中进行类别预测,并验证模型精度。

访问 HuggingFace 数据集

HuggingFace 提供公开可访问的 REST API ,并且支持在上传时将数据集文件自动转化为 Parquet ,使其能够与数据库和数据分析工具轻松集成。

其数据集的页面如下所示,透过 Dataset card 可以直观了解数据的相关信息并获得预览,而 Files and Versions 页面将会有助于了解目录结构和修订版本等信息。

Databend 提供多种与 HuggingFace 集成的方式,在接下来的部分,我们将会以 fka/awesome-chatgpt-prompts 作为例子,说明如何使用 Databend 访问 HuggingFace 数据集。

fka/awesome-chatgpt-prompts 是一个流行的 GPT Prompts 数据集,包含 153 条高质量的 Prompts 及其对应的场景。

外部 Stage/Location

现在很多数据库支持使用 HTTPS 协议直接访问远端的数据文件,这种模式不光适用于 HuggingFace ,也可以与其他提供 HTTPS 访问的文件服务集成。但是,直接使用远程 URL 访问存在一些弊端,比如遇到预期外的响应、错误的转义和编解码、为了定位文件需要进行复杂的 JSON 解析。

Databend 除了支持上述方式之外,还可以直接将 HuggingFace 文件系统作为外部 Location 访问或者挂载为外部 Stage,能够有效避免访问问题,轻松处理数据查询。

对于 HuggingFace ,其适用的 externalLocation 参数如下:

externalLocation ::="hf://<repo_id>[<path>]"CONNECTION = (<connection_parameters>)

URI格式:hf://{repo_id}/path/to/file,其中repo_id 类似 fka/awesome-chatgpt-prompts 。

支持的配置包括:

  • repo_type: HuggingFace 仓库类型,默认为 dataset,可用选项有 datasetmodel 。
  • revision: HuggingFace 修订版本,默认为 main。可以是仓库中的分支、标签或提交。
  • token: HuggingFace 的 API 令牌。
以外部 Location 的形式查询原始 CSV 数据文件

下面示例展示了如何使用 Databend 直接查询 fka/awesome-chatgpt-prompts 的原始 CSV 数据文件,并列出其中 CSV 文件第一列的 5 条数据。

SELECT $1 FROM 'hf://fka/awesome-chatgpt-prompts/' (PATTERN => '.*csv' FILE_FORMAT => 'CSV') LIMIT 5;

以外部 Stage 的形式查询转化的 Parquet 数据文件

前面提到 HuggingFace 提供转化后的 Parquet 文件,而 Databend 也支持以外部 Stage 形式挂载 HuggingFace 文件系统,下面的示例展示了其用法:

创建 Stage

对于本示例,转化后的文件位于 refs%2Fconvert%2Fparquet 这个分支的 /default/train/ PATH 下,我们可以直接挂载这个路径。

CREATE STAGE IF NOT EXISTS stage_huggingface_fka_prompts url = 'hf://fka/awesome-chatgpt-prompts/default/train/' connection = (revision = 'refs%2Fconvert%2Fparquet');

列出对应文件

可以利用 PATTERN 列出 Stage 中符合特定模式的文件名,方便查询和分析。

LIST @stage_huggingface_fka_prompts PATTERN = '.*parquet';

查询数据

由于此前已经从 CSV 文件中获取了文件的信息,在查询 Parquet 文件时候,我们可以直接选取其中的列,考虑到 prompt 在终端中不方便全部展示,这里截断为 80 个字符。

SELECT act, left(prompt, 80) FROM @stage_huggingface_fka_prompts/0000.parquet LIMIT 5;

使用 SQL  数据科学

上面介绍了如何对位于 HuggingFace 的远程数据集进行简单查询,这一节中我们来看一个具体的案例,探索使用 SQL 的数据科学。

为了方便理解,我们选取数据科学入门常用的鸢尾花分类数据集(iris)作为示例。Iris 数据集出现在 R.A. Fisher 1936年的经典论文 The Use of Multiple Measurements in Taxonomic Problems ,也可以在 UCI 机器学习知识库中找到,非常适合演示简单的分类模型。

本文中使用的 HuggingFace 数据集位于 https://huggingface.co/datasets/scikit-learn/iris 。

数据挂载

我们将会将数据集挂载为 Databend 的外部 Stage :

CREATE STAGE IF NOT EXISTS stage_iris url = 'hf://scikit-learn/iris/default/train/' connection = (revision = 'refs%2Fconvert%2Fparquet');LIST @stage_iris PATTERN = '.*parquet';SELECT * FROM @stage_iris/0000.parquet LIMIT 5;

数据清洗

外部 Stage 中的数据相当于是原始数据,为了满足数据规范和使用需要,可以在导入时进行清洗,对于 Iris 数据集,典型的清洗操作包括:

  • 移除 id 列。
  • 将 species 列转换成类别标签,即整数形式。
  • 将特征列从 float64 转换成 float32 。
  • 将特征列重命名为蛇形命名法(snake case)。

Databend 中可以利用 COPY INTO 语句在载入时完成数据清洗。

创建对应的表

执行下述语句,可以在 Databend 中创建符合数据规范的表。

CREATE TABLE iris (sepal_length FLOAT,sepal_width FLOAT,petal_length FLOAT,petal_width FLOAT,species INT
);

使用 COPY INTO 导入数据

执行下述语句,可以在导入数据的同时,一步到位完成数据清洗工作。

COPY INTO iris
FROM (SELECT to_float32(t.sepallengthcm),to_float32(t.sepalwidthcm), to_float32(t.petallengthcm),to_float32(t.petalwidthcm),CASEWHEN species = 'Iris-setosa' THEN 1WHEN species = 'Iris-versicolor' THEN 2WHEN species = 'Iris-virginica' THEN 3ELSE NULLEND AS speciesFROM @stage_iris t
)
FILE_FORMAT = (TYPE = PARQUET)
PATTERN = '.*parquet';

基本统计

执行下述语句,我们可以得到清洗后数据中,不同类别的数目各有多少。

SELECT species, COUNT(*) AS count
FROM iris
GROUP BY species;

基本分析

执行下述语句,我们可以得到每种鸢尾花的平均萼片长度:

SELECT species, AVG(sepal_length) as avg_sepal_length
FROM iris
GROUP BY species;

使用 SQL 预测鸢尾花类型

利用 SQL 表达简单的白盒模型,能够直观感受到模型的预测标准,并且省去与模型服务进行交互的步骤。

下面的示例仅供演示使用,并不符合严谨的训练、验证、应用的数据科学流程。

在数据科学家利用数据进行分析之后,我们可以得到一些可以量化的分类依据,结合 CASE WHEN 语句,可以使用 SQL 对简单的模型进行表达。

SELECT sepal_length, sepal_width, petal_length, petal_width, species, CASE WHEN petal_width < 0.75 THEN 1 WHEN petal_width >= 0.75 AND petal_width < 1.35 THEN 2 WHEN petal_width >= 0.75 AND petal_width < 1.75 AND petal_width >= 1.35 AND sepal_width < 2.65 THEN 3 WHEN petal_width >= 0.75 AND petal_width < 1.75 AND petal_width >= 1.35 AND sepal_width >= 2.65 THEN 2 WHEN petal_width >= 0.75 AND petal_width >= 1.75 THEN 3 END AS prediction 
FROM iris;

上述 SQL 将会在选中的数据后附加一个预测列,展示预测的类别。

由于我们的鸢尾花数据集本身是具有类别的,所以可以使用 SQL 根据预测结果进一步计算模型在数据集上的精度:

SELECTCOUNT(*) AS total_count,SUM(CASE WHEN subquery.species = subquery.prediction THEN 1 ELSE 0 END) AS correct_count,SUM(CASE WHEN subquery.species <> subquery.prediction THEN 1 ELSE 0 END) AS incorrect_count,SUM(CASE WHEN subquery.species = subquery.prediction THEN 1 ELSE 0 END) / COUNT(*) AS accuracy
FROM(SELECTsepal_length,sepal_width,petal_length,petal_width,species,CASEWHEN petal_width < 0.75 THEN 1WHEN petal_width >= 0.75 AND petal_width < 1.35 THEN 2WHEN petal_width >= 0.75 AND petal_width < 1.75 AND petal_width >= 1.35 AND sepal_width < 2.65 THEN 3WHEN petal_width >= 0.75 AND petal_width < 1.75 AND petal_width >= 1.35 AND sepal_width >= 2.65 THEN 2WHEN petal_width >= 0.75 AND petal_width >= 1.75 THEN 3END AS predictionFROMiris) AS subquery;

总结

在这篇文章中,我们展示了如何使用 Databend 直接访问和查询 HuggingFace 数据集。并且展示了如何使用 SQL 对数据进行预处理,使其符合数据规范。此外,利用 CASE WHEN 语句,我们可以轻松表达简单的模型,在 SQL 中完成对 Iris 数据集的预测任务,并且进行精度统计。

本文涉及的所有操作均可以在 Databend Cloud(海外版)上直接体验。如果你对使用 Databend 进行数据科学分析感兴趣,也欢迎使用 Databend Cloud 上就绪的计算集群进行一步探索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Numpy的学习 第一课 了解以及使用

1.输入模式 1.编辑模式 绿色2.命令模式 蓝色 2.运行 直接输入jupyter notebook 3.文档注释 查看函数帮助文档命令 help(函数) 单问号与多问号 单问号显示文档 多问号显示文档代码 3.shifttab 显示参数 4.运行外部文件 %run 路径,可绝对可相对 这里运行了就相当于方法了,或者…

VRPSolverEasy:支持VRP问题快速建模的精确算法Python包

文章目录 前言一步步安装免费版主要模块介绍1. depot point2. customer point3. links4. vehicle type VRPTW 算例数据说明模型建立输出求解状态及结果 前言 VRPSolverEasy 是用于车辆路径问题&#xff08;VRP&#xff09;的最先进的分支切割和定价算法求解器1&#xff0c;它的…

某国产沙盒游戏的启动器逆向

游戏近期改变了登录方式&#xff0c;于是把之前的研究成果分享一下研究仅供学习交流&#xff0c;如有侵权请联系删除 抓包 启动启动器&#xff0c;输入账号密码&#xff0c;点击登录&#xff0c;抓包得到一些信息 接口 1 https://wskacchm.mini1.cn:14100/login/auth_secur…

DataFrame的基本使用--学习笔记

1&#xff0c;DataFrame的基本使用 DSL方法–DataFrame方法 其中包括的方法有&#xff1a;select(),selectExpr(),groupby()/groupBy() where ,orderBy(),sort(),limit(),withColumn(), from pyspark.sql import SparkSession#创建ss对象ss SparkSession.builder.getOrCreat…

命令行参数环境变量和进程空间地址

文章目录 命令行参数环境变量进程地址空间 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 命令行参数 什么是命令行参数&#xff1f; 我…

【第二十二节】变量与运算符-位运算符

运算符运算<<左移>>右移>>>无符号右移&与运算|或运算^异或运算~取反运算 位运算符详细信息 <<空位补0&#xff0c;被遗弃的高位丢弃&#xff0c;空缺位补0>>被移位的二进制最高位为0&#xff0c;右移后&#xff0c;空缺位补0&#xff0…

Fine-tuning:个性化AI的妙术

在本篇文章中,我们将深入探讨Fine-tuning的概念、原理以及如何在实际项目中运用它,以此为初学者提供一份入门级的指南。 一、什么是大模型 ChatGPT大模型今年可谓是大火,在正式介绍大模型微调技术之前,为了方便大家理解,我们先对大模型做一个直观的抽象。 本质上,现在…

存储任意类型

code /* * c17 std::any */#include <cstdint> #include <cstring> #include <cstdlib> #include <iostream> #include <thread> #include <chrono>namespace lxz {// T不为指针时 template<typename T> struct Data {Data(): data…

运用分布式锁 redisson

导入依赖 根据springboot版本不同自行选择版本 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.15.3</version> </dependency> 创建客户端 Beanpublic R…

面试的忌讳,你中了几枪?

面试是职场旅程中的一个重要环节&#xff0c;它不仅是求职者展示自己的一个舞台&#xff0c;也是企业寻找合适人才的一个过程。在这个过程中&#xff0c;有几个常见的误区需要特别注意。 夜郎自大 很多仗着自己有几年的工作经验&#xff0c;总觉得自己技术牛逼&#xff0c;面…

QT第六天

要求&#xff1a;使用QT绘图&#xff0c;完成仪表盘绘制&#xff0c;如下图。 素材 运行效果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen>QT_BEGIN_NAMESPACE name…

网络端口映射和端口转发的区别和联系

目 录 一、端口映射技术 1.1 原理 1.2 应用场景 1、远程访问 2、游戏主机 3、文件共享 4、监控视频共享 二、端口转发技术 2.1 原理 2.2 应用场景 1、网络负载均衡 2、网络安全 3、网络代理 三、端口映射和转发的实现方法 3.1 路由器配置 3.2 网络防火墙 …

跨平台兼容,无限可能:Apple Remote Desktop for Mac让远程控制更简单

Apple Remote Desktop for Mac是一款远程桌面管理软件&#xff0c;提供了一系列强大的功能&#xff0c;让用户可以轻松地管理和控制远程计算机。以下是该软件的一些主要功能和特点&#xff1a; 实时远程访问和控制&#xff1a;使用Apple Remote Desktop&#xff0c;用户可以在…

跟着pink老师前端入门教程-day05

七、CSS的引入方式 根据CSS样式书写的位置&#xff08;或者引入的方式&#xff09;&#xff0c;CSS样式表可以分为三大类 1. 行内样式表&#xff08;行内式&#xff09; 内部样式表&#xff08;内嵌样式表&#xff09;是写到HTML页面内部&#xff0c;将所有的CSS代码抽取出…

【Proteus仿真】【Arduino单片机】智能助眠机系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用蜂鸣器闹铃模块、LCD1602显示模块、心率血氧模块、ADC模块、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示传感器采…

HackTheBox - Medium - Linux - Mentor

Mentor Mentor 是一台中等难度的 Linux 机器&#xff0c;其路径包括在到达 root 之前在四个不同的用户之间切换。使用可暴力破解的社区字符串扫描“SNMP”服务后&#xff0c;会发现用于“API”端点的明文凭据&#xff0c;该端点被证明容易受到盲目远程代码执行的影响&#xff…

2. 分享三篇早期的FPGA 布局布线论文

1. PathFinder:一种基于协商和性能驱动的FPGA布线器 Larry MCMURCHIE, Carl EBELING. PathFinder: A Negotiation-Based Performance-Driven Router for FPGAs, February 1996[J/OL]. February 1996 针对FPGA布线中存在的布线性能与可布通性之间的矛盾&#xff0c;该文提出了…

JAVA代码学习(中)

2023年将会持续于B站、CSDN等各大平台更新&#xff0c;可加入粉丝群与博主交流:838681355&#xff0c;为了老板大G共同努力。 【商务合作请私信或进群联系群主】 四、继承、多态 继承机制的使用可以复用一些定义好的类&#xff0c;减少重复代码的编写。多态机制可以动态调整对…

2024年1月18日Arxiv最热NLP大模型论文:Large Language Models Are Neurosymbolic Reasoners

大语言模型化身符号逻辑大师&#xff0c;AAAI 2024见证文本游戏新纪元 引言&#xff1a;文本游戏中的符号推理挑战 在人工智能的众多应用场景中&#xff0c;符号推理能力的重要性不言而喻。符号推理涉及对符号和逻辑规则的理解与应用&#xff0c;这对于处理现实世界中的符号性…

如何实现无公网ip远程访问内网本地BUG管理服务【内网穿透】

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…