tnblog
首页
视频
资源
登录

HugginFace 使用数据集(学习笔记)

2721人阅读 2023/10/20 17:23 总访问:3511373 评论:0 收藏:0 手机
分类: HuggingFace

HugginFace 使用数据集(学习笔记)

数据集工具介绍


HuggingFace 提供了统一的数据集处理工具,让不同的数据集通过统一的API处理。
访问HuggingFace官网,点击顶部的Datasets,可以看到它提供的所有数据集。


左边可以通过不同的任务类型、语言、体积许可来筛选数据集,右侧为具体的数据集列表,其中有glue、super_glue数据集,问答数据集squad,情感分类数据集imdb,纯文本数据集wikitext。
点开其中一个可以查看到其中的子集数据。

使用数据集工具

数据集加载和保存


使用HuggingFace数据集工具加载数据只需要简单的一行代码就可以进行加载了。
以加载名为lansinuote/ChnSentiCorp数据集为例。

  1. #第3章/加载数据集
  2. from datasets import load_dataset
  3. dataset = load_dataset(path='lansinuote/ChnSentiCorp')
  4. dataset

由于HuggingFace把数据集存储在谷歌云盘上,从国内加载就需要梯子,所以可以进行特殊方式下载后通过load_from_disk()函数进行本地加载。

  1. #第3章/从磁盘加载数据集
  2. from datasets import load_from_disk
  3. dataset = load_from_disk('./data/ChnSentiCorp')
  4. dataset


我们可以看到lansinuote/ChnSentiCorp分为3个部分,traintestvalidation,分别表示训练集、验证集和测试集,并且每条数据都有textlabel,分别代表文本和标签。
load_dataset()函数还有一些其他参数,可以通过下面的一个例子来举例说明。

  1. load_dataset(path='glue', name='sst2', split='train')


这里加载了glue数据集,通过name参数指定加载sst2数据子集,还通过split指定要加载train部分的。

将数据集保存到本地磁盘


加载了数据集后,可以使用save_to_disk()函数将数据集保存到本地磁盘,代码如下:

  1. dataset.save_to_disk(dataset_dict_path="./ChnSentiCorp")

数据基本操作

取出数据部分


为了便于做后续实验,首先取出train部分的数据集。

  1. dataset = dataset['train']


查看数据取样。

  1. for i in [12, 17, 20, 26, 56]:
  2. print(dataset[i])


可以看出来这是一份消费评论数据,字段text表示消费者的评论,这段lael表明这是一段好评还是差评。

数据排序


可以使用sort()函数让数据按照某个字段排序,代码如下:

  1. #第3章/排序数据
  2. #数据中的label是无序的
  3. print(dataset['label'][:10])
  4. #让数据按照label排序
  5. sorted_dataset = dataset.sort('label')
  6. print(sorted_dataset['label'][:10])
  7. print(sorted_dataset['label'][-10:])


可以看到,初始数据是乱序的,使用sort()函数后,数据按照label排列为有序的了。

打乱数据


我们还可以使用shuffle()函数再次打乱数据,代码如下:

  1. shuffled_dataset = sorted_dataset.shuffle(seed=42)
  2. shuffled_dataset['label'][:10]


可以看到再次打乱为无序。

数据抽样


可以使用select()函数从数据集中选择某些数据,得到一个新的数据集,代码如下:

  1. dataset.select([0, 10, 20, 30, 40, 50])


运行结果如下:

过滤数据


使用filter()函数可以按照自定义的规则过滤数据,代码如下:

  1. def f(data):
  2. return data['text'].startswith('非常不错')
  3. dataset.filter(f)


filter()函数接受一个函数作为参数,在该函数中确定过滤数据的条件,在上面的例子中数据过滤的条件是评价以非常不错开头,代码如下:


可以看到,满足评价以非常不错开头的数据共有13条。

训练测试集拆分


可以使用train_test_split()函数将数据集切分为训练集和测试集,代码如下:

  1. dataset.train_test_split(test_size=0.1)


参数test_size表明测试集占数据总体的比例,例子中占10%,训练集占90%。

数据分桶


可以使用shared()函数吧数据均匀地分为n部分,代码如下:

  1. dataset.shard(num_shards=4, index=0)
参数 描述
num_shards 表明要把数据均匀地分为几部分,例子中为4部分。
index 表示要取出第几份数据,例子中为取出第0


因为原数据集数据为9600条,均匀地分为4份后每一份是2400条,和上面输出的一致

重名名字段


使用rename_column()函数可以重命名字段,代码如下:

  1. dataset.rename_column('text', 'text_rename')


原始字段text现在已经被重命名为text_rename

删除字段


使用remove_columns()函数可以删除字段,代码如下:

  1. dataset.remove_columns(['text'])


可以看到text字段已经被删除了

映射函数


