当前位置: 首页 > article >正文

【NLP251】BertTokenizer 的全部 API 及 使用案例

BertTokenizer 是 Hugging Face 的 transformers 库中用于处理 BERT 模型输入的分词器类。它基于 WordPiece 分词算法,能够将文本分割成词汇单元(tokens),并将其转换为 BERT 模型可以理解的格式。BertTokenizer 是 BERT 模型的核心工具之一,广泛用于自然语言处理任务。以下是关于 BertTokenizer 的详细介绍,包括其功能、使用方法和一些高级特性。

 功能概述

BertTokenizer 的主要功能包括:

  1. 分词(Tokenization):将输入文本分割成词汇单元(tokens)。

  2. 编码(Encoding):将分词结果转换为 Token ID。

  3. 解码(Decoding):将 Token ID 转换回文本。

  4. 处理特殊标记:自动处理 [CLS][SEP][PAD] 等特殊标记。

  5. 生成模型输入:将文本转换为适合 BERT 模型的输入格式(包括 input_idsattention_mask)。

1. 初始化 BertTokenizer

BertTokenizer 可以通过以下两种方式初始化:

1.1 加载预训练模型的分词器

from transformers import BertTokenizertokenizer = BertTokenizer.from_pretrained("bert-base-chinese")  # 使用预训练模型
  • from_pretrained 方法会自动下载并加载指定预训练模型的分词器配置和词汇表文件。

  • 常见的预训练模型包括 bert-base-uncasedbert-base-casedbert-base-chinese 等。

1.2 加载本地词汇表文件

tokenizer = BertTokenizer.from_pretrained("path/to/vocab.txt")  # 使用本地词汇表
  • 如果你有本地的词汇表文件(vocab.txt),可以直接加载。

2. 分词与编码

2.1 分词

BertTokenizer 使用 WordPiece 分词算法,将输入文本分割成词汇单元。

text = "这是一个测试文本。"
tokens = tokenizer.tokenize(text)
print("分词结果:", tokens)

分词结果示例

 

2.2 编码

将分词结果转换为 Token ID。

token_ids = tokenizer.convert_tokens_to_ids(tokens)  # 将 Token 转换为 ID
print("Token ID:", token_ids)  # 输出: [101, 102, 103, ...]

编码结果示例

2.3 解码

将 Token ID 转换回文本。

decoded_text = tokenizer.decode(token_ids, skip_special_tokens=True)
print("解码结果:", decoded_text)
skip_special_tokens 参数
  • 如果设置为 True,解码时会忽略特殊标记(如 [CLS][SEP])。

  • 如果设置为 False,解码结果会包含这些特殊标记。

解码结果示例

 

2.4 生成模型输入
inputs = tokenizer(text,max_length=60,  # 指定最大长度padding="max_length",  # 填充到最大长度truncation=True,  # 截断超出部分return_tensors="pt"  # 返回 PyTorch 张量
)
print("Input IDs:", inputs["input_ids"])  # 输出: tensor([[101, 102, ...]])
print("Attention Mask:", inputs["attention_mask"])  # 输出: tensor([[1, 1, ...]])

3. 参数解析

BertTokenizer__call__ 方法支持多种参数,用于控制分词和编码的行为。

3.1 参数说明
  • max_length:指定序列的最大长度。

  • padding:是否填充序列。可选值为 "max_length""longest"

  • truncation:是否截断超出 max_length 的部分。

  • return_tensors:返回的数据类型。可选值为 "pt"(PyTorch 张量)、"tf"(TensorFlow 张量)或 "np"(NumPy 数组)。


4. 分词器与模型结合

预处理后的输入可以直接用于 BERT 模型的推理。

from transformers import BertModel# 加载预训练的 BERT 模型
model = BertModel.from_pretrained("bert-base-chinese")# 使用分词器生成的输入进行推理
outputs = model(**inputs)# 输出结果
print("Last Hidden State Shape:", outputs.last_hidden_state.shape)  # 输出: torch.Size([1, 60, 768])
print("Pooler Output Shape:", outputs.pooler_output.shape)  # 输出: torch.Size([1, 768])

