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

【NLP基础知识系列课程-Tokenizer的前世今生第一课】Tokenizer 是什么?为什么重要?

语言的“颗粒度”:我们到底在切什么?

我们都知道模型要处理文本,第一步是把一段段字符变成“token”。但这些 token 究竟应该是句子、单词,还是更小的片段,比如“un + break + able”?

这背后涉及的是一个非常核心的问题:我们到底用什么单位来让模型“看懂”语言?这个单位,就叫做 token,而设计这个单位的方式,就是 tokenizer。

Tokenizer 就像语言世界的切割刀,它决定了模型从多大、从哪里开始理解文本。粗了,信息不够细;细了,理解变得困难。


Tokenizer 的作用:不仅是切词,更是理解的“格式”

我们不妨打个比方:如果把语言模型比作人脑,那 tokenizer 就是它的“眼睛”。一双合适的眼睛,能帮助我们快速捕捉信息;而模糊不清的视野,只会增加理解的负担。

当你读到“unbelievable”,你可以立刻意识到它是“un + believe + able”构成的,这种构词结构能让你快速理解它的意思。如果 tokenizer 能切出这样的结构,模型自然也能更快学到“构词法”。

而如果 tokenizer 把它切成了“u + n + b + …”,模型可能就要花更多精力才能拼凑出“哦,这是一个否定+动词+形容词构成的词”。


多种颗粒度下的 Tokenizer

颗粒度示例优点缺点常见应用模型
句子级“今天天气真不错。”结构清晰,语言自然单位无法细致建模,严重OOV问题早期RNN、规则模型
单词级“unbelievable”易懂,训练快新词无能为力Word2Vec、GloVe
子词级“un + believe + able”词表小,无OOV,语义较好切分复杂,训练有偏BERT, GPT, T5 等
字符级“u + n + b + …”跨语言能力强,无需词表序列太长,学习难CANINE、ByT5
字节级“\x75 \x6e \x62 …”统一所有输入类型,无任何限制表达太原始,需要大模型配合GPT-2、tiktoken
区域级(图像)图像划分的 Patch(如ViT)可以对图像输入统一处理不一定与语言token天然对齐CLIP, BLIP, Flamingo 等

我们可以看到,从语义结构最强的“句子”到最原始的“字节”,Tokenizer 划分的单位越小,信息越精细,但模型所承担的“组合理解”任务也越大。


Tokenizer 是怎么“切”的?

除了“切多大”,另一个问题是“怎么切”。有两种主要方式:

自下而上(从细到粗)

这是像 BPE、WordPiece 采用的方式。它们会从字符出发,看哪些字符经常一起出现,就把它们合并成一个 token。

比如:

  • “t” + “h” = “th”
  • “th” + “e” = “the”

这就像小朋友拼积木:经常拼在一起的,就变成一个新块。

自上而下(从粗到细)

UnigramLM 则反其道而行之:先给出一个大词表,然后剪掉那些“不太重要的”子词。

这种方式的好处是:

  • 可以保留多种切分方式
  • 允许在训练中做“随机切分”,增强模型泛化能力

它特别适合像中文、日文这种没有空格的语言。

自动学习(可学习的Tokenizer)

最近的趋势是:让模型自己学!

例如:MxDNA 会让模型自己决定“这个DNA序列该怎么切”,而不是你提前设定好。LaVIT 等多模态模型甚至可以自动学习图像要分几个 token。

这说明:Tokenizer 已经不只是静态规则,而是可以作为模型的一部分,由数据驱动学习得来。


小结:Tokenizer 是理解的设计哲学

一句话总结:Tokenizer 决定了模型“看到什么”。

它不是辅助工具,而是模型理解世界的基础。就像你戴什么样的眼镜,会直接影响你对世界的观察方式。

后续我们会聊:

  • NLP 的 Tokenizer 是如何一步步演化出来的?
  • 多模态中,图像、音频也能被“切”吗?
  • 在蛋白质、基因这类序列中,我们如何找到合适的“token”?

Tokenizer,从此不只是“切词”的代名词。

http://www.xdnf.cn/news/668737.html

相关文章:

  • Mac redis下载和安装
  • 【Docker】存储卷
  • 阿里云配置安全组策略开放端口
  • 阿里云CDN和腾讯云CDN综合对比
  • 飞牛fnNAS之手机访问篇
  • OpenSSH 服务配置与会话保活完全指南
  • 参数/非参数检验和连续/离散/分类等变量类型的关系
  • 好坏质检分类实战(异常数据检测、降维、KNN模型分类、混淆矩阵进行模型评估)
  • Ubuntu20.04系统安装,使用系统盘安装
  • 在thinkphp5.0中。单表使用 model clone 时就会有问题。 需要使用 alias(), 否则会报错。
  • 防腐防爆配电箱:采用 304 不锈钢材质,抗腐蚀、抗冲击,适应恶劣工况
  • 第三届黄河流域网安技能挑战赛复现
  • 2025吉林CCPC 题解(前六题)
  • [图文]图6.3会计事项-Fowler分析模式的剖析和实现
  • docker 搭建php 开发环境 添加扩展redis、swoole、xdebug(1)
  • Qt不同布局添加不同控件
  • 模型评价指标介绍
  • Spark、Hadoop对比
  • Excel 操作 转图片,转pdf等
  • Go语言中的浮点数类型详解
  • Kotlin 中 Lambda 表达式的语法结构及简化推导
  • 学习黑客 Metasploit 主要组件之Encoder
  • MS1826+MS2131 1080P@60Hz 4路输入输出USB3.0采集
  • 通过ansible playbook创建azure 资源
  • 解决ubuntu服务器未使用空间的分配
  • c++复习_第一天(引用+小众考点)
  • c#,vb.net使用OleDb写入Excel异常:字段太小而不能接受所要添加的数据的数量
  • etcd:高可用,分布式的key-value存储系统
  • 鸿蒙OSUniApp 实现登录状态管理与持久化#三方框架 #Uniapp
  • 如何通过ES实现SQL风格的查询?