在自然语言处理(NLP)和大模型中,Token 是文本处理的基本单位,可以看作是文本的“原子”。简单来说,Token 是将一段原始文本分解后得到的最小有意义的单元。大模型(如 GPT、BERT 等)通过接收和处理这些 Token 序列来理解文本的含义、生成新的文本或完成其他任务。
1. Token 的定义
Token 是文本被分割后的基本组成部分。在自然语言处理中,为了让模型能够理解和处理人类语言,需要将一段连续的文本(如句子或段落)分解成更小的单元,这些单元就是 Token。举个例子:
对于句子 “Hello world”,可以分解为两个 Token:[“Hello”, “world”]。
不同的分解方式会产生不同类型的 Token,具体取决于模型的设计和任务需求。
2. Token 的类型
根据分割粒度的不同,Token 通常可以分为以下几种类型:
单词级 Token
文本按单词进行分割,每个单词作为一个独立的 Token。
示例:“I love coding” → [“I”, “love”, “coding”]
优点:直观,适合理解完整的单词含义。
缺点:词汇量可能很大,无法处理未见过的新词。子词级 Token
将单词进一步分解成更小的有意义的片段,通常用于解决单词级 Token 的局限性。
示例:“unhappiness” → [“un”, “happi”, “ness”]
优点:能处理新词或拼写变体,词汇量较小且灵活。
缺点:单个 Token 的含义可能不完整,需要上下文理解。
字符级 Token
文本按单个字符分割,每个字符作为一个 Token。
示例:“Hello” → [“H”, “e”, “l”, “l”, “o”]
优点:词汇量极小,能处理任何文本。
缺点:序列变长,模型需要更多计算资源来捕捉关系。
大模型通常会根据任务需求选择合适的 Token 类型。例如,BERT 使用子词级 Token(如 WordPiece),而一些轻量级模型可能使用字符级 Token。
3. Token 在大模型中的作用
大模型(如基于 Transformer 架构的模型)以 Token 序列为核心进行工作。Token 在模型的输入、处理和输出阶段都扮演着关键角色:
输入阶段
原始文本被分解为 Token 序列后,每个 Token 会被映射到一个高维向量(称为 embedding)。这些向量包含了 Token 的语义信息,是模型理解文本的基础。
示例:[“Hello”, “world”] → [vector1, vector2]处理阶段
模型通过多层结构(如注意力机制和前馈网络)对 Token 的 embedding 进行变换,分析 Token 之间的关系和上下文信息。例如,它可以理解 “I love coding” 中 “love” 和 “coding” 的关联。输出阶段
模型根据任务输出新的 Token 序列或对输入进行处理。例如:
文本生成:输出 “Nice to meet you” 的 Token 序列。
分类:判断输入 Token 序列的情感是正面还是负面。
Token 是模型与文本之间的桥梁,模型的所有计算和学习都基于这些 Token 序列。
4. Tokenization 过程
将原始文本转换为 Token 序列的过程称为 Tokenization,通常包括以下步骤:
规范化
对文本进行清洗和标准化,例如去除多余空格、统一大小写等。
示例:“Hello, World!” → “hello world”分割
根据选定的 Token 类型,将文本分割成 Token。
示例:“hello world” → [“hello”, “world”](单词级)编码
将 Token 转换为模型可以处理的数值表示,即向量化(embedding)。具体来说,模型将每个 Token 映射到一个高维稠密向量空间。这些向量能够捕捉到词的语义信息和上下文关系。在分词之后通常使用嵌入层(Embedding Layer)来实现这一点。嵌入层会将每个 token 映射到一个高维空间,例如 12288 维 (gpt3)。
假如输入的是“ I am a student ”这句话,那么 embeding 层会生成一个 4 x 12288 维的矩阵:
“I” → [x₁, x₂, …, x₁₂₂₈₈]
“am” → [y₁, y₂, …, y₁₂₂₈₈]
“a” → [z₁, z₂, …, z₁₂₂₈₈]
“student” → [w₁, w₂, …, w₁₂₂₈₈]
作为 encoder 层的输入在 Transformer 架构中,这一步通常是通过一个嵌入层(Embedding Layer)来完成的。嵌入层负责将每个 Token 转换成对应的向量表示。
经过这些步骤,文本就变成了模型能够理解和计算的格式。
不同的大模型可能会选择不同的 tokenization 策略,以适应其架构和应用需求。比如目前主流大模型所使用的 token 类型如下:
- ChatGPT(OpenAI)
Token 类型:Byte Pair Encoding(BPE)
说明:ChatGPT 基于 GPT 系列模型,采用 BPE tokenization。BPE 通过合并高频出现的字符对来构建词汇表,能有效处理未见词(OOV),并在词汇量与计算效率之间取得平衡。 - QWen(阿里巴巴)
Token 类型:SentencePiece
说明:QWen 使用 SentencePiece,这是一种无监督的 tokenization 方法,支持 BPE 和 unigram language model 两种模式。它特别适合多语言环境,能够灵活适应不同语言的特性。 - DeepSeek
Token 类型:WordPiece
说明:DeepSeek 采用 WordPiece tokenization,这是 Google 开发的一种算法,最初用于 BERT 模型。通过最大化语言模型的似然选择子词单元,WordPiece 能有效捕捉词缀和词根等语言特征。 - LLama(Meta)
Token 类型:Byte Pair Encoding(BPE)
说明:LLama 使用 BPE tokenization,与 ChatGPT 类似。BPE 在处理大规模、多样化的文本数据时表现出色,确保模型的高效性和泛化能力。
5. Token 数量的影响
Token 序列的长度对大模型的性能有重要影响:
- 序列过长:包含更多信息,但计算复杂度增加,模型可能难以处理(尤其是 Transformer 模型,计算量与序列长度平方相关)。
- 序列过短:信息不足,可能影响模型对上下文的理解。
因此,大模型通常会设置一个最大 Token 长度(如 512 或 2048),并根据任务需求进行优化。
总结
Token 是大模型处理文本的核心概念,可以理解为文本的最小构建块。它通过将复杂文本分解为单词、子词或字符等单元,让模型能够一步步分析和生成语言。Token 的类型和数量直接影响模型的性能和效果,而 Tokenization 则是连接原始文本与模型计算的关键步骤。希望这个解释能让你对 Token 有更清晰的认识!
转载请注明出处《大模型中的Token是什么?》 https://blog.csdn.net/huyuyang6688/article/details/145971315