5. 完整代码示例

以下是一个完整的示例,展示如何使用 BertTokenizerBertModel 进行文本处理和推理。

from transformers import BertTokenizer, BertModel# 初始化分词器和模型
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
model = BertModel.from_pretrained("bert-base-chinese")# 输入文本
text = "睡一觉醒睡不着咋搞的?"# 生成模型输入
inputs = tokenizer(text,max_length=60,padding="max_length",truncation=True,return_tensors="pt"
)# 模型推理
outputs = model(**inputs)# 输出结果
print("Input IDs:", inputs["input_ids"])
print("Attention Mask:", inputs["attention_mask"])
print("Last Hidden State Shape:", outputs.last_hidden_state.shape)
print("Pooler Output Shape:", outputs.pooler_output.shape)

6. 特殊标记的处理

BERT 分词器会自动处理特殊标记(如 [CLS][SEP]),但也可以手动添加。

# 手动添加特殊标记
tokens = ["[CLS]"] + tokenizer.tokenize(text) + ["[SEP]"]
token_ids = tokenizer.convert_tokens_to_ids(tokens)

7. 多文本处理

BertTokenizer 也支持批量处理多个文本。

texts = ["这是一个测试文本。", "另一个文本。"]
inputs = tokenizer(texts,max_length=60,padding="max_length",truncation=True,return_tensors="pt"
)

8. 获取隐藏层和注意力权重

如果需要获取模型的中间层输出(如隐藏层或注意力权重),可以在模型初始化时设置相关参数。

model = BertModel.from_pretrained("bert-base-chinese", output_hidden_states=True, output_attentions=True)
outputs = model(**inputs)
print("Hidden States:", outputs.hidden_states)  # 每一层的隐藏层输出
print("Attentions:", outputs.attentions)  # 每一层的注意力权重

9. 使用预训练的下游任务模型

如果使用的是针对特定任务(如分类或命名实体识别)的预训练模型,可以直接加载对应的模型。

from transformers import BertForTokenClassification# 加载预训练的命名实体识别模型
tokenizer = BertTokenizer.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")
model = BertForTokenClassification.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")

相关文章:

【NLP251】BertTokenizer 的全部 API 及 使用案例

BertTokenizer 是 Hugging Face 的 transformers 库中用于处理 BERT 模型输入的分词器类。它基于 WordPiece 分词算法,能够将文本分割成词汇单元(tokens),并将其转换为 BERT 模型可以理解的格式。BertTokenizer 是 BERT 模型的核心…...

【MySQL常见疑难杂症】常见文件及其所存储的信息

1、MySQL配置文件的读取顺序 (非Win)/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/mysql/etc/my.cnf、~/.my.cnf 可以通过命令查看MySQL读取配置文件的顺序 [roothadoop01 ~]# mysql --help |grep /etc/my.cnf /etc/my.cnf /etc/mysql/my.c…...

InnoDB如何解决幻读?深入解析MySQL的并发控制机制

--- ## 一、什么是幻读(Phantom Read)? **幻读**是数据库事务隔离性中的一个典型问题,具体表现为: 在同一个事务中,多次执行相同的范围查询(Range Query)时,**后一次…...

栈的深度解析:从基础实现到高级算法应用——C++实现与实战指南

一、栈的核心算法与应用场景 栈的先进后出特性使其在以下算法中表现优异: 括号匹配:校验表达式合法性。表达式求值:中缀转后缀,逆波兰表达式求值。深度优先搜索(DFS):模拟递归调用。单调栈&am…...

IDEA集成DeepSeek

引言 随着数据量的爆炸式增长,传统搜索技术已无法满足用户对精准、高效搜索的需求。 DeepSeek作为新一代智能搜索技术,凭借其强大的语义理解与深度学习能力,正在改变搜索领域的游戏规则。 对于 Java 开发者而言,将 DeepSeek 集成…...

Oracle Trace文件突然增长很多的原因分析及解决办法

