Preprocess

Preprocess数据预处理

文本

使用Tokenizer将文本转换为标记序列,创建标记的数值表示,并将它们组装成张量。

预处理文本数据的主要工具是标记器。标记器根据一组规则将文本拆分为标记。标记被转换为数字,然后转换为张量,这些张量成为模型输入。模型所需的任何其他输入都由标记器添加。

from transformers import AutoTokenizertokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")encoded_input = tokenizer("Do not meddle in the affairs of wizards, for they are subtle and quick to anger.")
print(encoded_input)# 输出结果
{ 'input_ids' : [ 101 , 2079 , 2025 , 19960 , 10362 , 1999 , 1996 , 3821 , 1997 , 16657 , 1010 , 2005 , 2027 , 2024 , 11259 , 1998 , 4248 , 2000 , 4963 , 1012 , 102 ],'token_type_ids' : [ 0 , 0 , 0 , 0 , 0 , 0 , 0000000000000000 ]' attention_mask '[ 111111111111111111111111111 ] }
'''
input_ids是句子中每个标记对应的索引。
tention_mask表示是否应该关注一个标记。
当有多个序列时,token_type_ids标识一个 token 属于哪个序列。
'''
# 通过解码返回输入的内容
tokenizer.decode(encoded_input["input_ids"])
'​​[CLS] 不要干涉巫师的事务,因为他们很狡猾,而且很容易发怒。[SEP]'

padding填充

句子的长度并不总是相同的,但是张量(模型输入)需要具有统一的形状。因此填充是一种通过向较短的句子添加特殊填充标记来确保张量为矩形的策略。

将参数设置padding为True填充批次中较短的序列以匹配最长的序列;

batch_sentences = ["But what about second breakfast?","Don't think he knows about second breakfast, Pip.","What about elevensies?",
]
encoded_input = tokenizer(batch_sentences, padding=True)
print(encoded_input)
# 输出结果
{ 'input_ids' : [[ 101 , 1252 , 1184 , 1164 , 1248 , 6462 , 136 , 102 , 0 , 0 , 0 , 0 , 0 , 0 ] , [ 101 , 1790 , 112 , 189 , 1341 , 1119 , 3520 , 1164 , 1248 , 6462 , 117 , 21902 , 1643 , 119 , 102 ] , [ 101 , 1327 , 1164 , 5450 , 23434 , 136 , 102 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]] , ' token_type_ids ' : [ [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , [​​0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]] , ' attention_mask ' : [ [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 ] , [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] , [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 ,​​​​​​​​0 , 0 , 0 ]]}

Truncation 截断

另一方面,有时序列可能太长,模型无法处理。在这种情况下,您需要将序列截断为较短的长度。

将参数设置truncation为True将序列截断为模型接受的最大长度;

batch_sentences = ["But what about second breakfast?","Don't think he knows about second breakfast, Pip.","What about elevensies?",
]
encoded_input = tokenizer(batch_sentences, padding=True, truncation=True)
print(encoded_input)
# 输出结果
{ 'input_ids' : [[ 101 , 1252 , 1184 , 1164 , 1248 , 6462 , 136 , 102 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ], [ 101 , 1790 , 112 , 189 , 1341 , 1119 , 3520 , 1164 , 1248 , 6462 , 117 , 21902 , 1643 , 119 , 102 ], [ 101,1327,1164,5450,23434,136,102,0,0,0,0,0,0,0,0,0,0 ] ] , ' token_type_ids '[ [ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ] , [ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ] ,​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​[ 000000000000000 ] ]' attention_mask '[ [ 111111111000000 ][ 1111111111111 ][ 11111110000000 ] ] }

构建张量

基于Pytorch构建

batch_sentences = ["But what about second breakfast?","Don't think he knows about second breakfast, Pip.","What about elevensies?",
]
encoded_input = tokenizer(batch_sentences, padding=True, truncation=True, return_tensors="pt")
print(encoded_input)
#输出结果
{'input_ids': tensor([[101, 1252, 1184, 1164, 1248, 6462, 136, 102, 0, 0, 0, 0, 0, 0, 0],[101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102],[101, 1327, 1164, 5450, 23434, 136, 102, 0, 0, 0, 0, 0, 0, 0, 0]]),'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]),'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]])}

