【人工智能】如何理解transformer中的token?

如何理解transformer中的token?

      • **一、Token在Transformer中的作用**
      • **二、文本分词的常见方法**
        • **1. 基于词典的分词(Dictionary-based Tokenization)**
        • **2. 子词分词(Subword Tokenization)**
          • **(1) WordPiece算法**
          • **(2) BPE(Byte-Pair Encoding)**
          • **(3) SentencePiece**
        • **3. 字符级分词(Character-level Tokenization)**
      • **三、分词步骤与算法选择**
        • **具体步骤(以BPE为例)**
        • **算法对比**
      • **四、实际工具与代码示例**
        • **1. Hugging Face Tokenizer**
        • **2. 自定义BPE分词**
      • **五、关键注意事项**
      • **六、总结**
    • 相关参考

一、Token在Transformer中的作用

Token 是Transformer模型的基本输入单位,可以理解为模型处理的“原子单元”。它的作用类似于人类语言中的“词”或“字符”,但具体定义取决于分词方法。
核心意义

  1. 离散化连续文本:将无限可能的字符串映射到有限数量的Token集合(词汇表)。
  2. 保留语义信息:通过合理划分,使Token能携带单词、短语或字符级别的含义。
  3. 统一模型输入:所有文本需转换为相同长度的Token序列,便于模型处理。

二、文本分词的常见方法

1. 基于词典的分词(Dictionary-based Tokenization)

原理:使用预定义的词典(如WordNet、停用词表)匹配最长或最短单词。
步骤

  1. 预处理:去除标点、数字、转换为小写。
  2. 查词典:按最长匹配或最短匹配切分单词。
  3. 未登录词处理:将未在词典中的词视为一个Token。
    示例
    文本:"I love NLP!" → Tokens:["I", "love", "NLP", "!"]
    优点:简单高效,适用于已知领域文本。
    缺点:无法处理未登录词(如新造词“ChatGPT”)。
2. 子词分词(Subword Tokenization)

通过统计合并高频字符序列,生成子词单元(Subword Units),解决未登录词问题。常用方法包括:

(1) WordPiece算法

原理

  1. 统计频率:统计所有可能的子词片段(如"unhappy"拆分为"un", "ha", "ppy")。
  2. 合并策略:合并出现频率最高的子词对,直到无法进一步合并。
    示例
    文本:"unhappy" → 初始子词:["u", "n", "h", "a", "p", "p", "y"]
    合并后:["un", "happy"](假设"un""happy"高频出现)。
    应用:BERT、GPT等模型采用WordPiece。
(2) BPE(Byte-Pair Encoding)

原理

  1. 初始切分:将文本按字符拆分(如"apple"["a", "p", "p", "l", "e"])。
  2. 统计合并:每次合并出现频率最高的相邻字符对。
    示例
    文本:"apple apple" → 初始字符对:"ap", "pp", "pl", "le"等。
    合并后:["a", "p", "p", "le"]["a", "pp", "le"]
    应用:GPT-2、GPT-3等模型采用BPE。
(3) SentencePiece

原理

  1. 无词典训练:直接从原始文本中学习子词边界,无需预定义词典。
  2. 统一编码:对多语言文本生成统一词汇表。
    示例
    文本:"I love NLP! 你好世界!" → Tokens:["I", "love", "NLP", "!", "你", "好", "世界", "!"]
    应用:XLM-R、mBERT等多语言模型。
3. 字符级分词(Character-level Tokenization)

原理:将每个字符视为一个Token(如中文的每个汉字)。
示例
文本:"我爱NLP!" → Tokens:["我", "爱", "N", "L", "P", "!"]
优点:无需词典,处理罕见词能力强。
缺点:词汇表大小过大(如中文字符集达10万+),模型参数需求高。

三、分词步骤与算法选择

