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

【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.mzph.cn/news/732724.shtml

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

相关文章

抖音短视频素材哪里找,推荐五个好用的抖音素材网站

不知道你有没有想过一个问题,为什么别人都能找到那种高质量的视频素材,画质特别高清,甚至是4K的内容,而你需要视频素材却不知道去哪里找?网上有各种参差不齐的网站,变着法的想掏空你那本不富裕的腰包。今天…

Git 开源的版本控制系统-06-share to github 如何把项目代码共享到 github

拓展阅读 Subversion 开源的版本控制系统入门介绍 VCS Git 开源的版本控制系统-01-入门使用介绍 Git 开源的版本控制系统-02-base usage 基本用法 Git 开源的版本控制系统-03-时间数据回溯 Git 开源的版本控制系统-04-branch manage 分支管理 Git 开源的版本控制系统-05-…

springMVC自定义异常处理器

目录 🌱使用原因 🌳优点 🌱实现 🌳自定义一个异常 🌳异常处理 🌳测试 使用原因 系统中会有各种各样的,意料之中和意料之外的结果,我们并不能做到完全针对每个异常时刻做出针对…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Marquee)

跑马灯组件,用于滚动展示一段单行文本。仅当文本内容宽度超过跑马灯组件宽度时滚动,不超过时不滚动。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Ma…

数据结构从入门到精通——队列

队列 前言一、队列1.1队列的概念及结构1.2队列的实现1.3队列的实现1.4扩展 二、队列面试题三、队列的具体实现代码Queue.hQueue.ctest.c队列的初始化队列的销毁入队列出队列返回队头元素返回队尾元素检测队列是否为空检测元素个数 前言 队列是一种特殊的线性数据结构&#xff…

【操作系统学习笔记】文件管理2.3

【操作系统学习笔记】文件管理2.3 参考书籍: 王道考研 视频地址: Bilibili 虚拟文件系统 由于不同的硬件需要不用的文件系统,会导致写代码非常复杂 虚拟文件系统 VFS: 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异VFS…

Python 初步了解urllib库:网络请求的利器

目录 urllib库简介 request模块 parse模块 error模块 response模块 读取响应内容 获取响应状态码 获取响应头部信息 处理重定向 关闭响应 总结 在Python的众多库中,urllib库是一个专门用于处理网络请求的强大工具。urllib库提供了多种方法来打开和读取UR…

STM32 HAL库RTC复位丢失年月日的解决办法

STM32 HAL库RTC复位丢失年月日的解决办法 0.前言一、实现方式1.CubeMX配置:2.MX_RTC_Init()函数修改2.编写手动解析函数 二、总结 参考文章:stm32f1 cubeMX RTC 掉电后日期丢失的问题 0.前言 最近在使用STM32F103做RTC实验时,发现RTC复位后时…

基于Java的物管系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术介绍 3 1.1 JSP介绍 3 1.2 MySQL介绍 3 1.3 B/S开发模式 3 1.4 Java介绍 4 2 系统分析 5 2.1 可行性研究 5 2.1.1技术可行性 5 2.2.2经济可行性 5 2.3.1操作可行性 5 2.2 需求分析 6 2.2.1系统用例图 6 2.2.2系统功能模块需求分析…

机器学习--循环神经网络(RNN)1

一、简介 循环神经网络(Recurrent Neural Network)是深度学习领域中一种非常经典的网络结构,在现实生活中有着广泛的应用。以槽填充(slot filling)为例,如下图所示,假设订票系统听到用户说&…

关于vue3使用prop传动态参数时父子数据不同步更新问题

子: <template><div><h3>子组件</h3><input :value"modelValue" input"$emit(update:modelValue, $event.target.value)"></div> </template><script setup> import { defineProps, defineEmits } from …

P5635 【CSGRound1】天下第一

题目背景 天下第一的 cbw 以主席的身份在 8102 年统治全宇宙后&#xff0c;开始了自己休闲的生活&#xff0c;并邀请自己的好友每天都来和他做游戏。由于 cbw 想要显出自己平易近人&#xff0c;所以 zhouwc 虽然是一个蒟蒻&#xff0c;也有能和 cbw 玩游戏的机会。 题目描述 …

揭秘接口测试:完整流程指南!

在讲接口测试之前&#xff0c;首先需要给大家申明下&#xff1a;接口测试对于测试人员而言&#xff0c;非常非常重要&#xff0c;懂功能测试接口测试&#xff0c;就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试&#xff0c;一般也是面试笔试必问。为方便大家更好的…

logstash和elasticsearch的几种交互接口

Logstash与Elasticsearch是两个非常流行的开源工具&#xff0c;用于处理和存储大量的日志数据。它们之间的集成非常重要&#xff0c;因为Logstash用于收集、处理和转换日志数据&#xff0c;而Elasticsearch用于存储、搜索和分析这些数据。在本文中&#xff0c;我们将详细介绍Lo…

【C/C++】常量指针与指针常量的深入解析与区分(什么是const int * 与 int * const ?)

目录 一、前言 二、const 的简单介绍 三、常量指针 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 四、指针常量 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 五、总结与提炼 六、共勉 一、前言 在【C/C】的编程中&#xff0c;指针与const关键字的组合…

防御保护IPSEC实验

要求&#xff1a;在FW5和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24. 因为是双机热备状态则只需要配置FW1主设备。 新建ACL待加密数据流 安全建议&#xff1a; IPSec参数配置 FW3配置如下与FW1类似&#xff1a; FW1中新建安全策略…

链表|19.删除链表的倒数第N个节点

力扣题目链接 struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {//定义虚拟头节点dummy 并初始化使其指向headstruct ListNode* dummy malloc(sizeof(struct ListNode));dummy->val 0;dummy->next head;//定义 fast slow 双指针struct ListNode* f…

论文汇总:Rectifying the Shortcut Learning of Background for Few-Shot Learning

原文解读&#xff1a; 论文解读&#xff1a;Rectifying the Shortcut Learning of Background for Few-Shot Learning-CSDN博客 文章汇总 问题&动机&解决方法 图像背景是一种有害知识的来源&#xff0c;这是少数镜头学习模型容易吸收的(问题) 通过在训练和评估中提…

TI IWR6843ISK ROS驱动程序搭建

1、设备准备 1.1 硬件设备 1&#xff09;TI IWR 6843 ISK 1块 2&#xff09;Micro USB 数据线 1条 1.2 系统环境 1&#xff09;VMware Workstation 15 Player 虚拟机 2&#xff09;Ubuntu18.04 并安装有 ROS1 系统 如若没有安装 ROS 系统&#xff0c;可通过如下指令进行…

uni-app navigateTo路由传参传递对象

传递参数 先通过JSON.stringify将对象转成字符串 toNextPage(obj) {uni.navigateTo({url:/pages/nextpage/index?obj${JSON.stringify(obj)}}); },接收参数 再通过JSON.parse将传递过来的字符串转成对象 onLoad(options) {this.obj JSON.parse(options.obj) }