首页 > 其他分享 >datasets(HuggingFace)学习笔记

datasets(HuggingFace)学习笔记

时间:2024-07-23 09:33:44浏览次数:8  
标签:datasets HuggingFace 笔记 Dataset json dict dataset data ds

一、概述

(1)datasets 使用 Apache Arrow 格式,使得加载数据集没有内存限制
(2)datasets 的重要模块:

  • load_dataset:用于加载原始数据文件
  • load_from_disk:用于加载Arrow数据文件
  • DatasetDict:用于操作多个数据集,保存、加载、处理等
  • Dataset:用于操作单个数据集,保存、加载、处理等

二、数据加载

2.1 load_dataset

(1)本地加载 json 等原始数据文件

from datasets import load_dataset 

# 加载单个文件
# ds_dict 为 DatasetDict
ds_dict = load_dataset("csv", data_files="my_file.csv") 
ds_dict = load_dataset("text", data_files="my_file.txt") 
ds_dict = load_dataset("json", data_files="my_file.jsonl") 
ds_dict = load_dataset("pandas", data_files="my_dataframe.pkl") 

# 加载多个文件
ds_dict = load_dataset('text', data_files={'train': ['my_text_1.txt', 'my_text_2.txt'], 'test': 'my_test_file.txt'})

# 加载时,指定 key 值,即split名称
ds_dict = load_dataset("json", data_files={"demo":"./data/SQuAD_it-train.json"}, field="data")  # field:数据集在json文件的'data'字段中
ds_dict = load_dataset("json", data_files="./data/SQuAD_it-train.json", field="data")  # field:数据集在json文件的'data'字段中

(2)远程加载 HuggingFace 中的原始数据文件

from datasets import load_dataset 
ds_dict = load_dataset('cail2018')  # cail2018 是某个司法比赛数据集

(3)远程加载 url 指定的原始数据文件

from datasets import load_dataset 

url = "https://github.com/crux82/squad-it/raw/master/"
data_files = {
    "train": url + "SQuAD_it-train.json.gz",
    "test": url + "SQuAD_it-test.json.gz",
}
'''
field 字段
	数据集是json格式的文件
    数据在json体的'data'字段中
    因此要指定 field = 'data'
'''
ds_dict = load_dataset("json", data_files=data_files, field="data")

2.2 load_from_disk

(1)用于加载 save_to_disk 方法保持的数据文件,即 Arrow 格式

#################################################################
# 数据集加载
from datasets import load_from_disk

ds_dict = load_from_disk("path/of/my/directory")
ds = load_from_disk("path/of/my/dataset/directory")

#################################################################
# 数据集保存
ds_dict.save_to_disk("path/of/my/dataset/directory")
ds.save_to_disk("path/of/my/dataset/directory")

三、DatasetDict

(1)DatasetDict 是存储 dataset 的字典,继承自 python dict,可以使用所有的字典方法 (2)代码示例
from datasets import load_dataset

file1="./data/squad-json/SQuAD_it-train.json"
file2="./data/squad-json/SQuAD_it-test.json"
ds_dict = load_dataset("json", data_files={'train':file1, 'test':file2}, field="data")
'''
>>> print(ds_dict)
DatasetDict({
    train: Dataset({
        features: ['paragraphs', 'title'],
        num_rows: 442
    })
    test: Dataset({
        features: ['paragraphs', 'title'],
        num_rows: 48
    })
})
'''
ds = ds_dict['train']

3.1 DatasetDict -> 数据集文件

#########################################################
# ds_dict 保存
ds_dict.save_to_disk("./mydata")
'''   
mydata
├── dataset_dict.json
├── test
│   ├── data-00000-of-00001.arrow
│   ├── dataset_info.json
│   └── state.json
└── train
    ├── data-00000-of-00001.arrow
    ├── dataset_info.json
    └── state.json
'''

3.2 数据集文件 - > DatasetDict