map()函数,可以对每一条数据进行一定的修改,代码如下:

  1. def f(data):
  2. data['text'] = 'My sentence: ' + data['text']
  3. return data
  4. maped_datatset = dataset.map(f)
  5. print(dataset['text'][20])
  6. print(maped_datatset['text'][20])


增删改查都可以。

使用批处理加速


在使用过滤和映射这一类需要使用一个函数遍历数据集的方法时,可以使用批处理减少函数的调用次数。一批次处理多个数据,代码如下:

  1. def f(data):
  2. text = data['text']
  3. text = ['My sentence: ' + i for i in text]
  4. data['text'] = text
  5. return data
  6. maped_datatset = dataset.map(function=f,
  7. batched=True,
  8. batch_size=1000,
  9. num_proc=4)
  10. print(dataset['text'][20])
  11. print(maped_datatset['text'][20])
参数 描述
batched 当为True时,表示进行批次处理。
batch_size 1000条数据为一个批次进行一次处理,这样大大提高了性能。
num_proc 表示在4条线程上执行该任务,一般也为设置为CPU核心数量。

设置数据格式


使用set_format()函数修改数据格式,代码如下:

  1. dataset.set_format(type='torch', columns=['label'], output_all_columns=True)
  2. dataset[20]
参数 描述
type 表明要修改的数据类型,常用的取值有numpy、torch、tensorflow、pandas等。
columns 要修改格式的字段
cutput_all_columns 表明是否要保留其他字段,设置为True表明要保留的。


此时字段label已经被修改为PyTorch的Tensor格式了。

将数据保存为其他格式

CSV格式


将数据集保存为CSV格式,便于分享,同时数据集工具也有加载CSV格式数据方法,代码如下:

  1. dataset = load_dataset(path='lansinuote/ChnSentiCorp', split='train')
  2. dataset.to_csv(path_or_buf='./ChnSentiCorp.csv')
  3. #加载csv格式数据
  4. csv_dataset = load_dataset(path='csv',
  5. data_files='./ChnSentiCorp.csv',
  6. split='train')
  7. csv_dataset[20]


可以看到,保存为CSV格式后再加载,多了一个Unnamed字段,在这一列中实际保存的是数据的序列,这和保存的CSV文件内容有关系。如果不想要这一列,则可以直接到CSV文件去删除1列,删除时可以使用数据集的删除列功能,在此不再叙述

保存数据为JSON格式


除了可以保存CSV格式以外还可以保存为JSON格式,方法和CSV差不多,代码如下:

  1. dataset = load_dataset(path='lansinuote/ChnSentiCorp', split='train')
  2. dataset.to_json(path_or_buf='./ChnSentiCorp.json')
  3. #加载json格式数据
  4. json_dataset = load_dataset(path='json',
  5. data_files='./ChnSentiCorp.json',
  6. split='train')
  7. json_dataset[20]


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

风清月

2019/1/27 23:18:49

大佬大佬!

风清月

2019/1/27 23:19:58

厉害了!哈哈,期待下一篇!

青春年华

2020/3/7 11:50:05

HugginFace 初探

HugginFace 初探[TOC] 安装环境python环境是3.6。import sys sys.version 安装torch,简单起见,避免环境问题,并且计...

HugginFace 使用编码工具(学习笔记)

HugginFace 使用编码工具(学习笔记)[TOC] 安装环境# 我这里的python是3.11 %pip install -q transformers==4.18 datasets...

HugginFace 使用评价指标工具(学习笔记)

HugginFace 使用评价指标工具(学习笔记)[TOC] 评价指标工具介绍在训练和测试一个模型时往往需要计算不同的评价指标,如正...

HugginFace 使用管道工具(学习笔记)

HugginFace 使用管道工具(学习笔记)[TOC] 管道工具介绍HuggingFace 有一个巨大的模型库,其中一些是已经非常成熟的经典模...

HugginFace 使用训练工具(学习笔记)

HugginFace 使用训练工具(学习笔记)[TOC] 训练工具介绍HuggingFace提供了巨大的模型库,但我们往往还需要对特定的数据集进...

HugginFace 中文情感分类(学习笔记)

HugginFace 中文情感分类(学习笔记)[TOC] 数据集介绍本章使用的是lansinuote/ChnSentiCorp数据集,这是一个情感分类数据集...

HugginFace 中文填空(学习笔记)

HugginFace 中文填空(学习笔记)[TOC] 数据集介绍本章使用的仍然是情感分类数据集,每条包括一句购物评价一集以及是不是好...

HugginFace 中文数据关系推断(学习笔记)

HugginFace 中文数据关系推断(学习笔记)[TOC] 实现代码安装包加载的环境可以通过如下命令进行安装。%pip install -q trans...

HugginFace 中文命名实体识别(学习笔记)

HugginFace 中文命名实体识别(学习笔记)[TOC] 任务简介简单来说就是的识别人名、机构名、地名。数据集的介绍本章所使用的...
这一世以无限游戏为使命!
排名
82
文章
2
粉丝
1
评论
3
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术