一行代码交互式探索您的 Hugging Face 数据集

发布于 2023 年 10 月 25 日
在 GitHub 上更新

Hugging Face 的 datasets不仅提供了对超过 7 万个公开可用数据集的访问,还为自定义数据集提供了非常方便的数据准备流水线。

Renumics Spotlight 允许您创建交互式可视化识别数据中的关键集群。因为 Spotlight 能够理解 Hugging Face 数据集中的数据语义,您只需一行代码即可开始

import datasets
from renumics import spotlight

ds = datasets.load_dataset('speech_commands', 'v0.01', split='validation')

spotlight.show(ds)

Spotlight 允许利用模型结果(如预测和嵌入)来更深入地理解数据段和模型失败模式。

ds_results = datasets.load_dataset('renumics/speech_commands-ast-finetuned-results', 'v0.01', split='validation')
ds = datasets.concatenate_datasets([ds, ds_results], axis=1)

spotlight.show(ds, dtype={'embedding': spotlight.Embedding}, layout=spotlight.layouts.debug_classification(embedding='embedding', inspect={'audio': spotlight.dtypes.audio_dtype}))

数据洞察是几乎所有机器学习开发阶段中非常重要的一项任务,但它也可能非常耗时。

“在机器学习的所有活动中,手动检查数据的价值与声望比可能是最高的。”——Greg Brockman

Spotlight 帮助您从两个维度使数据洞察更具可扩展性:建立和维护自定义数据洞察工作流,以及找到相关的待洞察数据样本和集群。在以下部分中,我们将展示一些基于 Hugging Face 数据集的示例。

Spotlight 🤝 Hugging Face 数据集

datasets 库有几个特性使其成为处理机器学习数据集的理想工具:它将表格数据(如元数据、标签)与非结构化数据(如图像、音频)存储在同一个 Arrows 表中。Datasets 还通过特征(如图像、音频)和额外的特定任务元数据来描述重要的数据语义。

Spotlight 直接在 datasets 库之上运行。这意味着无需为数据可视化和洞察复制或预处理数据集。Spotlight 将表格数据加载到内存中,以实现高效的、客户端的数据分析。内存密集型的非结构化数据样本(如音频、图像、视频)按需延迟加载。在大多数情况下,数据类型和标签映射直接从数据集中推断。在这里,我们用一行代码可视化 CIFAR-100 数据集。

ds = datasets.load_dataset('cifar100', split='test')
spotlight.show(ds)

在数据类型不明确或未指定的情况下,Spotlight API 允许手动分配它们。

label_mapping = dict(zip(ds.features['fine_label'].names, range(len(ds.features['fine_label'].names))))
spotlight.show(ds, dtype={'img': spotlight.Image, 'fine_label': spotlight.dtypes.CategoryDType(categories=label_mapping)})

利用模型结果进行数据洞察

探索原始非结构化数据集通常只能获得很少的见解。利用模型结果,如预测或嵌入,可以帮助发现关键的数据样本和集群。Spotlight 有多种可视化选项(例如相似性图、混淆矩阵),它们专门利用模型结果。

我们建议将您的预测结果直接存储在 Hugging Face 数据集中。这不仅能让您利用 datasets 库的批处理能力,还能保留标签映射。

我们可以使用 transformers来计算 CIFAR-100 图像分类问题的嵌入和预测。我们通过 pip 安装这些库。

pip install renumics-spotlight datasets transformers[torch]

现在我们可以计算数据扩充内容。

import torch
import transformers

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model_name = "Ahmed9275/Vit-Cifar100"
processor = transformers.ViTImageProcessor.from_pretrained(model_name)
cls_model = transformers.ViTForImageClassification.from_pretrained(model_name).to(device)
fe_model = transformers.ViTModel.from_pretrained(model_name).to(device)

def infer(batch):
    images = [image.convert("RGB") for image in batch]
    inputs = processor(images=images, return_tensors="pt").to(device)
    with torch.no_grad():
        outputs = cls_model(**inputs)
        probs = torch.nn.functional.softmax(outputs.logits, dim=-1).cpu().numpy()
        embeddings = fe_model(**inputs).last_hidden_state[:, 0].cpu().numpy()
    preds = probs.argmax(axis=-1)
    return {"prediction": preds, "embedding": embeddings}

features = datasets.Features({**ds.features, "prediction": ds.features["fine_label"], "embedding": datasets.Sequence(feature=datasets.Value("float32"), length=768)})
ds_enriched = ds.map(infer, input_columns="img", batched=True, batch_size=2, features=features)

如果您不想执行完整的推理过程,也可以下载 CIFAR-100 的预计算模型结果来跟随本教程。

ds_results = datasets.load_dataset('renumics/spotlight-cifar100-enrichment', split='test')
ds_enriched = datasets.concatenate_datasets([ds, ds_results], axis=1)

我们现在可以使用这些结果在 Spotlight 中交互式地探索相关的数据样本和集群。

layout = spotlight.layouts.debug_classification(label='fine_label', embedding='embedding', inspect={'img': spotlight.dtypes.image_dtype})
spotlight.show(ds_enriched, dtype={'embedding': spotlight.Embedding}, layout=layout)
CIFAR-100 model debugging layout example.

自定义数据洞察工作流

可视化布局可以在图形用户界面 (GUI) 中进行交互式更改、保存和加载:您可以选择不同的组件类型和配置。Inspector 组件允许表示多模态数据样本,包括文本、图像、音频、视频和时间序列数据。

您也可以通过 Python API 定义布局。这个选项对于构建自定义数据洞察和整理工作流特别有用,包括探索性数据分析 (EDA)、模型调试和模型监控任务。

结合数据问题组件,Python API 提供了一种很好的方式,将现有脚本(例如数据质量检查或模型监控)的结果集成到一个可扩展的数据洞察工作流中。

在 Hugging Face Hub 上使用 Spotlight

您可以直接在本地的自然语言处理 (NLP)、音频、计算机视觉 (CV) 或多模态数据集上使用 Spotlight。如果您想在 Hugging Face Hub 上展示您的数据集或模型结果,您可以使用 Hugging Face Spaces 为其启动一个 Spotlight 可视化。

我们已经为 Hub 上的许多热门 NLP、音频和 CV 数据集准备了示例空间。您可以简单地复制其中一个空间,并在 HF_DATASET 变量中指定您的数据集。

您可以选择性地选择一个包含模型结果和其它配置选项的数据集,如数据切分、子集或数据集修订版本。

Creating a new dataset visualization with Spotlight by duplicating a Hugging Face space.

下一步是什么?

使用 Spotlight,您可以创建交互式可视化并利用数据扩充来识别 Hugging Face 数据集中的关键集群。在本博客中,我们已经看到了一个音频机器学习和一个计算机视觉的例子。

您可以直接使用 Spotlight 来探索和整理您的 NLP、音频、CV 或多模态数据集。

社区

注册登录 以发表评论