具体步骤(以BPE为例)
  1. 预处理
    • 删除标点符号、数字、转换为统一小写(可选)。
    • 示例:"Hello, World! 2023""hello world"
  2. 初始切分:按字符拆分文本。
    • 示例:"hello world"["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]
  3. 统计字符对频率
    • 构建所有可能的相邻字符对及其出现次数。
    • 示例:"he", "el", "ll", "lo", "o ", " w", etc.
  4. 合并高频字符对
    • 按频率从高到低排序,依次合并字符对,直到达到预设的词汇表大小。
    • 示例:假设"ll"频率最高,合并为"ll" → 新Token列表:["h", "e", "ll", "o", " ", "w", "o", "r", "l", "d"]
  5. 生成词汇表
    • 记录所有合并后的子词和单字符Token。
  6. 文本编码
    • 将原始文本映射为词汇表中的索引。
    • 示例:"hello world"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
算法对比
方法优点缺点适用场景
WordPiece平衡词汇表大小与未登录词处理依赖预定义词典或初始分词策略中英文、已知领域文本
BPE无需词典,适合大数据集合并过程复杂,内存消耗大大规模语料(如GPT系列)
SentencePiece跨语言支持,无词典依赖训练时间较长多语言、混合语种文本
字符级分词完全处理未登录词词汇表爆炸,模型参数量大小语种、罕见词频繁场景

四、实际工具与代码示例

1. Hugging Face Tokenizer
from transformers import BertTokenizer# 加载预训练模型的Tokenizer(基于WordPiece)
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")# 分词示例
text = "I love NLP! This is an example."
tokens = tokenizer(text, truncation=True, padding="max_length", max_length=10)
print(tokens["input_ids"])  # 输出Token索引
print(tokens["tokens"])      # 输出Token字符串

输出

input_ids: [101, 1976, 2363, 2003, 1994, 15851, 1999, 2002, 30522, 2000]
tokens: ['[CLS]', 'I', 'love', 'NLP', '!', 'This', 'is', 'an', 'example', '[SEP]']
2. 自定义BPE分词

使用tokenizers库实现BPE:

from tokenizers import Tokenizer# 初始化BPE Tokenizer
tokenizer = Tokenizer()# 添加训练数据(假设语料库为.txt文件)
tokenizer.train(files=["corpus.txt"], model="bpe")# 分词
text = "hello world!"
tokens = tokenizer.encode(text)
print(tokens)  # 输出整数索引
print(tokenizer.decode(tokens))  # 输出恢复的文本

五、关键注意事项

  1. 特殊字符处理
    • 在预处理阶段删除或保留标点符号(如[CLS][SEP]在BERT中的作用)。
  2. 大小写敏感
    • 英文通常统一为小写,中文保留原样。
  3. 未登录词处理
    • 对未在词汇表中的词,BPE会自动拆分为子词(如"ChatGPT"["Chat", "G", "PT"])。
  4. 跨语言支持
    • 使用SentencePiece或XLM-R Tokenizer处理多语言文本。

六、总结

Token是Transformer模型的“原子单位”,其划分方式直接影响模型性能。
分词算法选择
• 中英文 → WordPiece/BPE。
• 多语言 → SentencePiece。
• 小语种 → 字符级分词。
工具推荐
• Hugging Face Tokenizer(预训练模型适配)。
tokenizers库(自定义BPE/SentencePiece)。

通过合理选择分词方法,可以显著提升模型对文本的理解能力,尤其是在处理未登录词和跨语言场景时。

相关参考

【大语言模型知识】Transformer架构概述

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

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

相关文章

AI风向标《AI与视频制作全攻略:从入门到精通实战课程》

课程信息 AI风向标《AI与视频制作全攻略:从入门到精通实战课程》,夸克网盘和百度网盘课程。 课程介绍 《AI与视频制作全攻略:从入门到精通实战课程》是一套全面融合AI技术与视频制作的实战课程,旨在帮助创作者从基础软件使用到高级视频剪辑…

mayfly-go开源的一站式 Web 管理平台

mayfly-go 是一款开源的一站式 Web 管理平台,旨在通过统一的界面简化 Linux 服务器、数据库(如 MySQL、PostgreSQL、Redis、MongoDB 等)的运维管理。以下从多个维度对其核心特性、技术架构、应用场景及生态进行详细解析: 一、核心…

车辆模型——运动学模型

文章目录 约束及系统移动机器人运动学模型(Kinematic Model)自行车模型含有加速度 a a a 的自行车模型系统偏差模型 在机器人的研究领域中,移动机器人的系统建模与分析是极为关键的基础环节,本文以非完整约束的轮式移动机器人为研…

go命令使用

查看配置信息 go env配置go国内源 export GO111MODULEon export GOPROXYhttps://goproxy.cn测试 go install github.com/jesseduffield/lazydockerlatesthttps://github.com/jesseduffield/lazydocker

Chrome-Edge-IDEA-Win 常用插件-工具包

Chrome-Edge-IDEA-Win 常用插件-工具包 Chrome-Edge-IDEA-Win 常用插件-工具包谷歌插件chropathJSONViewOctotree - GitHub code treeXPath Helper书签侧边栏篡改猴Print Edit WEEdge浏览器插件IDEA插件CodeGlance Pro 代码迷你缩放图插件Alibaba Cloud ToolkitAlibaba Java Co…

西门子V90伺服系统介绍

深入浅出地了解V90伺服驱动系统的核心特性和优势,掌握其自动优化功能,使设备获得更高的动态性能;同时,了解其自动抑制机械谐振频率的特性,有助于在实际应用中减少机械振动和噪音。 方便快捷地熟悉V90的使用方式。通过伺…

【FastGPT】利用知识库创建AI智能助手

【FastGPT】利用知识库创建AI智能助手 摘要创建知识库上传文档创建应用准备提示词准备开场白关联知识库AI回答效果 摘要 关于FastGPT的部署,官方提供了docker-compose方式的部署文档,如果使用的是podman和podman-compose的同学,可以参考这篇…

最新!Ubuntu Docker 安装教程

源自: AINLPer(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-1 更多:>>>>大模型/AIGC、学术前沿的知识分享! 看到很多部署大模型的时候,都是基于docker安装部署的。…

html5炫酷3D立体文字效果实现详解

炫酷3D立体文字效果实现详解 这里写目录标题 炫酷3D立体文字效果实现详解项目概述技术实现要点1. 基础布局设置2. 动态背景效果3. 文字渐变效果4. 立体阴影效果5. 悬浮动画效果 技术难点及解决方案1. 文字渐变动画2. 立体阴影效果3. 性能优化 浏览器兼容性总结 项目概述 在这个…

电脑如何设置几分钟后自动关机

摘要:本文提供Windows、macOS和Linux系统设置定时自动关机的详细方法。 目录 一、Windows系统设置方法 设置定时关机 取消关机计划 二、macOS系统设置方法 设置定时关机取消关机计划 三、Linux系统设置方法 设置定时关机 取消关机计划 四、注意事项五、扩展&#x…

Android音视频多媒体开源库基础大全

从事音视频开发工作,需要了解哪些常见的开源库,从应用到底软系统,整理了九大类,这里一次帮你总结完。 包含了应用层的MediaRecorder、surfaceView,以及常见音视频处理库FFmpeg和OpenCV,还有视频渲染和音频…

若依前端框架增删改查

1.下拉列表根据数据库加载 这个是用来查询框 绑定了 change 事件来处理站点选择变化后的查询逻辑。 <el-form-item label"站点选择" prop"stationId" v-has-permi"[ch:m:y]"><el-select v-model"queryParams.stationId" pl…

Java 第十一章 GUI编程(3)

目录 内部类 内部类定义 内部类的特点 匿名内部类 格式&#xff1a; 内部类的意义 实例 内部类 ● 把类定义在另一个类的内部&#xff0c;该类就被称为内部类。 ● 如果在类 Outer 的内部再定义一个类 Inner&#xff0c;此时类 Inner 就称为内部类 &#xff08;或称为嵌…

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测 目录 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预…

3DMAX曲线生成器插件CurveGenerator使用方法

1. 脚本功能简介 3DMAX曲线生成器插件CurveGenerator是一个用于 3ds Max 的样条线生成工具&#xff0c;用户可以通过简单的UI界面输入参数&#xff0c;快速生成多条样条线。每条样条线的高度值随机生成&#xff0c;且可以自定义以下参数&#xff1a; 顶点数量&#xff1a;每条…

LiteratureReading:[2023] GPT-4: Technical Report

文章目录 一、文献简明&#xff08;zero&#xff09;二、快速预览&#xff08;first&#xff09;1、标题分析2、作者介绍3、引用数4、摘要分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;分析 5、总结分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;…

vm_pwn入门 -- [GHCTF 2025]my_vm

先看基本逻辑 int __fastcall main(int argc, const char **argv, const char **envp) {unsigned __int16 IP; // [rspCh] [rbp-14h] BYREFunsigned __int16 SP; // [rspEh] [rbp-12h] BYREFunsigned __int16 cmd_count; // [rsp10h] [rbp-10h] BYREFunsigned __int16 i; // [r…

CA 机构如何防止中间人攻击

在现代互联网中&#xff0c;中间人攻击&#xff08;Man-in-the-Middle Attack&#xff0c;简称 MITM&#xff09;是一种常见的网络攻击方式&#xff0c;攻击者通过拦截和篡改通信双方的信息&#xff0c;进而窃取敏感数据或执行恶意操作。为了防止中间人攻击&#xff0c;证书颁发…

Elasticsearch快速上手与深度进阶:一站式实战教程

目录 1. Elasticsearch 简介 2. 安装与启动 方式 1&#xff1a;Docker 快速安装&#xff08;推荐&#xff09; 方式 2&#xff1a;手动安装 3. 基础操作 3.1 创建索引 3.2 插入文档 3.3 查询文档 3.4 更新文档 3.5 删除文档 4. 高级查询 4.1 布尔查询 4.2 范围查询…

闻所闻尽:穿透声音的寂静,照见生命的本真

在《楞严经》的梵音缭绕中&#xff0c;"闻所闻尽"四个字如晨钟暮鼓&#xff0c;叩击着每个修行者的心门。这个源自观世音菩萨耳根圆通法门的核心概念&#xff0c;既是佛门修行的次第指引&#xff0c;更蕴含着东方哲学对生命本质的终极叩问。当我们穿越时空的帷幕&…