一、Token 究竟是什么?
在大语言模型(LLM)的世界里,Token 是一个基础且重要的概念。它是模型可以理解和生成的最小意义单位,是模型处理文本的基础单元。它就像是模型世界里的'积木块',模型通过对这些'积木块'的操作来理解和生成文本。根据所使用的特定标记化方案,Token 可以表示单词、单词的一部分,甚至只表示字符。
例如,对于英文文本,'apple'可能是一个 Token,而对于中文文本,'苹果'可能是一个 Token。但有时候,Token 并不完全等同于我们日常理解的单词或汉字,它还可能是单词的片段,比如'playing'可能被拆分为'play'和'ing'两个 Token。
为了让模型能够处理这些 Token,它们会被赋予数值或标识符,并按序列或向量排列,然后被输入或从模型中输出。简单来说,Token 是原始文本数据和 LLM 可以使用的数字表示之间的桥梁。
这里有一些帮助理解 Token 长度的经验法则:
- 英文中,1 个 Token 约等于 4 个字符。
- 1 个 Token 约等于 3/4 个单词。
- 100 个 Tokens 约等于 75 个单词。
- 1 - 2 个句子约等于 30 个 Tokens。
- 1 个段落约等于 100 个 Tokens。
- 1500 个单词约等于 2048 个 Tokens。
在 OpenAI 的 API 参数中,max_tokens 参数指定模型应该生成一个最大长度为 60 个令牌的响应。可以通过 https://github.com/openai/tiktoken 来观察 token 的相关信息。
二、Token 的特点
我们可以先用 OpenAI 的 playground 来看一个例子:'Dec 31, 1993. Things are getting crazy.'

使用 GPT-3 tokenizer 将相同的单词转换为 token:

2.1 Token 到数值表示的映射
词汇表将 Token 映射到唯一的数值表示。由于 LLM 使用数字输入,所以词汇表中的每个 Token 都被赋予一个唯一标识符或索引。这种映射允许 LLM 将文本数据作为数字序列进行处理和操作,从而实现高效的计算和建模。
为了捕获 Token 之间的意义和语义关系,LLM 采用 Token 编码技术。这些技术将 Token 转换成称为嵌入的密集数字表示。嵌入式编码语义和上下文信息,使 LLM 能够理解和生成连贯的和上下文相关的文本。
像 Transformer 这样的体系结构使用 self-attention 机制来学习 Token 之间的依赖关系并生成高质量的嵌入。
2.2 Token 级操作:精确地操作文本
Token 级别的操作是对文本数据启用细粒度操作。
LLM 可以生成 Token、替换 Token 或掩码 Token,以有意义的方式修改文本。这些 Token 级操作在各种自然语言处理任务中都有应用:
- 例如机器翻译、情感分析和文本摘要等。
- 例如在机器翻译中,模型可能会根据源语言的 Token 序列,生成目标语言对应的 Token 序列;
- 在情感分析中,通过分析文本中 Token 所携带的情感信息来判断整体文本的情感倾向。
2.3 Token 设计的局限性
在将文本发送到 LLM 进行生成之前,会对其进行 tokenization(标记化)。每个模型都以不同的方式执行这一步骤,例如,GPT 模型使用字节对编码(BPE)。Token 会在 tokenizer 发生器的词汇表中分配一个 id,这是一个将数字与相应的字符串绑定在一起的数字标识符。