#########################################################
# ds_dict 加载
ds_dict = DatasetDict.load_from_disk('./mydata')
'''
DatasetDict({
    train: Dataset({
        features: ['paragraphs', 'title'],
        num_rows: 442
    })
    test: Dataset({
        features: ['paragraphs', 'title'],
        num_rows: 48
    })
})
'''

3.3 其它操作

DatasetDict 支持部分数据处理方法(如 map/filter),可以作用到每个 split 上,具体用法参考 Dataset 章节

四、Dataset

(1)Dataset 用于存储数据集,依赖于 features 数据结构

4.1 Dataset 查看

from datasets import load_dataset
########################################################
# 示例1
ds_dict = load_dataset("./data/imdb")
ds = ds_dict['train']
'''
>>> ds
Dataset({
    features: ['text', 'label'],
    num_rows: 25000
})
'''

########################################################
# 示例2
file1="./data/squad-json/SQuAD_it-train.json"
file2="./data/squad-json/SQuAD_it-test.json"
ds_dict = load_dataset("json", data_files={'train':file1, 'test':file2}, field="data")
ds = ds_dict['test']
'''
>>> ds
Dataset({
    features: ['paragraphs', 'title'],
    num_rows: 48
})
'''

4.2 Dataset -> 数据文件

#########################################
# ds -> 数据文件
ds.to_json('./mydata.json')
ds.to_csv('./mydata.csv')
ds.save_to_disk('./mydata')
'''
mydata/
├── data-00000-of-00001.arrow
├── dataset_info.json
└── state.json
'''

4.3 Dataset -> 内存对象

#########################################
# ds -> 内存对象
ds.to_dict()
ds.to_list()
ds.to_pandas()
ds.to_tf_dataset()

4.4 数据文件 -> Dataset

#########################################
# 数据文件 -> ds
ds = Dataset.from_json('./data.json')
ds = Dataset.from_csv('./data.csv')
ds = Dataset.load_from_disk('./mydata')
'''
>>> ds
Dataset({
    features: ['paragraphs', 'title'],
    num_rows: 48
})
'''

4.5 内存对象 -> Dataset

#########################################
# 内存对象 -> ds
ds = Dataset.from_dict({'name': ['Jason', 'Jerry'], 'age': [18, 19]})
'''
Dataset({
    features: ['name', 'age'],
    num_rows: 2
})
'''
df = pd.DataFrame({'name': ['Jason', 'Jerry'], 'age': [18, 19]}) 
ds = Dataset.from_pandas(df)
'''
Dataset({
    features: ['name', 'age'],
    num_rows: 2
})
'''
Dataset.from_list(...)
Dataset.from_file(...)
Dataset.from_text(...)
Dataset.from_buffer(...)

4.6 数据查看

# 查看单条数据
>>> ds[0]
{'text': 'I rented I AM...', 'label': 0}

# 查看多条数据
>>> ds[0:2]
{'text': ['I rented I AM...', '"I Am Curious...'], 'label': [0, 0]}

4.7 数据选择

###########################################
# 顺序批量:选择前 10 条数据
ds.select(range(10))
###########################################
# 随机批量:随机的顺序与 seed 的值有关,如果值一样,则随机的顺序也一样
ds.shuffle(seed=42).select(range(10))

4.8 数据过滤

>>> ds.filter(lambda x: 'hello' in x['text'])
Dataset({
    features: ['text', 'label'],
    num_rows: 59
})

4.9 数据map

def func(x):
    text = x['text']
    x['text'] = text.replace('hello', 'HELLO')
    return x

>>> ds.map(func)
Dataset({
    features: ['text', 'label'],
    num_rows: 25000
})

4.10 数据排序

>>> ds.sort('label')
Dataset({
    features: ['text', 'label'],
    num_rows: 25000
})

4.11 更改列名

>>> ds.rename_column('label', 'mylabel')
Dataset({
    features: ['text', 'mylabel'],
    num_rows: 25000
})

五、其它结构

5.1 Features

(1)Dataset 对应着一个数据表 (2)Feature 对应着数据表中的一列

 

