NLP-transformer学习:(6)dataset 加载与调用

news2025/1/11 18:30:45

NLP-transformer学习:(6)dataset 加载与调用

在这里插入图片描述

平常其实也经常进行trainning等等,但是觉得还是觉得要补补基础,所以静下心,搞搞基础联系
本章节基于 NLP-transformer学习:(5)讲解了如何做一个简单的训练和模型迁移,这里实践一个长用的dataset
相关课程其实是哔站上的视频课程,但是我这里将其实践,并融入自己的心得,代码地址如下:
https://github.com/MexWayne/mexwayne_transformers-code


文章目录

  • NLP-transformer学习:(6)dataset 加载与调用
    • @[TOC](文章目录)
  • 1 什么是datasets
  • 2 datasets 实战
    • 2.1 基础操作
  • 2.2 加载某一任务或某一部分
  • 2.3 数据划分
    • 2.4 数据选取和过滤
    • 2.4 数据映射
    • 2.5 数据保存与加载

提示:以下是本篇文章正文内容,下面案例可供参考

1 什么是datasets

地址:https://huggingface.co/datasets
在这里插入图片描述

datasets言而简之就是加载数据集用的
使用之前需要:
pip install datasets
有些特殊的库需要
pip install datasets[vision]
pip install datasets[audio]

2 datasets 实战

2.1 基础操作

加载代码如下:

# if the py name is datasets, the import action will first use the current file 
# not the datasets installed by pip
# for example you may meet the error: will be "NameError: name 'load_dataset' is not defined"

from datasets import *

if __name__ == "__main__":

    # add a dataset
    data_set = load_dataset("madao33/new-title-chinese")
    print(data_set)
    print("------------------------------")
    print("train[0]:")
    print(data_set["train"][0])
    print("------------------------------")
    print("train[:2]:")
    print(data_set["train"][:2])
    print("------------------------------")
    print("train[\"tile\"][:5]:")
    print(data_set["train"]["title"][:5])
    print("------------------------------")
    

这里注意的是,使用的python 文件名不能是“datasets”即重名,不然会首先找当前文件,然后报错:
NameError: name ‘load_dataset’ is not defined
当改为非datasets 名字后就可以看到数据加载

可以看到这个数据集中只有训练和验证数据集。
在这里插入图片描述
然后我们使用一些切片用法可以看到期望结果:
在这里插入图片描述

2.2 加载某一任务或某一部分

(1)加载某个任务
datasets 部分数据中不是只有数据还包含了很多任务
对于super_gule,这个datasets 是一个 任务的集合,如果我们要添加某一任务
在这里插入图片描述
我们可以这样做,代码如下:

# if the py name is datasets, the import action will first use the current file 
# not the datasets installed by pip
# for example you may meet the error: will be "NameError: name 'load_dataset' is not defined"

from datasets import *

if __name__ == "__main__":
    
    # add specific task
    boolq_dataset = load_dataset("super_glue", "boolq",trust_remote_code=True)
    print(boolq_dataset)

在这里插入图片描述

注意这里有个小细节,如果写成自动化代码时,可以加加上信任主机,这样就不用再敲入一个y
在这里插入图片描述
(2)加载某个部分(也叫某个划分)
load_dataset 支持加载某个部分,并且对某个部分进行切片,且切片还可以用%描述,但不能用小数描述

# if the py name is datasets, the import action will first use the current file 
# not the datasets installed by pip
# for example you may meet the error: will be "NameError: name 'load_dataset' is not defined"

from datasets import *

if __name__ == "__main__":
    
    ## add a dataset
    #data_set = load_dataset("madao33/new-title-chinese")
    #print(data_set)
    
    ## add specific task
    #boolq_dataset = load_dataset("super_glue", "boolq",trust_remote_code=True)
    #print(boolq_dataset)


    dataset = load_dataset("madao33/new-title-chinese", split="train")
    print("train:") 
    print(dataset)

    dataset = load_dataset("madao33/new-title-chinese", split="train[10:100]")
    print("train 10:100:") 
    print(dataset)
    
    dataset = load_dataset("madao33/new-title-chinese", split="train[10%:50%]")
    print("train 10%:100%:") 
    print(dataset)
    
    dataset = load_dataset("madao33/new-title-chinese", split=["train[:40%]", "train[40%:]"])
    print("train 40% and 60%:") 
    print(dataset)

运行结果:
在这里插入图片描述

2.3 数据划分

这个dataset 自带了个调整比例的 函数:train_test_split

# if the py name is datasets, the import action will first use the current file 
# not the datasets installed by pip
# for example you may meet the error: will be "NameError: name 'load_dataset' is not defined"

from datasets import *