基于TensorFlow构建

batch_sentences = ["But what about second breakfast?","Don't think he knows about second breakfast, Pip.","What about elevensies?",
]
encoded_input = tokenizer(batch_sentences, padding=True, truncation=True, return_tensors="tf")
print(encoded_input)
# 输出结果
{'input_ids': <tf.Tensor: shape=(2, 9), dtype=int32, numpy=
array([[101, 1252, 1184, 1164, 1248, 6462, 136, 102, 0, 0, 0, 0, 0, 0, 0],[101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102],[101, 1327, 1164, 5450, 23434, 136, 102, 0, 0, 0, 0, 0, 0, 0, 0]],dtype=int32)>,'token_type_ids': <tf.Tensor: shape=(2, 9), dtype=int32, numpy=
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)>,'attention_mask': <tf.Tensor: shape=(2, 9), dtype=int32, numpy=
array([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)>}

不同的管道在其 __call__() 中对标记器参数的支持不同。text-2-text-generation 管道仅支持(即传递)truncationtext-generation 管道支持 max_lengthtruncationpaddingadd_special_tokens。在 fill-mask 管道中,标记器参数可以在 tokenizer_kwargs 参数(字典)中传递。

音频

对于音频任务,您需要一个特征提取器来为模型准备数据集。特征提取器旨在从原始音频数据中提取特征,并将其转换为张量。

from datasets import load_dataset, Audio
# 从公共数据中下载数据
dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")
# audio列会自动加载并重新采样音频文件
dataset[0]["audio"]
# 输出结果
{ 'array' : array([ 0.         ,   0.00024414 , - 0.00024414 , ..., - 0.00024414 ,0.         ,   0.         ], dtype=float32),'path' : '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav' ,'sampling_rate' : 8000 }
"""
array是以一维数组形式加载(并可能重新采样)的语音信号。
path指向音频文件的位置。
sampling_rate指每秒测量语音信号中的数据点数。
"""

改变采样频率的方法有两种:

# 在加载数据时可以规定采样频率
dataset = dataset.cast_column("audio", Audio(sampling_rate=16_000))# 在传递给特征提取时可以规定采样频率
audio_input = [dataset[0]["audio"]["array"]]
feature_extractor(audio_input, sampling_rate=16000)

如果存在数据的尺寸不合适,可以采用填充或者截断来处理可变序列;

# 创建一个函数来预处理数据集,使音频样本具有相同的长度。指定最大样本长度,特征提取器将填充或截断序列以匹配它;
def preprocess_function(examples):audio_arrays = [x["array"] for x in examples["audio"]]inputs = feature_extractor(audio_arrays,sampling_rate=16000,padding=True,max_length=100000,truncation=True,)return inputs

计算机视觉

对于计算机视觉任务,您需要一个图像处理器来为模型准备数据集。图像预处理包括几个步骤,将图像转换为模型所需的输入。这些步骤包括但不限于调整大小、规范化、颜色通道校正以及将图像转换为张量。

图像预处理通常遵循某种形式的图像增强。图像预处理和图像增强都会转换图像数据,但它们的用途不同:

图像增强可以改变图像,有助于防止过度拟合并提高模型的稳健性。您可以发挥创意来增强数据 - 调整亮度和颜色、裁剪、旋转、调整大小、缩放等。但是,请注意不要通过增强改变图像的含义。
图像预处理可确保图像与模型的预期输入格式相匹配。在微调计算机视觉模型时,必须像最初训练模型时一样对图像进行预处理。
可以使用任何库来进行图像增强。对于图像预处理,请使用ImageProcessor与模型相关的库。

