huggingface.datasets使用说明

news2025/1/17 6:09:14

诸神缄默不语-个人CSDN博文目录

datasets包的官方GitHub项目:huggingface/datasets: 🤗 The largest hub of ready-to-use datasets for ML models with fast, easy-to-use and efficient data manipulation tools

datasets包可以加载很多公开数据集,并对其进行预处理。
datasets包的建构参考了TFDS项目:tensorflow/datasets: TFDS is a collection of datasets ready to use with TensorFlow, Jax, …

这一部分介绍本来包含在了用huggingface.transformers.AutoModelForSequenceClassification在文本分类任务上微调预训练模型这篇博文中,为清晰起见,我将其单拎出来。但对于datasets的具体应用仍然可以参考这篇博文和我写的其他介绍transformers的使用的博文。

文章目录

  • 1. datasets包的安装
  • 2. datasets简易入门
  • 3. 数据集的加载和预处理示例:分类数据集Yelp Reviews
  • 4. 将自定义数据集转换为datasets的数据集格式
  • 5. 常见bug

1. datasets包的安装

如果使用anaconda作为包管理环境,并已经使用pip安装的transformers包,则可以直接使用pip来安装datasets:

pip install datasets

其他安装方式可参考datasets文档:https://huggingface.co/docs/datasets/installation

2. datasets简易入门

本部分使用的函数参考官方GitHub项目的README文件。

  1. 所有可用的数据集:all_available_datasets=datasets.list_datasets()
    列出前5条:all_available_datasets[:5]
    输出:['assin', 'ar_res_reviews', 'ambig_qa', 'bianet', 'ag_news']
  2. 加载数据集:datasets.load_dataset(dataset_name, **kwargs)
    以本教程所使用的"yelp_review_full"数据集为例:dataset=datasets.load_dataset("yelp_review_full")
  3. 所有可用的指标:datasets.list_metrics()
  4. 加载指标:datasets.load_metric(metric_name, **kwargs)
  5. 查看数据集:在这里插入图片描述
  6. 获取数据集中的样本:dataset['train'][123456]在这里插入图片描述
  7. 查看数据词典:dataset['train'].features在这里插入图片描述

3. 数据集的加载和预处理示例:分类数据集Yelp Reviews

数据集在huggingface上的官方网址:yelp_review_full · Datasets at Hugging Face

这是个用于英文短文本分类(情感分类)任务的数据集,是Yelp(美国点评网站)上的评论(text)和对应的评分星级(1-5星)(label)。
提取自Yelp Dataset Challenge 2015数据集。出自该论文:(2015 NIPS) Character-level Convolutional Networks for Text Classification

加载并查看数据集:

from datasets import load_dataset

dataset = load_dataset("yelp_review_full")
dataset["train"][100]

输出:

{'label': 0,
 'text': 'My expectations for McDonalds are t rarely high. But for one to still fail so spectacularly...that takes something special!\\nThe cashier took my friends\'s order, then promptly ignored me. I had to force myself in front of a cashier who opened his register to wait on the person BEHIND me. I waited over five minutes for a gigantic order that included precisely one kid\'s meal. After watching two people who ordered after me be handed their food, I asked where mine was. The manager started yelling at the cashiers for \\"serving off their orders\\" when they didn\'t have their food. But neither cashier was anywhere near those controls, and the manager was the one serving food to customers and clearing the boards.\\nThe manager was rude when giving me my order. She didn\'t make sure that I had everything ON MY RECEIPT, and never even had the decency to apologize that I felt I was getting poor service.\\nI\'ve eaten at various McDonalds restaurants for over 30 years. I\'ve worked at more than one location. I expect bad days, bad moods, and the occasional mistake. But I have yet to have a decent experience at this store. It will remain a place I avoid unless someone in my party needs to avoid illness from low blood sugar. Perhaps I should go back to the racially biased service of Steak n Shake instead!'}