Oracle Trace文件突然增长很多可能是由多种原因引起的,例如SQL语句的长时间跟踪、错误的跟踪设置、大量的错误和警告信息等。 一、以下是一些解决Trace文件增长过快的方法: 1.清理旧的Trace文件 可以通过以下命令删除超过一定天数的Trace文件,例如删除3天前的Trace文件: …...

leetcode:627. 变更性别(SQL解法)

难度:简单 SQL Schema > Pandas Schema > Salary 表: ----------------------- | Column Name | Type | ----------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int …...

SQLMesh系列教程-3:SQLMesh模型属性详解

SQLMesh 的 MODEL 提供了丰富的属性,用于定义模型的行为、存储、调度、依赖关系等。通过合理配置这些属性,可以构建高效、可维护的数据管道。在 SQLMesh 中,MODEL 是定义数据模型的核心结构,初学SQLMesh,定义模型看到属…...

Java 中的 HashSet 和 HashMap 有什么区别?

一、核心概念与用途 特性HashSetHashMap接口实现实现 Set 接口(存储唯一元素)实现 Map 接口(存储键值对)数据存储存储单个对象(元素唯一)存储键值对(键唯一,值可重复)典…...

Kubernetes-master 组件

以下是Kubernetes Master Machine的组件。 etcd 它存储集群中每个节点可以使用的配置信息。它是一个高可用性键值存储,可以在多个节点之间分布。只有Kubernetes API服务器可以访问它,因为它可能具有一些敏感信息。这是一个分布式键值存储,所…...

【Leetcode 952】按公因数计算最大组件大小

题干 给定一个由不同正整数的组成的非空数组 nums ,考虑下面的图: 有 nums.length 个节点,按从 nums[0] 到 nums[nums.length - 1] 标记;只有当 nums[i] 和 nums[j] 共用一个大于 1 的公因数时,nums[i] 和 nums[j]之…...

js考核第三题

题三:随机点名 要求: 分为上下两个部分,上方为显示区域,下方为控制区域。显示区域显示五十位群成员的学号和姓名,控制区域由开始和结束两个按钮 组成。点击开始按钮,显示区域里的内容开始滚动,…...

【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.6 RNN与LSTM的变体与发展趋势】

引言:时间序列的魔法钥匙 在时间的长河中,信息如同涓涓细流,绵延不绝。而如何在这无尽的数据流中捕捉、理解和预测,正是循环神经网络(RNN)及其变体长短时记忆网络(LSTM)所擅长的。今天,我们就来一场深度探索,揭开RNN与LSTM的神秘面纱,看看它们如何在时间序列的海洋…...

简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标

作为国产数据库的领军选手,金仓数据库(KingbaseES)凭借其成熟的技术架构和广泛的市场覆盖,在国内众多领域中扮演着至关重要的角色。无论是国家电网、金融行业,还是铁路、医疗等关键领域,金仓数据库都以其卓…...

Java和JavaScript当中的json对象和json字符串分别讲解

Java和JavaScript当中的json对象和json字符串分别讲解 一、Java当中的json对象和json字符串 在 Java 中,JSON 对象和 JSON 字符串有不同的表示和操作方式。 1. JSON 对象: 如果你使用的是 org.json 库,创建 JSON 对象的代码如下&#xff1…...

【第11章:生成式AI与创意应用—11.2 音频与音乐生成的探索与实践】

凌晨三点的录音棚里,制作人小林对着空荡荡的混音台抓狂——广告方临时要求将电子舞曲改编成巴洛克风格,还要保留"赛博朋克"元素。当他在AI音乐平台输入"维瓦尔弟遇见霓虹灯"的瞬间,一段融合羽管键琴与合成器的奇妙旋律喷涌而出,这场人与机器的音乐狂想…...

八、SPI读写XT25数据

8.1 SPI 简介 SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行通信协议,广泛用于嵌入式系统中连接微控制器与外围设备,如传感器、存储器、显示屏等。 主要特点 1. 全双工通信:支持同时发送…...

Visionpro 齿轮测量

