分词器(Tokenizer) | 有了分词器,为什么还需要嵌入模型

news2025/4/8 19:31:48

文章目录

    • 什么是tokenizer
    • 有了分词器,为什么还需要嵌入模型
    • 分词器为什么在transformers 里
    • Hugging Face的Tokenizer
    • 大模型不同tokenizer训练效果对比
    • 分词器库选择
      • 当前顶尖大模型所采用的 Tokenizer 方法与词典大小
    • 参考

什么是tokenizer

Tokenizers
huggingface官方文档:https://huggingface.co/docs/tokenizers/main/en/index

tokenizer 是NLP 管道的核心组件之一。它们有一个非常明确的目的:将文本转换为模型可以处理的数据。模型只能处理数字,因此tokenizer 需要将我们的文本输入转换为数字。

你应该知道大模型的输入输出的单位是token,Token是使用Tokenizer(翻译为分词器)分词后的结果。Tokenizer是将文本分割成token的工具。

简单来说,Tokenizer 就是将连续的文本拆分成模型能处理的基本单位——Token 的工具,而 “token” 是模型理解和生成文本的最小单位。对于计算机来说,处理原始文本是非常困难的,因此我们需要一个中间层,把文字转换为一系列的数字序列(即,一个个离散的 token),这些 token 既可以是单个字符、词语,也可以是子词(subword)。而这个转换过程正是由 Tokenizer 完成的。

在传统的自然语言处理中,我们可能直接按照单词或字符来分割文本;而在大模型中,常见的方法则是采用子词级别(subword-level)的分割方式。这种方式既能保证足够细致(能够捕捉到拼写变化、罕见词等信息),又不会使得词表过大,进而影响模型的效率和泛化能力。

在中文中,token 通常是单个汉字(或者在某些情况下是常见词汇)

在英文中,token 通常是一个词或单词的一部分,平均而言大约 4 个字符或 0.75 个单词,但具体拆分方式依赖于采用的 tokenizer 算法

有了分词器,为什么还需要嵌入模型

尽管 Tokenizer 能够将文本转换为数值索引,但这些索引本身并不包含语义信息。嵌入模型的作用是为这些索引赋予语义,使得模型能够更好地理解和处理文本。

虽然Tokenizer 将文本转换为数值形式,但这些ID还不能直接用于训练大型语言模型(LLM)。在分词和ID化之后,通常还需要通过**嵌入模型(Embedding Model)**将ID映射为稠密的向量表示,这一步是训练LLM的关键部分。

Tokenizer 和嵌入模型是 NLP 流程中的两个关键组件,它们的关系如下:

  1. Tokenizer:将原始文本分割为单元,并映射为数值索引。
  2. 嵌入模型:将数值索引转换为语义丰富的向量表示。
  3. 下游任务:使用嵌入向量作为输入,完成分类、翻译、问答等任务。

典型流程:

  1. 输入文本:“I love NLP”。
  2. Tokenizer:[“I”, “love”, “NLP”] → [1, 2, 3]。
  3. 嵌入模型:[1, 2, 3] → [[0.1, 0.2, …], [0.3, 0.4, …], [0.5, 0.6, …]]。
  4. 下游任务:使用嵌入向量完成分类、翻译等任务。

嵌入模型的主要任务是将 Tokenizer 生成的数值索引转换为稠密的向量表示,这些向量能够捕捉单词、子词或句子的语义信息。

Tokenizer 和嵌入模型是 NLP 流程中的两个互补组件,它们共同作用,将原始文本转换为计算机可以理解和处理的格式。

总结:分词器-》embedding-》llm
tokenizer库其实就是接收原始数据集中的语料,然后按照一定的规则分开。分词的目的只有一个,那就是为后来的embeding做准备。

分词器为什么在transformers 里

