NLP的预处理数据
处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字,然后转换为张量,成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。
如果您计划使用预训练模型,重要的是使用与之关联的预训练Tokenizer。这确保文本的拆分方式与预训练语料库相同,并在预训练期间使用相同的标记-索引的对应关系(通常称为词汇表-vocab)。

开始使用AutoTokenizer.from_pretrained()方法加载一个预训练tokenizer。这将下载模型预训练的vocab:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")
然后将您的文本传递给tokenizer:
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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
tokenizer返回一个包含三个重要对象的字典:
-
input_ids 是与句子中每个
token对应的索引。 -
attention_mask 指示是否应该关注一个
token。 -
token_type_ids 在存在多个序列时标识一个
token属于哪个序列。
通过解码 input_ids 来返回您的输入:
tokenizer.decode(encoded_input["input_ids"])
如您所见,tokenizer向句子中添加了两个特殊token - CLS 和 SEP(分类器和分隔符)。并非所有模型都需要特殊token,但如果需要,tokenizer会自动为您添加。
如果有多个句子需要预处理,将它们作为列表传递给tokenizer:
from transformers import AutoTokenizertokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")batch_sentences = [["But what about second breakfast?","i am a sentence"],"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, 178, 1821, 170, 5650,
102, 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': [[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 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]]}
注意token_type_ids在上面的例子中有体现。101与102是CLS与SEP的id,对应句子的开始与结束。
1.2.3.1.1 填充
句子的长度并不总是相同,这可能会成为一个问题,因为模型输入的张量需要具有统一的形状。填充是一种策略,通过在较短的句子中添加一个特殊的padding token,以确保张量是矩形的。
将 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, 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': [[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': [[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]]}
1.2.3.1.2 截断
另一方面,有时候一个序列可能对模型来说太长了。在这种情况下,您需要将序列截断为更短的长度。
将 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]],'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, 0, 0, 0, 0, 0]],'attention_mask': [[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]]}
查看填充和截断概念指南,了解更多有关填充和截断参数的信息。
1.2.3.1.3 构建张量
最后,tokenizer可以返回实际输入到模型的张量。
将 return_tensors 参数设置为 pt(对于PyTorch)或 tf(对于TensorFlow):
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]])}相关文章:
NLP的预处理数据
处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字,然后转换为张量,成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。 如果您计划使用预训练模型,重要的是使用与之关联的…...
【DeepSeek问答】QProcess::start是异步的吗?会使UI卡顿吗?
好的,我现在需要回答用户关于QProcess::start是否是异步的,以及它是否会导致UI卡顿的问题。用户之前已经询问过如何开发一个调用7-Zip的Qt应用,并且我给出了示例代码。现在用户可能在使用过程中遇到了问题,或者想更深入了解QProce…...
【Java项目】基于Spring Boot的体质测试数据分析及可视化设计
【Java项目】基于Spring Boot的体质测试数据分析及可视化设计 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:体质测试数据分析及可视化设计是一个基于Web的在线平台,主要分为前台和后台两大功能模块。前台功能模…...
JAVA-如何理解Mysql的索引
一、索引的概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用(指针/地址)。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。 二、索引是什么,用来干嘛 数据库中的表、数据、索引之间的…...
VUE向外暴露文件,并通过本地接口调用获取,前端自己生成接口获取public目录里面的文件
VUE中,如果我们想对外暴露一个文件,可以在打包之后也能事实对其进行替换,我们只需要把相关文件放置在public目录下即可,可以放置JSON,Excel等文件 比如我在这里放置一个other文件 我们可以直接在VUE中使用axios去获取…...
京准电钟:NTP精密时钟服务器在自动化系统中的作用
京准电钟:NTP精密时钟服务器在自动化系统中的作用 京准电钟:NTP精密时钟服务器在自动化系统中的作用 NTP精密时钟服务器在自动化系统中的作用非常重要,特别是在需要高精度时间同步的场景中。NTP能够提供毫秒级的时间同步精度,这…...
CSDN年度评选揭晓,永洪科技AI技术与智能应用双星闪耀
近日,永洪科技在CSDN(中国专业开发者社区)的年度评选中,凭借在人工智能技术创新与vividime在行业应用中的卓越表现,一举斩获“人工智能企业”及“智能应用”双料大奖。这一荣誉不仅彰显了永洪科技在AI领域的领先地位&a…...
vscode settings(二):文件资源管理器编辑功能主题快捷键
参考资料 Visual Studio Code权威指南 by 韩骏 一. 文件资源管理器 1.1 文件资源管理器隐藏文件夹 默认情况下,Visual Studio Code会在文件资源管理器中隐藏一些文件夹(如.git文件夹)。可以通过files.exclude来配置要被隐藏的文件和文件…...
Ubuntu本地使用AnythingLLM
1.介绍 AnythingLLM是一个全栈应用程序,由Mintplex Labs Inc.开发,旨在将任何文档、资源或内容片段转换为大语言模型(LLM)在聊天中可以利用的相关上下文。 2.在ubuntu本地安装 打开终端并运行: curl -fsSL https:/…...
MybatisPlus-注解
TableName设定表名 1. MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决 定,且默认操作的表名和实体类型的类名一致 2. 若实体类类型的类名和要操作的表的表名不一致,访问数据库表将会报错 3. 在实体类上添加…...
【多模态大模型学习】位置编码的学习记录
【多模态大模型学习】位置编码的学习记录 0.前言1. sinusoidal编码1.0 数学知识——复数1.0.1 复数乘法、共轭复数1.0.2 复数的指数表示 1.1 sinusoidal编码来历1.2 代码实现 2. Rotary Positional Embedding (RoPE) ——旋转位置编码2.1 RoPE来历2.2 代码实现2.2.1 GPT-J风格的…...
在MAC上面通过HomeBrew安装node和npm@指定版本
文章目录 搜索可用的 Node.js 版本安装指定版本的 Node.js将 node22 添加到 PATH验证安装是否成功给npm配置淘宝镜像 搜索可用的 Node.js 版本 liujinglong192 ~ % brew search node > Formulae libbitcoin-node node-build node20 nodeenv linod…...
基于YOLO11深度学习的医学X光骨折检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
HDFS扩缩容及数据迁移
1.黑白名单机制 在HDFS中可以通过黑名单、白名单机制进行节点管理,决定数据可以复制/不可以复制到哪些节点。 黑名单通常是指在HDFS中被标记为不可用或不可访问的节点列表,这些节点可能由于硬件故障、网络问题或其他原因而暂时或永久性地无法使用。当一…...
【2025信息安全软考重点考点归纳】实时更新
重点页:第14章 恶意代码防范技术原理 页码:271 病毒载体及其对应案例 病毒隐秘载体病毒案例Word文档Melissa照片库尔尼科娃电子邮件“求职信”病毒网页NIMDA病毒 重点页:第6章 认证技术原理与应用 页码:125 Kerberos 认证技术 Kerberos是…...
在生产环境中部署和管理 PostgreSQL:实战经验与最佳实践
在生产环境中部署和管理 PostgreSQL:实战经验与最佳实践 大家好,我是Echo_Wish。今天我们来聊一聊如何在生产环境中部署和管理 PostgreSQL。作为一种广泛使用的开源数据库,PostgreSQL 因其强大的功能和灵活性,成为许多开发者和运维人员的首选数据库。无论是在小型应用还是…...
使用OpenCV实现帧间变化检测:基于轮廓的动态区域标注
在计算机视觉中,帧间差异检测(frame differencing)是一种常用的技术,用于检测视频流中的动态变化区域。这种方法尤其适用于监控、运动分析、目标追踪等场景。在这篇博客中,我们将通过分析一个基于OpenCV的简单帧间差异…...
rabbitmq单向ssl认证配置与最佳实践(适用于各大云厂商)
背景 这里后补直接上代码 最佳实践 主要从两个方面保证消息不丢失 RabbitMQ方面 创建队列时开启持久化创建交换器时开启持久化创建镜像队列(可选)开启延迟队列(可选) 代码层面 开启生产者到交换器回调参数开启交换器到队列…...
解决 Tkinter 在 Linux 上 Combobox 组件导致焦点丢失问题
在使用 Tkinter 开发 GUI 应用程序时,我们经常会遇到一些棘手的问题,尤其是在 Linux 系统上。最近,我在开发一个项目时就遇到了一个非常有趣且令人困惑的问题:当我在一个弹出窗口中使用 grab_set() 方法锁定窗口以避免用户操作底层…...
JVM 简单内存结构及例子
Java虚拟机(JVM)内存结构是Java程序运行时内存分配和管理的方式。JVM内存结构通常分为以下几个主要部分: 方法区(Method Area): 存储类信息、常量、静态变量以及即时编译后的代码等数据。 这部分内存在JVM启…...
3个颠覆性技巧:用手柄打造你的跨平台B站娱乐中心
3个颠覆性技巧:用手柄打造你的跨平台B站娱乐中心 【免费下载链接】wiliwili 第三方B站客户端,目前可以运行在PC全平台、PSVita、PS4 、Xbox 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili 你是否厌倦了手机小…...
[具身智能-354]:定制化无人机系统的组成
无人机系统整体采用“平台-链路-指控-保障”一体化架构,主要由以下核心分系统、软件数字架构及配套接口模块构成:一、 无人机飞行平台机体与起降结构:高强度轻量化机身、起落架及高原/大风环境适应性设计,支撑安全起降与地面滑行。…...
434649494
4546465484...
Qwen3-TTS-Tokenizer-12Hz入门到精通:掌握音频编解码核心操作
Qwen3-TTS-Tokenizer-12Hz入门到精通:掌握音频编解码核心操作 1. 音频编解码技术概述 1.1 什么是音频编解码器 音频编解码器是将音频信号在数字域进行压缩和还原的技术组件。它通过特定的算法将原始音频数据转换为更紧凑的表示形式(编码)&…...
Lychee重排序模型与YOLOv8强强联合:智能相册多模态检索系统开发指南
Lychee重排序模型与YOLOv8强强联合:智能相册多模态检索系统开发指南 1. 引言 你有没有遇到过这样的情况:手机里有几千张照片,想找一张特定的图片却像大海捞针?或者想用文字描述来搜索图片,结果却总是不尽如人意&…...
Graphormer开源大模型部署案例:从RDKit处理SMILES到Gradio交互预测的完整链路
Graphormer开源大模型部署案例:从RDKit处理SMILES到Gradio交互预测的完整链路 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4…...
从TUV到UL:手把手教你为你的开关电源产品选择合适的安规认证路径
开关电源全球市场准入指南:如何构建最优安规认证矩阵 当一款开关电源产品从设计图纸走向国际市场时,安规认证就像通关文牒,决定着产品能否顺利进入目标市场。但面对欧洲CE、北美UL、日本PSE等不同体系的认证要求,企业常陷入两难&a…...
放弃CMSIS-DSP?实测STM32H7优化RNNoise神经网络运算的几种思路与效果对比
STM32H7神经网络加速实战:从CMSIS-DSP到手工优化的性能突围 在嵌入式音频处理领域,实时噪声抑制一直是工程师们面临的挑战。当我们将目光投向STM32H7这类高性能微控制器时,往往会期待其Cortex-M7内核与双精度FPU能轻松应对神经网络计算。但现…...
uniapp结合微信公众号H5静默授权:从本地调试到获取openid的完整实践
1. 理解静默授权与openid的核心逻辑 静默授权是微信公众号开发中获取用户基础信息的常用方式,特别适合不需要用户主动授权的场景。与需要用户点击确认的snsapi_userinfo授权不同,snsapi_base授权可以在用户无感知的情况下完成。这个过程中最关键的产出物…...
Arduino Uno开发板入门:从点亮第一个LED到串口通信(附完整代码)
Arduino Uno开发板入门:从点亮第一个LED到串口通信(附完整代码) 1. 初识Arduino Uno:硬件架构与开发环境搭建 当你第一次拿到这块蓝色的小板子时,可能会好奇它如何成为创客世界的明星。Arduino Uno采用Atmega328P微控…...