if __name__ == "__main__":
    datasets = load_dataset("madao33/new-title-chinese")
    print("origin train datasets:")
    print(datasets["train"])
    print("-----------------")
    print("make train set as test 0.1:")
    dataset = datasets["train"]
    print(dataset.train_test_split(test_size=0.1))
    print("-----------------")
    print("stratify:")
    boolq_dataset = load_dataset("super_glue", "boolq",trust_remote_code=True)
    dataset = boolq_dataset["train"]
    print(dataset.train_test_split(test_size=0.1, stratify_by_column="label"))# 分类数据集可以按照比例划分
    print("-----------------")

运行结果:
这里 test_size = 0.1 指,将训练数据的 0.1 用作test,即585 = 5850 × 0.1
stratify: 这样可以均衡数据
在这里插入图片描述

2.4 数据选取和过滤


from datasets import *

if __name__ == "__main__":
    datasets = load_dataset("madao33/new-title-chinese")
    # 选取
    filter_res = datasets["train"].select([0, 1])
    print("select:")
    print(filter_res["title"][:5])
    # 过滤
    filter_dataset = datasets["train"].filter(lambda example: "中国" in example["title"])
    print("filter:")
    print(filter_dataset["title"][:5])

结果:
在这里插入图片描述

2.4 数据映射

数据映射,就是我们写一个函数,然后对数据集中的每个数据都做这样的处理
(1)将个每个数据处理下,这里举例家了前缀
代码:

from datasets import load_dataset

def add_prefix(example):
    example["title"] = 'Prefix: ' + example["title"]
    return example
    
if __name__ == "__main__":
    datasets = load_dataset("madao33/new-title-chinese")
    prefix_dataset = datasets.map(add_prefix)
    print(prefix_dataset["train"][:10]["title"])

运行结果:
可以看到和期望一样,将每个title 加了个”prefix“
在这里插入图片描述
(2)将每个数据做tokenizer

from datasets import *
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
def preprocess_function(example, tokenizer = tokenizer):
    model_inputs = tokenizer(example["content"], max_length = 512, truncation = True)
    labels = tokenizer(example["title"], max_length=32, truncation=True)
    # label就是title编码的结果
    model_inputs["labels"] = labels["input_ids"]
    return model_inputs

if __name__ == "__main__":

    processed_datasets = datasets.map(preprocess_function)
    print("train:")
    print(processed_datasets["train"][:5])
    print("validation:")
    print(processed_datasets["validation"][:5])

结果可以看到,数据已经和前几章讲的类似,变成了token。
运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.5 数据保存与加载

from datasets import *
from transformers import AutoTokenizer

if __name__ == "__main__":
    datasets = load_dataset("madao33/new-title-chinese")
    processed_datasets = datasets.map(preprocess_function)
    print("from web:") 
    print(processed_datasets["validation"][:2])
    processed_datasets = datasets.map(preprocess_function)
    processed_datasets.save_to_disk("./processed_data")
    processed_datasets = load_from_disk("./processed_data")
    print("from local:") 
    print(processed_datasets["validation"][:2])

结果:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【AI-19】Adam为什么会过拟合

Adam 算法可能会导致过拟合的原因主要有以下几点: 过拟合和欠拟合的概念 过拟合: 就好比一个学生在准备考试时,把课本上的每一个例子都背得滚瓜烂熟,但是考试的时候题目稍微变一下,他就不会做了。 在机器学习中&#…

tomcat项目报错org.apache.jasper.JasperException: java.lang.NullPointerException

现象: 访问tomcat项目报错,查看tomcat日志有报错 Sep 12, 2024 5:15:59 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [jsp] in context with path [] threw exception java.lang.NullPointerExce…

【linux006】目录操作命令篇 - pwd 命令

文章目录 1、基本用法2、常见选项3、举例4、注意事项 pwd命令在 Linux 中用于显示当前工作目录的绝对路径。它是一个非常基础且常用的命令,帮助用户确认自己在文件系统中的位置。 1、基本用法 pwd [选项]2、常见选项 -L(逻辑路径)&#xff…

实现LED流水灯效果 -(附代码和仿真)

流水灯程序分为三个模块(顶层,流水灯控制模块,时钟分频模块); 流水灯程序有三个输入(时钟,复位信号,控制开关),一个输出(16位led灯)实…

7-6 列出连通集

输入样例: 8 6 0 7 0 1 2 0 4 1 2 4 3 5输出样例: { 0 1 4 2 7 } { 3 5 } { 6 } { 0 1 2 7 4 } { 3 5 } { 6 } 注: bfs中 queue的 进 出 顺序一样&#xff0c;可以在进队列时输出&#xff0c;也可在出队列时。 代码&#xff1a; #include<iostream> #include<que…

胤娲科技:“斯坦福最新研究揭示:‘AI科学家‘创新能力获百位学者高分认可“

在科技浪潮的汹涌推动下&#xff0c;人工智能&#xff08;AI&#xff09;正以惊人的速度重塑着我们的世界&#xff0c;其影响力已远远超出了最初的设想。 最近&#xff0c;一篇关于自动化AI研究的论文在网络上引起了轩然大波&#xff0c;其核心观点犹如一颗重磅炸弹&#xff0c…