在 transformers 库中,分词器(Tokenizer)是一个核心组件,因为它是将原始文本转换为模型可处理格式的关键步骤。transformers 库由 Hugging Face 开发,旨在为自然语言处理(NLP)任务提供统一的接口,支持多种预训练模型(如 BERT、GPT、T5 等)。

(1)文本预处理标准化
不同的预训练模型使用不同的分词方法(如 BERT 使用 WordPiece,GPT 使用 Byte Pair Encoding,T5 使用 SentencePiece 等)。

transformers 库通过分词器将这些不同的分词方法统一到一个接口中,用户无需关心底层实现细节。

(2)与预训练模型对齐
预训练模型在训练时使用了特定的分词器和词汇表。为了确保模型在推理或微调时表现一致,必须使用相同的分词器。

transformers 库中的分词器与预训练模型一一对应,确保输入格式与模型训练时一致。

(3)支持多种语言和任务
transformers 库支持多种语言和任务(如文本分类、机器翻译、问答等),分词器能够根据任务和语言自动调整分词策略。

(4)高效处理
分词器在 transformers 中经过高度优化,能够快速处理大规模文本数据。

以下是一个使用 transformers 分词器的示例:

from transformers import AutoTokenizer

# 加载预训练模型的分词器
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

# 输入文本
text = "I love NLP!"

# 使用分词器处理文本
tokens = tokenizer.tokenize(text)  # 分词
input_ids = tokenizer.convert_tokens_to_ids(tokens)  # 转换为ID
encoded_input = tokenizer(text)  # 直接编码为模型输入格式

print("Text:", text)
print("Tokens:", tokens)
print("Input IDs:", input_ids)
print("Encoded Input:", encoded_input)

输出

Text: I love NLP!
Tokens: ['i', 'love', 'nlp', '!']
Input IDs: [1045, 2293, 17953, 999]
Encoded Input: {
    'input_ids': [101, 1045, 2293, 17953, 999, 102],  # 添加了[CLS]和[SEP]
    'token_type_ids': [0, 0, 0, 0, 0, 0],  # 用于区分句子(如BERT)
    'attention_mask': [1, 1, 1, 1, 1, 1]   # 用于标识有效token
}

在 transformers 中,每个预训练模型都有对应的分词器。例如:

  • BERT:使用 WordPiece 分词器。
  • GPT:使用 Byte Pair Encoding (BPE) 分词器。
  • T5:使用 SentencePiece 分词器。

通过 AutoTokenizer,用户可以根据模型名称自动加载对应的分词器,无需手动选择。

Hugging Face的Tokenizer

Hugging Face官方分词器:https://huggingface.co/docs/tokenizers/main/en/index
github:https://github.com/huggingface/tokenizers

Tokenizers 提供了当今最常用的分词器实现,专注于性能和多功能性。这些分词器不仅在研究中使用,还适用于生产环境,具有极快的训练和分词速度,能够在服务器CPU上在20秒内处理1GB的文本。

🤗 Tokenizers provides an implementation of today’s most used tokenizers, with a focus on performance and versatility. These tokenizers are also used in 🤗 Transformers.

在这里插入图片描述

huggingface的transform库包含三个核心的类:configuration,models 和tokenizer 。

from transformers import BertTokenizer

# 加载预训练的BERT分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# 输入文本
text = "I love NLP."

# 分词并转换为ID
tokens = tokenizer.tokenize(text)
input_ids = tokenizer.convert_tokens_to_ids(tokens)

print("Tokens:", tokens)
print("Input IDs:", input_ids)

输出

Tokens: ['i', 'love', 'nlp', '.']
Input IDs: [1045, 2293, 17953, 1012]

大模型不同tokenizer训练效果对比

原文链接:https://zhuanlan.zhihu.com/p/717829515

训练大语言模型之前除了数据收集,还有一个重要的事情是tokenizer的选择,是选择开源的?还是自己根据自己的数据训练一个比较好?

分词器库选择

在这里插入图片描述