from transformers import AutoImageProcessorimage_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")# 一些图像增强的功能
from torchvision.transforms import RandomResizedCrop, ColorJitter, Composesize = (image_processor.size["shortest_edge"]if "shortest_edge" in image_processor.sizeelse (image_processor.size["height"], image_processor.size["width"])
)_transforms = Compose([RandomResizedCrop(size), ColorJitter(brightness=0.5, hue=0.5)])

多模态数据

对于涉及多模态输入的任务,需要一个处理器来为模型准备数据集。处理器将两个处理对象(例如标记器和特征提取器)结合在一起。

使用AutoProcessor.from_pretrained()加载处理器:


from transformers import AutoProcessorprocessor = AutoProcessor.from_pretrained("facebook/wav2vec2-base-960h")

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

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

相关文章

【js面试题】JavaScript 中箭头函数与普通函数的深度剖析

在 JavaScript 编程的世界里&#xff0c;函数是极为重要的组成部分。而随着 ES6 的出现&#xff0c;箭头函数成为了 JavaScript 函数家族中的新成员。它与传统的普通函数有着诸多的不同之处&#xff0c;这些差异深刻地影响着我们编写代码的方式以及代码的执行逻辑。本文将对 Ja…

【漫话机器学习系列】Adaboost算法

Adaboost&#xff08;Adaptive Boosting&#xff09;是一种经典的集成学习方法&#xff0c;主要思想是通过将多个弱学习器&#xff08;通常是简单模型&#xff0c;如决策树桩&#xff09;加权组合&#xff0c;来提升整体模型的预测能力。Adaboost 是一种自适应的学习方法&#…

SQL靶场第四关

sql靶场第四关攻略 输入?id1页面正常 输入?id1发现页面也正常 输入?id1"&#xff0c;页面异常&#xff0c;说明存在sql报错注入 在输入?id1" --页面还是报错 1.判断闭合点 我们需要找到闭合点&#xff0c;尝试在双引号后面加个) 输入?id1") --我们发现…

Trunk链路操作题

Trunk链路操作题 论证&#xff1a;

Alogrithm:三色棋

1. 说明 三色旗的问题最早由 E.W.Diikstra 所提出&#xff0c;他所使用的用语为 Dutch Nation Flag&#xff08;Dijkstra 为荷兰人&#xff09;&#xff0c;而多数的作者则使用 Three-Color Flag 来称之。 假设有一条绳子&#xff0c;上面有红、白、蓝三种颜色的旗子&#xff0…

需要排序的子数组

题目描述 给定一个无序数组arr&#xff0c;求出需要排序的最短子数组长度 要求&#xff1a;O(N) 如输入&#xff1a;arr{2,3,7,5,4,6}&#xff0c;返回4&#xff0c;因为只有{7,5,4,6}需要排序。 分析 以{2,3,7,5,4,6,8,9}为例&#xff1a; 前端小于最小波谷&#xff08;3…

Python酷库之旅-第三方库Pandas(154)

目录 一、用法精讲 701、pandas.Timestamp.utcnow方法 701-1、语法 701-2、参数 701-3、功能 701-4、返回值 701-5、说明 701-6、用法 701-6-1、数据准备 701-6-2、代码示例 701-6-3、结果输出 702、pandas.Timestamp.utcoffset方法 702-1、语法 702-2、参数 70…

如何启动神通数据库?神通数据库的启动方式一共有几种?

简单总结&#xff0c;神通数据库启动有三种方式&#xff1a; 1、dba管理工具方式 2、服务方式 &#xff08;1&#xff09;service oscardb_OSRDBd restart &#xff08;2&#xff09;/etc/init.d/oscardb_OSRDBd restart &#xff08;3&#xff09;systemctl start oscardb_OS…

Modbus Poll的使用

最近从串口调试助手接触到了Modbus Poll&#xff0c;一开始用的时候有些生疏&#xff0c;了解之后不得不说真香。 相对于串口调试助手&#xff0c;有些设备厂家会给一些点表和指令码&#xff0c;有些也可以通过modbus协议解析出来&#xff0c;相对来说&#xff0c;使用Modbus …

第四学期-智能数据分析-期末复习题

