【Python】科研代码学习:五 Data Collator,Datasets

news2025/9/21 15:24:07

【Python】科研代码学习:五 Data Collator,Datasets

  • Data Collator
    • Default data collator
    • DefaultDataCollator
    • DataCollatorWithPadding
      • Padding
    • 其他 Data Collator
  • Datasets
    • load_dataset
    • 其他一些基本操作

Data Collator

  • HF官网API:Data Collator
    Transformers源码阅读:transformers data_collator小记
    提到输入训练集/验证集数据,就基本绕不开 Data Collator
    它的作用是将多个数据进行批处理(Batch),并转换成 train_dataset eval_dataset 相同的数据类型
  • 为了让它工作顺利,可能会做一些处理(padding / random masking
  • 但是我发现,在 Datasets 的一些API中,或者单独使用 Data Collator 的情况很少啊
    再仔细查看发现,其作用主要是 给 Trainer 的初始化创建提供了一个 Data Collator,让 Trainer 在训练和评估的时候会自己去对数据进行批处理或特殊处理
  • 下面看一下 Data Collator 里面的东西吧。

Default data collator

  • 首先,它是一个方法,首先
    输入类型,其实就是一个任意的列表 InputDataClass = NewType("InputDataClass", Any)
    然后可以指定用 pytorch / tensorflow / numpy 中的一个版本,大部分都是使用 pt
    在这里插入图片描述
  • 发现,首先他把 features 也就是输入通过 vars() 转成了字典
    然后它处理了标签,也就是 label label_ids
    看下API描述:
    label: handles a single value (int or float) per object
    label_ids: handles a list of values per object
    哦,就是单标签和多标签的区别。
    最后做了些类型转换,输出打包为 Dict[str, Any]
    在这里插入图片描述

DefaultDataCollator

  • 上面是一个函数,这里是一个类(需要实例化)
    调用它相当于调用了上述的函数
    在这里插入图片描述

DataCollatorWithPadding

  • 如果不知道 Padding的,可以看一下后面的补充知识
  • 这里看一下源码和参数含义
    需要提供 tokenizer,以及 padding 策略。其他过程和上述 DefaultDataCollator 差不多。
    在这里插入图片描述

Padding

  • 知乎:LLM padding 细节
    可以翻译成对齐吧
  • 简单来说就是,输入经过词嵌入后,产生的 List[int] 词嵌入数组长度不一致,很难进行并行处理
    我们通过把所有数组长度统一到其中最长的那个数组长度,也就是其中添加 tokenizer.pad_token 即可。
    例如 tokenizer(prompts, return_tensors="pt", padding=True) ,其中 attention_mask 中的 0 表示 padding
  • 但是 padding 会增加无用字符,浪费训练资源,所以还有其他不用 padding 的训练方式。
  • 其他的技术细节请参考上述知乎链接。

其他 Data Collator

  • 针对不同任务,也提供了不同的 Data Collator,看一眼吧:
    DataCollatorForTokenClassification:给token分类的
    DataCollatorForSeq2Seq:给s2s任务的
    DataCollatorForLanguageModeling:给LM用的,mlm 参数给 MLM任务使用
    DataCollatorForWholeWordMask:给LM用的,(used for language modeling that masks entire words)
    DataCollatorForPermutationLanguageModeling:给(permutation language modeling)用的

Datasets

  • HF官网API:Datasets
    前面介绍的都在 transformers 库里的,而这个是在 Datasets 库的
    主要功能就是从 HF 中加载与上传数据集,给 Audio,CV,NLP任务用途的。
  • 它比较简单,最主要的方法也就是下面这个

load_dataset

  • 来看一下源码
    它参数比较多,我就选择重要参数介绍吧。详细请去API查看
    path :数据集的名字(请去HF中查找)或本地路径(json, csv, text等格式)或数据集脚本( dataset script,一个py文件)
    split:默认 None,不划分训练集和测试集,最终直接返回一个 DatasetDict 。若指定 train / test / validation(这个真难找,图片在下方),则返回 Dataset 类型。
    data_dir:设置保存路径。
    在这里插入图片描述
    在这里插入图片描述
  • 看一下例子:
    通过HF加载数据集 (ds = dataset缩写,是一个规范)
from datasets import load_dataset
ds = load_dataset('rotten_tomatoes', split='train')

data_files = {'train': 'train.csv', 'test': 'test.csv'}
ds = load_dataset('namespace/your_dataset_name', data_files=data_files)
  • 通过本地加载数据集,通过 csv / json / loading_script 加载
from datasets import load_dataset
ds = load_dataset('csv', data_files='path/to/local/my_dataset.csv')

from datasets import load_dataset
ds = load_dataset('json', data_files='path/to/local/my_dataset.json')

from datasets import load_dataset
ds = load_dataset('path/to/local/loading_script/loading_script.py', split='train')
  • 如果通过自动下载后,可以使用下面方法来设置数据存储到本地目录
    通过 save_to_disk 存到本地后,需要使用 load_from_disk 加载
dataset.save_to_disk(dataset_dict_path='./data/ChnSentiCorp')
dataset = load_from_disk('./data/ChnSentiCorp')

其他一些基本操作

  • HuggingFace学习笔记(3) 数据集工具datasets
    参考上面的知乎笔记,可以学到一些内容:
    1)dataset = dataset['train'] 可以直接获得其中的训练子集
    2)Dataset 内核和 pandas.dataframe 差不多
    3)索引ds[i] 取出第 i 条记录
    4)排序sorted_ds = ds.sort("colum_name")
    5)打乱shuffled_ds = ds.shuffle(seed=42)
    6)采样ds.select([0,10,11,...]) 表示拿出哪些记录
    7)训练测试集拆分ds.train_test_split(test_size=0.1),即9:1拆成训练集与测试集
    8)重命名列ds.rename_column('bef', 'aft')
    9)删除列ds.remove_columns(['colum_name'])
    10)过滤dataset.filter(func)
    比如