效果展示 一、题目要求 求出最大值,最小值,平均值 二、分析 1.首先要进行模板匹配 2.划清匹配范围 3.匹配小三角的模板匹配 4.卡尺 5.用找圆工具 工具 1.CogPMAlignTool 2.CogCaliperTool 3.CogFindCircleTool 4.CogFixtureTool 三、模板匹…...

Ubuntu20.04部署stable-diffusion-webui环境小记

Ubuntu20.04部署stable-diffusion-webui环境小记 文章目录 前言后视镜视角查看安装文档聊聊我踩的那些坑python3.11的安装执行sudo apt update报错显卡驱动内存优化网络问题无法打开系统设置和网络设置查询GPU使用情况 总结 Stable Diffusion web UI A web interface for Stabl…...

索引以及索引底层数据结构

一、什么是索引? 索引(index)是数据库高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B树),这些数据结构以某种方式指向真在…...

开业盛典活动策划方案拆解

道叔来给大家详细剖析咱们方案库里刚收录的这份《蜀大侠火锅店武侠风开业盛典活动策划方案》了,保证让你看完直呼过瘾,收获满满! 一、主题创意:武侠风,直击人心 首先,咱们得夸一下这活动的主题——“XXX‘…...

API 接口自动化

HTTP协议 - 白月黑羽 HTTP协议简介 如果客户端是浏览器,如何在chrome浏览器中查看 请求和响应的HTTP消息?按f12-》network 清除当前信息 响应的消息体在Response里看 点preview,可以看响应的消息体展开的格式 HTTP请求消息 请求头 reques…...

安全测试|SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…...

ML.NET库学习008:使用ML.NET进行心脏疾病预测模型开发

文章目录 ML.NET库学习008:使用ML.NET进行心脏疾病预测模型开发1. 项目主要目的和原理2. 项目概述实现的主要功能:主要流程步骤:关键技术: 3. 主要功能和步骤数据加载与路径处理模型训练与评估模型保存与加载 4. 代码中的数据结构…...

了解rtc_time64_to_tm()和rtc_tm_to_time64()

rtc_time64_to_tm()和rtc_tm_to_time64()主要用于RTC的驱动程序,在Linux外部RTC驱动中较常见。 打开“drivers/rtc/lib.c” /* * rtc_time64_to_tm - Converts time64_t to rtc_time. * Convert seconds since 01-01-1970 00:00:00 to Gregorian date. */ //将ti…...

verilog程序设计及SystemVerilog验证

1.Verilog测试程序设计基础 1.1Testbench及其结构 在仿真的时候Testbench用来产生测试激励给待验证设计( Design Under Verification, DUV),或者称为待测设计(Design UnderTest, DUT) 。 测试程序的一般结构: Testbench是一个测试平台,信号…...

智能编程助手功能革新与价值重塑之:GitHub Copilot

引言: GitHub Copilot 的最新更新为开发者带来了显著变化,其中 Agent Mode 功能尤为引人注目。该模式能够自动识别并修复代码错误、自动生成终端命令,并具备多级任务推理能力,这使得开发者在开发复杂功能时,可大幅减少…...

物联网行业通识:从入门到深度解析

物联网行业通识:从入门到深度解析 (图1:物联网生态示意图) 一、引言:万物互联时代的到来 根据IDC最新预测,到2025年全球物联网设备连接数将突破410亿,市场规模达1.1万亿美元。物联网&#xff…...

ABP - 事件总线之分布式事件总线

ABP - 事件总线之分布式事件总线 1. 分布式事件总线的集成1.2 基于 RabbitMQ 的分布式事件总线 2. 分布式事件总线的使用2.1 发布2.2 订阅2.3 事务和异常处理 3. 自己扩展的分布式事件总线实现 事件总线可以实现代码逻辑的解耦,使代码模块之间功能职责更清晰。而分布…...

【硬件设计细节】缓冲驱动器使用注意事项

一、缓冲驱动器核心功能与选型原则 信号增强与隔离 驱动能力匹配:根据负载电流需求选择缓冲器,例如CMOS缓冲器驱动能力通常为4-8mA,需搭配大电流负载时选用图腾柱输出或专用驱动芯片(如TI的SN74LVC系列)。电压域转换&…...