当前顶尖大模型所采用的 Tokenizer 方法与词典大小

原文链接:https://fisherdaddy.com/posts/introduce-llm-tokenizer/

在这里插入图片描述

在这里插入图片描述

闭源模型的具体分词细节往往属于商业机密,传闻deepseek的分词器也没有开源,有懂的小伙伴可以评论区留言- -~。

参考

分词器(Tokenizer)详解
参考URL: https://zhuanlan.zhihu.com/p/770595538
Huggingface详细教程之Tokenizer库
参考URL: https://zhuanlan.zhihu.com/p/591335566

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

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

相关文章

scala中 隐式转换

一、 隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一种类型 例如: int --> double object test {// 复习隐式转换// 隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一…

实战开发coze应用-姓氏头像生成器(上)

​欢迎关注【AI技术开发者】 上次,我们开发了一个对话形式的头像生成器智能体(Agents),广受大家欢迎。 同时也接收到一些用户的反馈,生成前无法看到头像样式、初次使用不会用等等。 对此,我准备使用Coze开…

【Node.js】express框架

目录 1初识express框架 2 初步使用 2.1 安装 2.2 创建基本的Web服务器 2.3 监听方法 2.3.1 监听get请求 2.3.2 监听post请求 2.4 响应客户端 2.5 获取url中的参数(get) 2.5.1 获取查询参数 2.5.2 获取动态参数 2.6 托管静态资源 2.6.1 挂载路径前缀 2.6.2 托管多…

JS逆向实战三:1688工厂信息

本文说明:B站学习笔记整理,仅供学习参考~~ 网站:https://sale.1688.com/factory/category.html 1. 页面分析与解密 刷新页面,通过对关键词进行搜索,实现接口定位。 通过多次刷新页面或者页面翻页,找到变化…

Pipeline 获取 Jenkins参数

Pipeline 获取 Jenkins参数 Jenkins 提供了一系列默认的环境变量,这些变量在构建过程中可以被使用。以下是一些常见的 Jenkins 默认环境变量: WORKSPACE: 当前构建的工作目录路径 JOB_NAME: 当前构建的作业名称 BUILD_NUMBER: 当前构建的编号&#xff…

ESP32 在IDF_V5.3.1版本下实现AP无线热点模式!(带WIFI事件处理)

一、什么是ESP32的AP无线热点模式? ESP32 的 AP(Access Point)模式 是指 ESP32 作为无线接入点运行,它自己创建一个 Wi-Fi 网络,允许其他设备(如手机、电脑、平板等)直接连接到它上面&#xff0…

Elasticsearch:探索 CLIP 替代方案

作者:来自 Elastic Jeffrey Rengifo 及 Toms Mura 分析图像到图像和文本到图像搜索的 CLIP 模型的替代方案。 在本文中,我们将通过一个模拟房地产网站的实际示例介绍 CLIP 多模态模型,探索替代方案,并分析它们的优缺点&#xff0c…

Nginx 在Linux中安装、使用

Nginx 在Linux中安装、使用 一、官网下载Nginx 官网地址:http://nginx.org/en/download.html 二、上传到服务器解压 1、上传到指定的服务器地址 上传的地址自己决定,我上传到 /data/home/prod/nginx/ 2、解压 使用命令: tar -zxvf “你的N…

【Spring+MyBatis】_图书管理系统(下篇)

图书管理系统上篇、中篇如下: 【SpringMyBatis】_图书管理系统(上篇)-CSDN博客 【SpringMyBatis】_图书管理系统(中篇)-CSDN博客 目录 功能5:删除图书 6.1 约定前后端交互接口 6.2 后端接口 6.3 前端…

若依-@Excel新增注解numberFormat

Excel注解中原本的scale会四舍五入小数,导致进度丢失 想要的效果 显示的时候保留两个小数真正的数值是保留之前的数值 还原过程 若以中有一個專門的工具类,用来处理excel的 找到EXCEL导出方法exportExcel()找到writeSheet,写表格的方法找到填充数据的方法…

Cherry-Studio下载安装教程,AI面向开发者的工具或平台(付安装包)

文章目录 一、Cherry Studio是什么?二、功能特点 一、Cherry Studio是什么? Cherry Studio 是一款开源跨平台的多模型服务桌面客户端,集成超 300 个大语言模型,内置 300 多个预配置 AI 助手,支持多格式文件处理、全局…

多信道接收机

线性调频(LFM)信号,模拟多个目标反射的回波信号,并进行混频和滤波处理。 % 参数设置 c 3e8; % 光速 (m/s) f0 8.566e9; % 载波频率 (Hz) T 10e-6; % 脉冲持续时间 (s) B 100e6; % 信号带宽 (Hz) mu B / T; % 调频斜率 (Hz/s…

修改项目的一些前端记录(自用)

<div style"background:#f2f2f2;position:absolute;top:75px;width:10%;bottom:0px">\<ol class"tree">\<li>\<label for"folder1" class"folderOne foldertop"><img src"common/img/时间.png" …

阿里云虚机的远程桌面登录提示帐户被锁定了

提示由于安全原因&#xff0c;帐户被锁定。 阿里云虚机ECS的远程桌面登录提示帐户被锁定了&#xff0c;只能登录阿里云处理 阿里云-计算&#xff0c;为了无法计算的价值 需选择通过VNC连接 然后计算机管理&#xff0c;解除帐户锁定即可。

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

1、立创商城下载原理图和PCB图 1.1 打开立创商城 官网:www.SZLCSC.COM 1.2 寻找所需器件 以芯片为例 器件类——>芯片类——>对应芯片 1.3 确定所需芯片 确定芯片——>数据手册 1.4 打开原理图和PCB图 1:原理图 2:PCB 3:打开 1.5 导出原理图 操作

【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习

文章目录 1、简介2、主要改进点3、两个重要观点4、四阶段后训练详细步骤4.1 冷启动4.2 推理导向的强化学习4.3 拒绝采样和有监督微调4.4 针对所有场景的强化学习 5、蒸馏与强化学习对比6、评估6.1 DeepSeek-R1 评估6.2 蒸馏模型评估 7、结论8、局限性与未来方向 1、简介 DeepS…

Mac 清理缓存,提高内存空间

步骤 1.打开【访达】 2.菜单栏第五个功能【前往】&#xff0c;点击【个人】 3.【command shift J】显示所有文件&#xff0c;打开【资源库】 4.删除【Containers】和【Caches】文件 Containers 文件夹&#xff1a;用于存储每个应用程序的沙盒数据&#xff0c;确保应用程序…

fpga助教面试题

第一题 module sfp_pwm( input wire clk, //clk is 200M input wire rst_n, input wire clk_10M_i, input wire PPS_i, output reg pwm ) reg [6:0] cunt ;always (posedge clk ) beginif(!rst_n)cunt<0;else if(cunt19) //200M是10M的20倍cunt<0;elsecunt<cunt1;…

【强化学习】Q-learning算法详解:含MATLAB和Python实现代码

Q-learning算法详解 1. Q-learning算法简介Q-Learning算法的基本概念Q-Learning算法的核心思想Q-learning算法步骤Q-Learning算法的特点 MATLAB 实现 Q-learningPython 实现 Q-learning参考 强化学习属于机器学习&#xff0c;但与以前的监督学习和无监督学习的处理对象和任务都…

Java 多数据源时事务回滚问题

目录 问题描述 1、Atomikos事务管理器 2、MyBatis-Plus多数据源支持 dynamic-datasource 特性 约定 使用方法 mybatis-mate 特性 使用方法 问题描述 在多数据源的情况下&#xff0c;如果一个事务跨越多个数据源&#xff0c;当其中一个数据源的操作失败时&#xff0c;我…