def func(data):
    return data['text'].startswith('非常不错')
  • 11)遍历修改new_ds = ds.map(func),这个比较常用
    比如
def f(data):
    data['text'] = 'My sentence: ' + data['text']
    return data
  • 12)批处理加速:filter()、map()两个函数都支持批处理加速
    添加如下关键词即可,注意 num_proc 表示使用的进程数。
maped_datatset = dataset.map(function=f,
	batched=True,
	batch_size=1000,
	num_proc=4)

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

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

相关文章

网易再战腾讯,《永劫无间》宣发捡大漏

《王者荣耀》代言人唯爱《永劫无间》? 最近时代少年团成员严浩翔疑似打赏《永劫无间》女主播一事,在饭圈和游戏圈引起了轩然大波,“男偶像打赏女主播”和“《王者荣耀》代言人爱玩《永劫无间》”,一时不知道哪个行为更炸裂。 虽…

力扣hot100题解(python版63-68题)

63、搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输…

Android Studio下载gradle超时问题解决

方法一 1. 配置根目录的setting.gradle.kts文件 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urluri ("https://maven.aliyun.com/repos…

结构体内存对齐详解

目录 结构体对齐: 为什么要进行内存对齐? 关于结构体的详解文章:C语言结构体详解_结构体变量和结构体类型举例-CSDN博客 结构体对齐: 存储的时候和当前存储的成员类型字节大小和默认对齐数比较,取小值 存在该对齐数的…

Windows11安装FFmpeg最新版本

打开终端: 输入 winget install ffmpeg 然后输入 Y 回车后出现如下图: 正在下载FFmpeg 6.1 安装成功 测试

cocos creator 3.7.2使用shader实现图片扫光特效

简介 功能:图片实现扫光效果 引擎:cocos Creator 3.7.2 开发语言:ts 完整版链接 链接https://lengmo714.top/284d90f4.html 效果图 shader代码 // Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. CCEffect %{techniques:- pas…

vue 下载的插件从哪里上传?npm发布插件详细记录

文章参考: 参考文章一: 封装vue插件并发布到npm详细步骤_vue-cli 封装插件-CSDN博客 参考文章二: npm发布vue插件步骤、组件、package、adduser、publish、getElementsByClassName、important、export、default、target、dest_export default…

【开源】SpringBoot框架开发免税店商城管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2 研究方法 三、系统展示四、核心代码4.1 查询免税种类4.2 查询物品档案4.3 新增顾客4.4 新增消费记录4.5 审核免税 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的免税店商城管理系…

day-18 轮转数组

时间复杂度为O&#xff08;n&#xff09; code: class Solution {public void rotate(int[] nums, int k) {int nnums.length;kk%n;int arr[]new int[n];for(int i0;i<n;i){arr[(ik)%n]nums[i];}for(int i0;i<n;i){nums[i]arr[i];}} }参考答案 进行三次翻转 空间复杂度O…

让开源浏览器Chromium正常显示中文

什么是 Chromium &#xff1f; Chromium 是一个开源浏览器项目&#xff0c;旨在为所有用户构建一种更安全、更快、更稳定的网络体验方式。 和老苏之前介绍的 Firefox 的作用是一样的 文章传送门&#xff1a;给群晖安装firefox浏览器 因为是基于 vnc 的应用&#xff0c;感觉资源…

管理交换机

文章目录 本地管理交换机物理交换机如何本地管理ensp上的虚拟交换机如何本地管理认证模式的三种方式 远程管理交换机配置通过Telnet登录设备配置通过STelnet登录设备 --推荐的方式检查配置结果使用Cloud管理多个交换机时 华为官网配置信息 本地管理交换机 当交换机首次使用时&…

强化学习工具箱(Matlab)

1、Get Started 1.1、MDP环境下训练强化学习智能体 MDP环境如下图 每个圆圈代表一个状态每个状态都有上或下的选择智能体从状态 1 开始智能体接收的奖励值为图中状态转移的值训练目标是最大化累计奖励 &#xff08;1&#xff09;创建 MDP 环境 创建一个具有 8 个状态和 2 …

STM32FreeRTOS任务通知(STM32cube高效开发)

文章目录 一、任务通知(一&#xff09;任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify&#xff08;&#xff09;发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR&#xff08;&#xff09;发送通知函数ISR版本3、x…

Compose UI 之 Small TopAppBar

Small 类型 TopAppBar AppBar 主要由2类&#xff0c;顶部 AppBar 和底部 AppBar。 顶部 AppBar&#xff1a;主要包含了标题&#xff0c;action菜单&#xff0c;导航菜单。底部 AppBar&#xff1a;典型地包含主要导航项。 顶部 AppBar 顶部 AppBar 包含了 4 中类型&#xff…

FREERTOS DAY3

作业&#xff1a;1.总结任务的调度算法&#xff0c;把实现代码再写一下&#xff0c; FreeRTOS中默认的调度算法是 抢占式调度时间片轮转 1.抢占式调度&#xff1a;任务优先级高的可以打断任务优先级低的执行&#xff08;适用于不同优先级&#xff09; 2.时间片轮转&#xff…

低密度奇偶校验码LDPC(九)——QC-LDPC译码器FPGA全并行设计

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

day59 线程

创建线程的第二种方式 实现接口Runnable 重写run方法 创建线程的第三种方式 java.util.concurrent下的Callable重写call()方法 java.util.concurrent.FutureTask 创建线程类对象 获取返回值 线程的四种生命周期 线程的优先级1-10 default为5&#xff0c;优先级越高&#xff0c…

关于安科瑞ASD 开关柜综合测控装置的介绍-安科瑞 蒋静

1 概述 ASD 系列开关柜综合测控装置用于 3~35kV 户内开关柜&#xff0c;适用于中置柜、手车柜、固定柜、环 网柜等多种开关柜。具有一次回路模拟图及开关状态指示&#xff0c;高压带电显示及核相&#xff0c;自动温湿度控制&#xff0c;加热回路故障告警&#xff0c;分合闸…

弹性布局(下),过渡

弹性布局 1.当子元素在主轴方向的长度和大于父元素的情况 子元素在父元素中放不下是否换行&#xff1f; flex-warp&#xff1a; 默认值&#xff1a; nowrap 不换行&#xff0c;压缩子元素的长度&#xff0c;最常用 可选值&#xff1a; wrap 换行 当子元素被压缩时&#xff0…

Redux 与 Vuex:探索它们的设计思想及应用差异

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…