Redis 篇-深入了解基于 Redis 实现消息队列(比较基于 List 实现消息队列、基于 PubSub 发布订阅模型之间的区别)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 消息队列的认识 2.0 基于 List 实现消息队列 2.1 基于 List 实现消息队列的优缺点 3.0 基于 PubSub 实现消息队列 3.1 基于 PubSub 的消息队列优缺点 4.0 基于 St…

2009-2023年上市公司华证esg评级、评分年度数据(含细分项)

2009-2023年上市公司华证esg评级、评分年度数据&#xff08;含细分项&#xff09; 1、时间&#xff1a;2009-2023年 2、来源&#xff1a;整理自wind 3、指标&#xff1a;证券代码、年份、证券简称、评级日期、综合评级、综合得分、E评级、E得分、S评级、S得分、G评级、G得分…

《论负载均衡技术在Web系统中的应用》写作框架,软考高级系统架构设计师

论文真题 负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术&#xff0c; 可将负载(工作任务) 进行平衡、分摊到多个操作单元上执行&#xff0c; 从而协同完成工作任务&#xff0c; 达到提升Web系统性能的目的。 请围绕“负载均衡技术在Web系统中的应用”论题&…

《计算机组成原理:探索数字世界的基石》

《计算机组成原理&#xff1a;探索数字世界的基石》 在当今数字化的时代&#xff0c;计算机已经成为人们生活和工作中不可或缺的一部分。而要深入理解计算机的运作&#xff0c;就必须掌握计算机组成原理。 计算机组成原理是一门研究计算机硬件系统的学科&#xff0c;它涵盖了…

Linux-Curl使用

在 Linux 中&#xff0c;curl是一个强大的命令行工具&#xff0c;用于从服务器或其他 URL 地址获取数据或与网络服务进行交互。 对于自己写不明白的curl&#xff0c;可以使用postman、apipost等接口工具生成curl请求&#xff0c;用于测试 # 下载单个文件 默认将输出打印到标准…

Zabbix监控k8s云原生环境

传统监控的本质就是收集、分析和使用信息来观察一段时间内监控对象的运行进度&#xff0c;并且进行相应的决策管理的过程&#xff0c;监控侧重于观察特定指标。是随着云原生时代的到来&#xff0c;我们对监控的功能提出了更多的要求&#xff0c;要实现这些功能&#xff0c;就要…

python画图|3D垂线标记

在前述学习过程中&#xff0c;我们学习了二维坐标上的垂线标记画图&#xff0c;链接如下&#xff1a; python画图|垂线标记系列_python画点相对x轴的垂线-CSDN博客 也学习了3D作图基本方法&#xff1a; python画图|3D图基础教程-CSDN博客 现在我们尝试将这二者结合&#x…

自定义WPF滑块样式-Slider

在Windows应用程序开发中&#xff0c;滑块&#xff08;Slider&#xff09;是一个非常常见且有用的控件。它可以让用户通过拖动滑块来选择一个范围内的值。然而&#xff0c;WPF或UWP应用程序中的默认滑块样式可能并不总是符合我们的设计需求。因此&#xff0c;我们需要自定义滑块…

华为OD机试 - 伐木工 - 动态规划(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

可以实时引入模块

缺点&#xff1a;循环会有点问题,不能死循环,最好在python脚本中起一个计时器 解释器在执行时时同步的,所以会见界面卡住,使用多个线程可以解决这个问题 或者使用 C的异步 一个完整的IDLE 麻烦,得把pyshell.py 弄能才能从tk 改到qt 内嵌到 dock

三维坐标变换

&#xff08;一些困惑梳理记录&#xff09; “坐标转换”的区分 1、坐标系基底变换 2、目标描述向量变换 总的来说&#xff0c; A属于1、坐标系基底变换&#xff0c; B中所述方法&#xff0c;可用于1、坐标系基底变换&#xff0c;也可用于2、目标描述向量变换&#xff0c…

文生视频算法

文生视频 Sora解决问题&#xff1a;解决思路&#xff1a; CogVideoX解决问题&#xff1a;解决思路&#xff1a; Stable Video Diffusion&#xff08;SVD&#xff09;解决问题&#xff1a;解决思路&#xff1a; 主流AI视频技术框架&#xff1a; Sora Sora: A Review on Backg…

SpringBoot项目请求返回json空字段过滤

接口返回的json中有的字段可能是为空的&#xff0c;我们不希望他为空的还返回&#xff0c;如下例子&#xff1a; 解决方案&#xff1a;只需要加一个配置类就行&#xff1a; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.Dese…

【每日刷题】Day120

【每日刷题】Day120 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 413. 等差数列划分 - 力扣&#xff08;LeetCode&#xff09; 2. 978. 最长湍流子数组 - 力扣&…