用datasets的map函数(文档:https://huggingface.co/docs/datasets/process.html#map)将文本格式的原数据text列值经tokenize后转换为模型可以读取的格式(tokenizer的输出):

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("mypath/bert-base-cased")

def tokenize_function(examples):
    return tokenizer(examples["text"],padding="max_length",truncation=True,max_length=512)

tokenized_datasets = dataset.map(tokenize_function, batched=True)

输出:在这里插入图片描述

转换后的数据集:
在这里插入图片描述



注意这里原教程中tokenizer没有max_length参数,但是这样的话,这一部分就会输出警告:

Asking to pad to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no padding.
Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.

后面训练时就会报错:

Traceback (most recent call last):
  File "mypath/huggingfacedatasets1.py", line 47, in <module>
    trainer.train()
  File "myenv/lib/python3.8/site-packages/transformers/trainer.py", line 1396, in train
    for step, inputs in enumerate(epoch_iterator):
  File "myenv/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 517, in __next__
    data = self._next_data()
  File "myenv/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 557, in _next_data
    data = self._dataset_fetcher.fetch(index)  # may raise StopIteration
  File "myenv/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 47, in fetch
    return self.collate_fn(data)
  File "myenv/lib/python3.8/site-packages/transformers/data/data_collator.py", line 66, in default_data_collator
    return torch_default_data_collator(features)
  File "myenv/lib/python3.8/site-packages/transformers/data/data_collator.py", line 130, in torch_default_data_collator
    batch[k] = torch.tensor([f[k] for f in features])
ValueError: expected sequence of length 72 at dim 1 (got 118)

这一bug的产生就是由于同一batch的sequence不同长。所以要加max_length入参。
但是奇怪的是,我用colab试了一遍,就发现可以直接运行……但是我没找到模型的max_length本身是定义在哪里的?
使用512是因为在colab运行时看了一下len(tokenized_datasets['train'][0]['input_ids']),发现是512,说明默认定义的max_length值反正是512。至于为什么我这个还需要手动定义,鬼知道。
我一开始猜测是因为我使用的pretrained_model_name_or_path参数是本地地址,而不是这个里面的某一个键:
在这里插入图片描述
测试证明似乎不是,see:
手动输入max_length入参的情况:
在这里插入图片描述
不手动输入max_length入参的情况:
在这里插入图片描述
修改模型max_model_input_sizes,并不手动输入max_length入参的情况:
在这里插入图片描述
那我就特么的纳闷这个属性是拿来干嘛的了……
我用dir(tokenizer)硬找到了另一个看起来也很符合要求的属性名model_max_length,经测试发现这个应该才真的是:
在这里插入图片描述
但是这个实验结果没有在整个的实验上重做,因为我觉得应该没有必要,因为这两个情况是一样的(可以参考我之前撰写的博文huggingface.transformers术语表_诸神缄默不语的博客-CSDN博客2.2节,tokenizer(batch_sentences, padding='max_length', truncation=True, max_length=512)意为所有sequence都固定为512长度,tokenizer(batch_sentences, padding='max_length', truncation=True)意为所有sequence都固定为模型max_length长度,当模型max_length就是512时,两种情况等价)。事实上我觉得手动加max_length入参可能更好,更适宜于控制代码。


为了加快示例代码的训练速度,我们抽样出一个较小的数据集来做示例:

small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))

4. 将自定义数据集转换为datasets的数据集格式

更多细节可参考datasets官方文档https://huggingface.co/docs/datasets/v2.0.0/en/loading

