tokenizer的用法

news2025/7/15 14:51:39

下面介绍下基于 Hugging Face Transformers 库中 tokenizer(分词器)的主要用法和常用方法,帮助你了解如何在各种场景下处理文本。这里以 AutoTokenizer 为例,但大多数模型对应的 tokenizer 用法大同小异。

─────────────────────────────

  1. 加载 Tokenizer

• 自动加载(AutoTokenizer)
使用 AutoTokenizer 可以根据模型名称或本地路径快速加载对应的分词器:
  from transformers import AutoTokenizer
  tokenizer = AutoTokenizer.from_pretrained(“模型名称或者本地路径”)
例如:
  tokenizer = AutoTokenizer.from_pretrained(“bert-base-uncased”)
或加载本地模型目录:
  tokenizer = AutoTokenizer.from_pretrained(“/home/zhangchenlong.8/resources/qwen2.53b”)

• 指定参数
加载时可以传入一些参数,如是否返回 fast 版本(更高效的C++实现),是否下载缓存等。
  tokenizer = AutoTokenizer.from_pretrained(“模型名称”, use_fast=True)

─────────────────────────────
2. 基本编码方法(encode / call

• 单条文本编码为 token id 列表
  token_ids = tokenizer.encode(“Hello world”, add_special_tokens=True)
  注意:add_special_tokens 参数控制是否在结果中加入模型所需的特殊 token(例如 [CLS], [SEP])

• 编码多条文本(Batch Encoding)
  encoded = tokenizer([“Hello world”, “How are you?”], padding=True, truncation=True, return_tensors=“pt”)
  返回结果通常是一个字典,包含 input_ids, attention_mask 等(当 return_tensors 指定返回 tensor 时)
  如果只需要 id 列表,可以不指定返回 tensor:
  encoded = tokenizer([“Hello world”, “How are you?”], padding=True, truncation=True)

call 方法
由于 tokenizer 类实现了 call 方法,因此直接传入文本也可以:
  result = tokenizer(“Hello world”, add_special_tokens=True)
最终返回字典形式:{“input_ids”: […], “attention_mask”: […]},有时还会包含其他信息比如 “token_type_ids”、“offset_mapping”(用于对齐)等。

─────────────────────────────
3. 编码参数详解

在调用 encode、batch_encode_plus 或 call 方法时,可以传入的常用参数有:
 • add_special_tokens: 是否在编码时加入特殊标记,如 [CLS] 或 [SEP]
 • padding: 是否对输出进行补齐(填充)。例如 padding=True 会补齐到当前 batch 内最大长度;可以传入 “max_length” 强制到固定长度。
 • truncation: 是否截断超过指定最大长度的文本。
 • max_length: 最大长度
 • return_tensors: 指定返回类型,如 “pt”(PyTorch tensor)、“tf” 或 “np”(NumPy 数组)
 • return_attention_mask: 是否返回 attention mask 信息
 • return_token_type_ids: 是否返回 token type ids
 • verbose: 控制消息显示
 • add_prefix_space: 一些基于字节对编码(BPE)的 tokenizer 可能需要(如 GPT-2)

─────────────────────────────
4. 解码(decode)

转换 token id 序列回文本:
  text = tokenizer.decode(token_ids, skip_special_tokens=True)
参数 skip_special_tokens=True 可以过滤掉 [CLS]、[SEP] 等特殊 token,使输出更纯净。

如果需要对一批 token 序列进行解码,可以使用 decode 方法配合循环,或使用 batch_decode 方法:
  texts = tokenizer.batch_decode(list_of_token_ids, skip_special_tokens=True)

将 prefix_tokens 转换为 tokens

prefix_tokens_str = tokenizer.convert_ids_to_tokens(prefix_tokens)

─────────────────────────────
5. 高阶功能

• 获取词汇表
可以通过 tokenizer.vocab 访问词典(部分 tokenizer 不支持此属性);或使用 tokenizer.get_vocab() 方法:
  vocab = tokenizer.get_vocab()
返回字典形式:{token: id, …}

• 分词(Tokenization)
有时只需要知道文本被划分成哪些 token(通常是字符串),用 tokenizer.tokenize():
  tokens = tokenizer.tokenize(“Hello world”)
有的是基于 subword 或 SentencePiece 实现,返回结果可能包含 ## 或前置空格,取决于模型设计。

• 映射与偏移信息
有时需要知道每个 token 在原字符文本中的位置,可传入参数 return_offsets_mapping:
  encoded = tokenizer(“Hello world”, return_offsets_mapping=True)
  encoded[“offset_mapping”] 即是每个 token 对应的 (start, end) 位置信息。

• 处理特殊场景
  – 对于长文本自动截断和溢出(overflow tokens),可以用参数 return_overflowing_tokens=True
  – 对于分词后需要中英文对齐信息,也可以查看 tokenizer 的高级用法和文档说明。

─────────────────────────────
6. Tokenizer 的用途

• 数据预处理
在模型训练前,将原始文本转换为模型所需的 token id 序列。

• 后处理(解码)
将模型输出的 id 序列转换回可读文本。

• 调试和分析
通过 tokenization 可以检查是不是特殊字符没有正确处理,或测试不同 tokenizer 对同一文本的分词效果。

• 自定义处理
可以基于现有 tokenizer 进行修改,如添加自定义的 token(tokenizer.add_tokens([“新词”])),从而扩展词汇表,此时可调用 tokenizer.resize_token_embeddings(model) 更新模型嵌入层。

─────────────────────────────
7. 注意事项

• 模型预训练时通常使用了特定的 tokenizer,使用时最好保证加载相同版本,确保 token id 对应关系一致。
• 有的 tokenizer 有 fast 版本(基于 Rust 的 tokenizers 库实现),具备更高效率和更多功能,如 offset mapping、动态 padding 等。
• 部分 tokenizer 对空格、标点等处理与我们直觉可能不同(比如 GPT-2 在 token 开头会有空格提示),需要熟悉模本的使用说明。
• 当用于多语言或特殊场景时,有时需要调整 tokenizer 的参数(例如 normalization、pre-tokenization、post-processing)。

─────────────────────────────
总结

以上即介绍了 Hugging Face 中 tokenizer 的加载、编码、解码、参数设置以及进阶功能。具体应用时建议参阅官方文档(https://huggingface.co/transformers/main_classes/tokenizer.html),结合你使用的模型的特点,来调试和完善你的文本处理流程。

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

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

相关文章

EDI 如何与 ERP,CRM,WMS等系统集成

在数字化浪潮下,与制造供应链相关产业正加速向智能化供应链转型。传统人工处理订单、库存和物流的方式已难以满足下单客户对响应速度和数据准确性的严苛要求。EDI技术作为企业间数据交换的核心枢纽,其与ERP、CRM、WMS等业务系统的深度集成,成…

面试踩过的坑

1、 “”和equals 的区别 “”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重…

多物理场耦合低温等离子体装置求解器PASSKEy2

文章目录 PASSKEy2简介PASSKEY2计算流程PASSKEy2 中求解的物理方程电路模型等离子体模型燃烧模型 PASSKEy2的使用 PASSKEy2简介 PASSKEy2 是在 PASSKEy1 的基础上重新编写的等离子体数值模拟程序。 相较于 PASSKEy1, PASSKEy2 在具备解决低温等离子体模拟问题的能力…

视频噪点多,如何去除画面噪点?

你是否遇到过这样的困扰?辛辛苦苦拍摄的视频,导出后却满屏 “雪花”,夜景变 “噪点盛宴”,低光环境秒变 “马赛克现场”? 无论是日常拍摄的vlog、珍贵的家庭录像,还是专业制作的影视作品,噪点问…

09前端项目----分页功能

分页功能 分页器的优点实现分页功能自定义分页器先实现静态分页器调试分页器动态数据/交互 Element UI组件 分页器的优点 电商平台同时展示的数据很多,所以采用分页功能实现分页功能 Element UI已经有封装好的组件,但是也要掌握原理,以及自定…

第十二届蓝桥杯 2021 C/C++组 直线

目录 题目: 题目描述: 题目链接: 思路: 核心思路: 两点确定一条直线: 思路详解: 代码: 第一种方式代码详解: 第二种方式代码详解: 题目:…

《Piper》皮克斯技术解析:RIS系统与云渲染如何创造奥斯卡级动画短片

本文由专业专栏作家 Mike Seymour 撰写,内容包含非常有价值的行业资讯。 译者注 《Piper》是皮克斯动画工作室的一部技术突破性的短片,讲述了一只小鸟在海滩上寻找食物并面对自然挑战的故事。它不仅凭借其精美的视觉效果和细腻的情感表达赢得了2017年奥…

Java在excel中导出动态曲线图DEMO

1、环境 JDK8 POI 5.2.3 Springboot2.7 2、DEMO pom <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><dependency><groupId>commons…

Kotlin Multiplatform--02:项目结构进阶

Kotlin Multiplatform--02&#xff1a;项目结构进阶 引言正文 引言 在上一章中&#xff0c;我们对 Kotlin Multiplatform 项目有了基本的了解&#xff0c;已经可以进行开发了。但我们只是使用了系统默认的项目结构。本章介绍了如何进行更复杂的项目结构管理。 正文 在上一章中&…

代码随想录算法训练营第五十八天 | 1.拓扑排序精讲 2.dijkstra(朴素版)精讲 卡码网117.网站构建 卡码网47.参加科学大会

1.拓扑排序精讲 题目链接&#xff1a;117. 软件构建 文章讲解&#xff1a;代码随想录 思路&#xff1a; 把有向无环图进行线性排序的算法都可以叫做拓扑排序。 实现拓扑排序的算法有两种&#xff1a;卡恩算法&#xff08;BFS&#xff09;和DFS&#xff0c;以下BFS的实现思…

linux ptrace 图文详解(七) gdb、strace跟踪系统调用

目录 一、gdb/strace 跟踪程序系统调用 二、实现原理 三、代码实现 四、总结 &#xff08;代码&#xff1a;linux 6.3.1&#xff0c;架构&#xff1a;arm64&#xff09; One look is worth a thousand words. —— Tess Flanders 相关链接&#xff1a; linux ptrace 图…

【前端】ES6 引入的异步编程解决方案Promise 详解

Promise 详解 1. 基本概念 定义&#xff1a;Promise 是 ES6 引入的异步编程解决方案&#xff0c;表示一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。核心作用&#xff1a;替代回调函数&#xff0c;解决“回调地狱”问题&#xff0c;提供更清晰的异步流程控…

const(C++)

打印出来的结果是 a是12 *p是200 const修饰指针 const修饰引用

python21-循环小作业

课程&#xff1a;B站大学 记录python学习&#xff0c;直到学会基本的爬虫&#xff0c;使用python搭建接口自动化测试就算学会了&#xff0c;在进阶webui自动化&#xff0c;app自动化 循环语句小作业 for-in作业斐波那契 for 固定数值计算素数字符统计数字序列range 函数 水仙花…

小白电路设计-设计11-恒功率充电电路设计

介绍 作为电子信息工程的我&#xff0c;电路学习是一定要学习的&#xff0c;可惜目前作为EMC测试工程师&#xff0c;无法兼顾太多&#xff0c;索性不如直接将所学的知识进行运用&#xff0c;并且也可以作为契机&#xff0c;进行我本人的个人提升。祝大家与我一起进行提升。1.本…

Spring AI 快速入门:从环境搭建到核心组件集成

Spring AI 快速入门&#xff1a;从环境搭建到核心组件集成 一、前言&#xff1a;Java开发者的AI开发捷径 对于Java生态的开发者来说&#xff0c;将人工智能技术融入企业级应用往往面临技术栈割裂、依赖管理复杂、多模型适配困难等挑战。Spring AI的出现彻底改变了这一局面——…

http://noi.openjudge.cn/——2.5基本算法之搜索——200:Solitaire

文章目录 题目宽搜代码总结 题目 总时间限制: 5000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 Solitaire is a game played on a chessboard 8x8. The rows and columns of the chessboard are numbered from 1 to 8, from the top to the bottom and from left t…

架构师面试(三十六):广播消息

题目 在像 IM、短视频、游戏等实时在线类的业务系统中&#xff0c;一般会有【广播消息】业务&#xff0c;这类业务具有瞬时高流量的特点。 在对【广播消息】业务实现时通常需要同时写 “系统消息库” 和更新用户的 “联系人库” 的操作&#xff0c;用户的联系人表中会有未读数…

TortoiseGit使用图解

前言 记录GitTortoiseGit使用&#xff0c;记录下开发中常用命令&#xff0c;健忘时用到方知好。 TortoiseGit使用 图解 commit-提交代码 pull-拉取远程分支最新代码 push-将本地分支代码推送到远程分支 show log-查看分支提交记录 show log - 切换分支查看 show log - 远程分…

【时时三省】(C语言基础)循环程序举例

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 例题: 用公式4/π≈1-3/1+5/1-7/1+...求π的近似值,直到发现某一项的绝对值小于10的-6次方为止(该项不累加)。 解题思路: 这是求值的近似方法中的一种。求π值可以用不同的近似方法。如下面的表达式都可以…