一、Token是什么?
1.1 Token一定表示一个汉字么?
下面这个例子中我让ChatGPT按照Token的划分粒度将"我喜欢苹果"进行倒序输出。
这个例子说明:Token既可能是一个单词,例如"苹果",也可能是一个汉字,例如:"我"
1.2 Token是固定不变的么?
比如在上述例子中,只要出现苹果这个词的地方,苹果是不是一定会被认为是一个Token,我们看另一个例子:
这个例子中我让ChatGPT按照Token的划分粒度将"我喜欢苹果派"进行倒序输出,你会发现苹果派单独成了一个Token。
这个例子说明Token在不同的上下文中不是一成不变的,有的上下文中"苹果"是一个Token,而在另一个上下文中"苹果派"是一个Token
1.3 Token的定义
在大语言模型中,Token是模型进行语言处理的基本信息单元,它可以是一个字,一个词甚至是一个短语句子。Token并不是一成不变的,在不同的上下文中,他会有不同的划分粒度。
如果要用一个中文单词来翻译Token,我更愿意将其称之为词元
二、为什么会有Token
ChatGPT并不是适用于某一门特定语言的大语言模型,它几乎适用于所有流行的自然语言。而Token的出现就是为了在概念上能够与具体的特定语言无关。
用专业的话表达:Token概念的提出是为了与特定的语言解耦
那ChatGPT到底是如何利用Token进行工作的呢?其实GPT由一个针对不同语言的非常全的Token词汇表,它能表达出所有人类的自然语言。当我们向GPT进行提问时,GPT会做如下处理:
- GPT首先会识别我们的语言种类,例如中文、英文
- GPT会根据自己的Token序列化规则将我们输入的文本转换为多个Token
- GPT根据自己的Token词汇表以及训练的结果为我们输入的Token生成预测后的Token
- GPT将生成的Token再转换成人类可读的自然语言提供给我们
三、Token对我们有哪些影响
从官方文档中我们可以看到每个模型都有一个MAX TOKENS的参数,这个参数的意思就是在一次会话中,模型能基于整个上下文记忆的最大的Token数量,这个上下文既包含了我们的输入,也包含了我们的输出。
在上面这个解释中会有两个概念:
- 一次会话:所谓的一次会话是指你打开了一个和ChatGPT的聊天窗口,只要你一直在这个窗口内和ChatGPT聊天,那么这个窗口就是你和ChatGPT的一次会话,无论你们已经聊了多久
- 上下文:所谓的上下文就是指在最新的一个提问之前所有的聊天记录
值得注意的是,这里的上下文记忆的最大Token数量,不仅仅是指你单次提问的语句的最大Token数量,而是整个会话中之前所有的输入和输出的Token数量
当单次会话中达到最大的Token数量之后,ChatGPT并不会停止输出,而是选择性的遗忘最前面的对话,然后可能会输出错误的结果。
这跟我们人类之间聊天是一样的,如果两个人聊天聊了很久,那么最开始聊的话题很有可能会被两个人遗忘。
四、Token对提示词编写有哪些影响
- 理解了Token的限制,我们需要去形成"当前消耗了多少Token"的体感,这样当我们发现GPT的输出不符合预期的时候,我们可以首先考虑是否是因为上下文消耗的Token超过了限制,导致GPT忘记了最前面的内容。
- 秉承奥卡姆剃刀原理,能不多说一句废话就不多说一句。尤其在连续的多轮对话中,我们一定要养成精简有效的表达习惯。