【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的内容,而你需要视频素材却不知道去哪里找?网上有各种参差不齐的网站,变着法的想掏空你那本不富裕的腰包。今天…

springMVC自定义异常处理器

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

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

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

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

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

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)为例,如下图所示,假设订票系统听到用户说&…

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

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

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

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

防御保护IPSEC实验

要求:在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24. 因为是双机热备状态则只需要配置FW1主设备。 新建ACL待加密数据流 安全建议: IPSec参数配置 FW3配置如下与FW1类似: 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

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

TI IWR6843ISK ROS驱动程序搭建

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

【分库分表】基于mysql+shardingSphere的分库分表技术

目录 1.什么是分库分表 2.分片方法 3.测试数据 4.shardingSphere 4.1.介绍 4.2.sharding jdbc 4.3.sharding proxy 4.4.两者之间的对比 5.留个尾巴 1.什么是分库分表 分库分表是一种场景解决方案,它的出现是为了解决一些场景问题的,哪些场景喃…

Solidity攻击合约:“被偷走的资金”

在以太坊智能合约开发中,Solidity是最常用的编程语言。然而,由于代码编写不当或缺乏安全意识,合约可能面临各种攻击。本文将通过一个简单的Solidity合约示例,展示一个潜在的攻击合约,并分析其相对于原本合约的危害以及…

计算机设计大赛 疲劳驾驶检测系统 python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列&#x…

024—pandas 将一列数据等份变形

前言 今天我们将一个 Series 序列数据转为 DataFrame结构。我们将用么 pd.cut() 对数据进行分箱,也会用到 NumPy 的 np.reshape() 对阵列数据进行变形。接下来我们看看具体的需求,再分析一下解决思路,最后用代码实现它。 需求: …

flink实战--Flink任务资源自动化优化

背景 在生产环境Flink任务资源是用户在实时平台端进行配置,用户本身对于实时任务具体配置多少资源经验较少,所以存在用户资源配置较多,但实际使用不到的情形。比如一个 Flink 任务实际上 4 个并发能够满足业务处理需求,结果用户配置了 16 个并发,这种情况会导致实时计算资…

《Effective Modern C++》- 极精简版 15-21条

本文章属于专栏《业界Cpp进阶建议整理》 继续上篇《Effective Modern C》- 极精简版 5-14条。本文列出《Effective Modern C》的15-21条的个人理解的极精简版本。 Item15、尽量使用constexpr constexpr形容对象 constexpr对象都是const,但是const对象不一定是conste…