(本文专门作此条撰写,主要是为了以后用Trainer时将自定义数据集转为datasets.Dataset,会比较方便(Trainer的*_dataset入参可以接受datasets.Dataset或torch的数据集,如果是datasets.Dataset的话看起来应该会按列名自动输入模型所需的入参,而且看本教程示例是可以直接用list格式的。Trainer会自动移除其他列(后面训练时输出会显示这一部分内容)。如果是torch数据集我咋知道它要输入啥,有点麻烦。所以直接转换成datasets.Dataset就不用麻烦了)

本文直接以in-memory的dict对象格式(别的in-memory数据类似。暂时没有考虑大到一次加载不到内存的情况,等以后遇到这种情况了再解决)的yelp_review_full数据集为例(Dataset.load_from_dict()文档:https://huggingface.co/docs/datasets/v2.0.0/en/package_reference/main_classes#datasets.Dataset.from_dict):

①将上文得到的small_train_dataset转换为dict对象(键是列名,值是列值(list)),作为示例数据:

example_dict={'label':small_train_dataset['label'],'text':small_train_dataset['text']}

②将这个字典转为Dataset:

example_dataset=datasets.Dataset.from_dict(example_dict)
example_dataset
Dataset({
    features: ['label', 'text'],
    num_rows: 1000
})

DatasetDict本质上就相当于一个Dataset的字典,对DatasetDict的操作应该就相当于对其所有值做原地操作。
将Dataset组合为DatasetDict的方法:

datasets={}
datasets['train']=convert2Dataset(train_data)
datasets['valid']=convert2Dataset(valid_data)
datasets['test']=convert2Dataset(test_data)
datasets=DatasetDict(datasets)

5. 常见bug

大陆地区无法加载数据集和指标的解决方案可参考我之前撰写的博文:huggingface.datasets无法加载数据集的解决方案_诸神缄默不语的博客-CSDN博客

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

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

相关文章

免费SSL证书和付费SSL证书的区别

免费证书和付费证书区别还是比较大的&#xff0c;相对来说免费证书适用的环境会单一一些&#xff0c;一般使用免费证书的环境都是个人门户网站或者是小微企业的门户官网&#xff08;无隐私信息&#xff09;。 受免费证书安全等级以及安全性的限制影响&#xff0c;如果是为了自…

Python 语法高亮显示和格式化库之pygments使用详解

概要 在软件开发和编程领域,代码是我们的主要表达方式。因此,对于代码的可读性和可理解性至关重要。为了提高代码的可读性,代码语法高亮和格式化工具变得至关重要。在Python世界中,Pygments是一个强大的工具,它可以帮助开发人员高亮显示和格式化他们的代码。本文将深入探…

selenium4的相对定位

selenium4相对定位 Selenium 4新增了相对定位器&#xff0c;能帮助用户查找元素附近的其他元素。可用的相对定位器有above、below、toLeftOf、toRightOf、near。在Selenium 4中&#xff0c;find_element方法能够接受一个新方法withTagName&#xff0c;它将返回一个RelativeLoca…

【IEEE会议征稿通知】第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024)

【IEEE会议】第九届信息科学、计算机技术与交通运输国际学术会议&#xff08;ISCTT 2024&#xff09; 2024 9th International Conference on Information Science, Computer Technology and Transportation 第九届信息科学、计算机技术与交通运输国际学术会议&#xff08;ISC…

七彩虹八渐变 外贸建站公司wordpress模板

进出口水果wordpress外贸模板 漂亮水果wordpress外贸模板&#xff0c;做水果进出品生意的外贸公司自建站官网模板。 https://www.jianzhanpress.com/?p3516 玩具wordpress外贸模板 简洁玩具wordpress外贸模板&#xff0c;适合做跨境电商外贸公司使用的wordpres外贸s网站主题…

JVM运行时数据区——对象的实例化内存布局与访问定位

文章目录 1、对象的实例化1.1、创建对象的方式1.2、创建对象的步骤 2、对象的内存布局3、对象的访问定位3.1、对象访问的定位方式3.2、使用句柄访问3.3、使用指针访问 4、小结 平时大家经常使用new关键字来创建对象&#xff0c;那么我们创建对象的时候&#xff0c;怎么去和运行…

前端语义化标签及实例

常用的语义化标签的以下几种&#xff1a; header、nav、article、section、aside、footer、abbr、dfn、address、del、ins、pre、meter、progress <header> 定义文章的页眉信息 <header><h1>我的网站标题</h1><nav><ul><li><a …

环保新征程:能源结构调整与臭氧污染治理|中联环保圈

新年的钟声刚刚敲响&#xff0c;全国各地的两会会议便如火如荼地展开。随着会议的密集召开&#xff0c;各地的2024年政府工作报告也相继出炉。截至2月19日&#xff0c;全国共有27个省&#xff08;自治区、直辖市&#xff09;发布了2024年政府工作报告。各地根据自身经济发展潜力…

mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示

文章目录 问题描述解决方案 问题描述 如下如所示&#xff1a; 表一&#xff1a;wechat_dynamically_config表&#xff0c;重点字段&#xff1a;wechat_object 表二&#xff1a;wechat_object表&#xff0c;重点字段&#xff1a;wxid 需求&#xff1a;根据wechat_dynamically_…

Flink StreamGraph生成过程

文章目录 概要SteramGraph 核心对象SteramGraph 生成过程 概要 在 Flink 中&#xff0c;StreamGraph 是数据流的逻辑表示&#xff0c;它描述了如何在 Flink 作业中执行数据流转换。StreamGraph 是 Flink 运行时生成执行计划的基础。 使用DataStream API开发的应用程序&#x…

【Selenium】selenium介绍及工作原理

一、Selenium介绍 用于Web应用程序测试的工具&#xff0c;Selenium是开源并且免费的&#xff0c;覆盖IE、Chrome、FireFox、Safari等主流浏览器&#xff0c;通过在不同浏览器中运行自动化测试。支持Java、Python、Net、Perl等编程语言进行自动化测试脚本编写。 官网地址&…

ROS从入门到精通4-2:Docker安装ROS、可视化仿真与终端复用

目录 0 专栏介绍1 Docker安装ROS2 Docker可视化仿真2.1 显示配置2.2 启动容器 3 终端复用工具3.1 session操作3.2 window操作3.3 pane操作3.4 其他操作 0 专栏介绍 本专栏旨在通过对ROS的系统学习&#xff0c;掌握ROS底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS…

Outlook邮箱后缀如何修改?怎么添加后缀?

Outlook邮箱后缀是什么&#xff1f;Outlook邮箱后缀可以改吗&#xff1f; Outlook邮箱广泛应用于企业和个人用户之间。在使用过程中&#xff0c;有时我们可能会因为某些原因需要修改Outlook邮箱后缀。那么&#xff0c;Outlook邮箱后缀如何修改呢&#xff1f;下面&#xff0c;A…

应用程序并行配置不正确怎么办?

当出现应用程序的并行配置不正确的问题时&#xff0c;通常也无法打开目标应用程序了&#xff0c;应该如何解决此问题呢&#xff1f;下面我们一起来了解一下。 1、重装出现问题的应用 如果是某个应用程序出现问题&#xff0c;那么卸载它再进行重装是很好的方法。 具体步骤&…

手写分布式配置中心(三)增加实时刷新功能(短轮询)

要实现配置自动实时刷新&#xff0c;需要改造之前的代码。代码在https://gitee.com/summer-cat001/config-center​​​​​​​ 服务端改造 服务端增加一个版本号version&#xff0c;新增配置的时候为1&#xff0c;每次更新配置就加1。 Overridepublic long insertConfigDO(…

技术指标和振荡器大全(二)

原文&#xff1a;stockcharts.com/school/doku.php?idchart_school:technical_indicators 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 成交量加权平均价格&#xff08;VWAP&#xff09; 目录 成交量加权平均价格&#xff08;VWAP&#xff09; 介绍 Tick 与 Minu…

项目中spring security与jwt.腾讯面试分享

写这篇文章是为了记录我面试pcg时平时没有留意或者钻研的地方。 面试是根据项目问的问题&#xff1a; 为什么采用jwt存储token&#xff1f; 我的项目是微服务项目&#xff0c;里面部署了资源服务和认证服务&#xff0c;这里选择jwt作为token一方面是可以存储用户的信息&#…

【DPDK】基于dpdk实现用户态UDP网络协议栈

文章目录 一.背景及导言二.协议栈架构设计1. 数据包接收和发送引擎2. 协议解析3. 数据包处理逻辑 三.网络函数编写1.socket2.bind3.recvfrom4.sendto5.close 四.总结 一.背景及导言 在当今数字化的世界中&#xff0c;网络通信的高性能和低延迟对于许多应用至关重要。而用户态网…

C++指针(四)

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 前言 相关文章&#xff1a;C指针&#xff08;一&#xff09;、C指针&#xff08;二&#xff09;、C指针&#xff08;三&#xff09; 本篇博客是介绍函数指针、函数指针数组、回调函数、指针函数的。 点赞破六…

文件批量重命名神器:按长度与区间智能管理,让文件整理更高效!

在数字化时代&#xff0c;电脑中堆积如山的文件常常让我们头疼不已。命名不规范、杂乱无章的文件不仅占用了大量的存储空间&#xff0c;更在关键时刻让我们难以迅速找到所需内容。现在&#xff0c;有了这款文件批量改名神器&#xff0c;一切烦恼将烟消云散&#xff01; 首先&a…