智能数据分析期末复习&#xff08;2024春&#xff09; 【考试形式】&#xff1a;闭卷&#xff0c;90分钟&#xff0c;笔试 【题型分布】&#xff1a; 单选题10题&#xff0c;每题3分&#xff0c;共计30分 判断题10题&#xff0c;每题2分&#xff0c;共计20分 填空题5题&…

总结的一些MySql面试题

目录 一&#xff1a;基础篇 二&#xff1a;索引原理和SQL优化 三&#xff1a;事务原理 四&#xff1a;缓存策略 一&#xff1a;基础篇 1&#xff1a;定义&#xff1a;按照数据结构来组织、存储和管理数据的仓库&#xff1b;是一个长期存储在计算机内的、有组织的、可共享 的…

C#实现一个HttpClient集成通义千问-开发前准备

集成一个在线大模型&#xff08;如通义千问&#xff09;&#xff0c;来开发一个chat对话类型的ai应用&#xff0c;我需要先了解OpenAI的API文档&#xff0c;请求和返回的参数都是以相关接口文档的标准进行的 相关文档 OpenAI API文档 https://platform.openai.com/docs/api-…

python游戏设计---飞机大战

1.前言 上次做飞机大战游戏有人这么说&#xff1a; 好好好&#xff01;今天必须整一个&#xff0c;今天我们来详细讲解一下&#xff0c;底部找素材文件下载&#xff01;&#xff01;&#xff01; 2.游戏制作 目录如下&#xff1a; 1.导入的包 import pygame import sys imp…

Final Vision Get Picture Pos Send 2 Python Control Robot

import tkinter as tk from tkinter import messagebox, filedialog from tkinter import ttk import socket import threading import subprocess from datetime import datetime from PIL import Image, ImageTk import time # 全局变量 client_socket None connected Fal…

Spring框架-IoC的使用(基于XML和注解两种方式)

一、Spring IoC使用-基于XML 1 IoC使用-基于XML 使用SpringIoC组件创建并管理对象 1.1 创建实体类 package com.feng.ioc.bean;import java.util.Date;/*** program: spring-ioc-demo1* description: 学生实体类* author: FF* create: 2024-12-04 18:53**/ public class Stud…

C++编程控制舵机的实现与应用

在嵌入式编程和物联网应用中&#xff0c;舵机是一种非常重要的执行器&#xff0c;广泛应用于机器人、遥控玩具、机械臂、摄像头云台等多个领域。舵机不仅能够精准地控制角度位置&#xff0c;还能在一定的工作范围内持续保持该位置。在本篇文章中&#xff0c;我们将站在 C 编程教…

对于MySQL中视图的相关实验

以下用该表举例&#xff1a; /*Table structure for table employees */ DROP TABLE IF EXISTS employees; CREATE TABLE employees ( employee_id int(6) NOT NULL DEFAULT 0, first_name varchar(20) DEFAULT NULL, last_name varchar(25) NOT NULL, email varc…

day-90 使数组为空的最少操作次数

思路 统计每个数字出现的次数&#xff0c;计算每个数字的操作次数&#xff0c;将所有操作次数累加返回即可 解题过程 对于每个数字&#xff08;假设出现次数num&#xff09;,如果num等于1,返回-1&#xff1b;如果num%3等于0&#xff0c;返回num/3&#xff1b;如果num%3不等于0…

6.xftp使用教程

xftp用于windows和linux之间进行文件互传 1.先安装xftp软件&#xff0c;并双击打开 2.文件 – 新建 3.配置参数 4.连接 5.把需要的文件扯到右边

[nmap] 端口扫描工具的下载及详细安装使用过程(附有下载文件)

前言 nmap网络连接端扫描软件&#xff0c;用于主机发现、端口扫描、版本侦测、操作系统侦测 namp 链接&#xff1a;https://pan.quark.cn/s/4ea55a2d62c3 提取码&#xff1a;aXnr 下载压缩包后解压 &#xff01;&#xff01;安装路径不要有中文 链接失效&#xff08;可能被官…