标签:datasets,HuggingFace,笔记,Dataset,json,dict,dataset,data,ds
From: https://www.cnblogs.com/wky-blogs/p/18317537

相关文章

  • Docker 笔记 - Docker 容器重启策略 --restart 介绍和实战
    https://zhuanlan.zhihu.com/p/494370957 1.Docker容器的重启策略目的为了保证容器运行时健壮性(自愈),Docker提供了容器重启策略,即使用参数--restart,它可以让容器在退出时自动尝试重启。场景Docker容器的重启策略一般用于生产环境,开发环境和实验环境可以忽略。例如使......
  • bash 笔记
    这一篇的内容,太乱了。以后再整理:把熟悉的内容删掉。不熟悉的内容放到前面。#bash:exportHOME=$PWDexportPS1="$"更简短把home把当前目录设置为home,目的是缩短命令提示符前面的内容。看起来更简短。zcatlabevents.csv.gz|awk-F',''($5==50912......
  • Python学习笔记42:游戏篇之外星人入侵(三)
    前言在之前我们已经创建好了目录,并且编写好了游戏入口的模块。今天的内容主要是讲讲需求的分析以及项目各模块的代码初步编写。在正式编写代码前,碎碎念几句。在正式编写一个项目代码之前,实际是有很多工作要做的。就项目而言,简单的定项,需求对齐,项目架构设计,实际的代码编写,......
  • 学习笔记-MyBatis 的使用
    目录为什么要用MyBatis?传统的JDBC七个步骤优化JDBC操作优化空间什么是MyBatis?使用MyBatis1.引入第三方依赖2.修改配置3.创建Mapper层(Dao层)4.写SQL映射文件测试注册Mapper层映射文件设置带参方法优化MyBatis操作过程Service业务层Controlle......
  • 【笔记】生成函数 · 进阶(EGF)
    写在前面本文除了例题@.1P4389付公主的背包使用OGF其她的均为EGF0约定0.1一些形象的表达收缩:指一个式子由比较复杂的形式变简单。本文中大概率就是指一个生成函数用封闭形式来表达;多项式的平移:对于任意一个多项式\(A(x)\),向左平移\(m\)位指\(\left(A(x)-\s......
  • C++学习笔记
    -------------------------------------------------------------------给一个无单向不循环链表的首结点l,编写程序反转链表,并返回反转后的链表首结点structllist_node{intval;structllist_node*next;};structllist_node*func(structllist_node*l){......
  • Java基础-学习笔记06
    **06访问修饰符封装继承多态**访问修饰符public公开级别,对外公开protected受保护级别,对子类和同一个包中的类公开default默认级别,无修饰符,向同一个包的类公开private私有级别,只有类本身可以访问,不对外公开修饰符可以用来修饰类中的属性,成员方法以及类只有默认......
  • Pandas 和numpy 入门详细笔记
    1.安装和导入1.1安装pipinstallpandaspipinstallnumpy1.2导入importpandasaspdimportnumpyasnp2.数据结构2.1Series(系列)定义:一维标签化数组,可以保存任何数据类型(整数、浮点数、字符串等)。创建Series:#从列表创建s=pd.Series([10,20,30,40]......
  • MPLS-EVPN笔记详述
    目录EVPN简介:EVPN路由:基本四种EVPN路由扩展:EVPN工作流程:1.启动阶段:2.流量转发:路由次序整理:总结:EVPN基本术语:EVPN表项:EVPN支持的多种服务模式:简介:1.PortBased:简介:配置实现:2.VLANBased:简介:配置实现:3.VLANBundle:简介:配置实现:VLAN-AwareBundle:简介:M......
  • OI-Wiki 学习笔记
    算法基础\(\text{Update:2024-07-22}\)复杂度定义衡量一个算法的快慢,一定要考虑数据规模的大小。一般来说,数据规模越大,算法的用时就越长。而在算法竞赛中,我们衡量一个算法的效率时,最重要的不是看它在某个数据规模下的用时,而是看它的用时随数据规模而增长的趋势,即时间复......