玩酷网

大模型的token究竟是什么?一文读懂!

在大模型的语境中,token是一个基本的数据处理单元,它可以是一个单词、一个字符,或者是一个子词等,以下从其定义、作用及

在大模型的语境中,token是一个基本的数据处理单元,它可以是一个单词、一个字符,或者是一个子词等,以下从其定义、作用及常见的token划分方式等方面进行具体介绍:

定义:简单来说,token是对文本进行分割后的最小单元。大模型在处理文本时,无法直接处理人类自然语言中的文字,需要将文本拆分成一个个的token,以便模型能够理解和处理。例如,对于句子 “欢迎关注订阅招文袋公众号”,可以将其拆分成多个token:“欢迎”“关注”“订阅”“招文袋”“公众号”。

作用将文本数字化:把自然语言文本转化为模型可以处理的数字向量形式。每个token会被映射为一个唯一的数字编号,模型通过处理这些数字来学习语言的模式和规律。如在一个简单的词汇表中,“欢迎”可能被编码为1,“关注”编码为2,“订阅”编码为3,“招文袋”编码为4,“公众号”编码为5。这样句子 “欢迎关注订阅招文袋公众号”就可以表示为 [1, 2, 3,4,5],便于模型进行计算和分析。

控制模型输入输出长度:模型处理的token数量是有限制的,通过对文本进行token化,可以将输入文本截断或补齐到合适的长度,使模型能够有效地处理。例如,某模型的输入长度限制为512个token,对于较长的文本,就需要截断多余部分;对于较短的文本,可能需要添加特殊的填充token,使其达到规定长度。

提高语言理解精度:将文本细分为token后,模型可以更精确地捕捉语言中的语义和语法信息。比如,对于一些具有多种含义的词,通过上下文的其他 token,模型能更准确地判断其在具体语境中的意思。

常见的token划分方式单词级别:将文本按照空格等分隔符拆分成多个单独的词汇作为token。如 “加入招文袋知识星球一起学习AI” 会被拆分为 “加入”“招文袋”“知识星球”“一起” “学习”“AI”六个token。这种方式简单直接,但对于一些复杂的语言现象,如复合词、词的变形等处理可能不够精细。

字符级别:把文本中的每个字符都作为一个token。例如,“关注招文袋” 会被拆分为“关”“注”“招”“文”“袋”五个token。字符级别的token化可以处理任何未知的词汇,但会导致输入序列过长,增加模型的计算量和训练难度。

子词级别:结合了单词级别和字符级别的优点,将单词拆分成更小的子词单元。例如,“招文袋知识星球” 可能被拆分成 “招文”“袋”“知识”“星球”四个token。这种方式既能处理一些罕见词和复合词,又能保持相对合理的token数量和序列长度。

如何计算token的数量?

计算token数量的方法会因tokenization的方式不同而有所差异,常见的有基于空格或标点符号的简单统计、基于预训练模型的工具包统计、基于字符的统计等方法,以下是具体介绍:

基于空格和标点符号的简单统计

对于以单词为token的情况,可以通过统计文本中的空格和标点符号来大致计算token数量。例如,对于文本 “知识星球名:招文袋 星球号:75873546。”,可以通过计算空格和标点符号的数量来确定 token 的数量。一般来说,空格将单个词汇分隔开,标点符号也可以作为分隔的标志。在这个例子中,有四个token,分别是“知识星球名”“招文袋”“星球号”“75873546”。不过这种方法对于一些复杂的语言现象可能会不准确。

基于预训练模型的工具包统计

使用Hugging Face(一个专注于自然语言处理的开源社区)的tokenizers库:许多预训练语言模型都有相应的tokenizer工具,以Hugging Face的transformers库为例,它提供了各种预训练模型的tokenizer,可以方便地对文本进行token化并计算token数量。如对于BERT模型(一种语言表示模型),可以使用BertTokenizer(对文本进行分词和编码的工具)来处理文本。

使用AllenNLP(一个自然语言处理的模型框架)的tokenizers:AllenNLP也提供了丰富的自然语言处理工具,包括tokenizer。可以使用SpacyTokenizer或WordTokenizer等对文本进行处理和 token 数量计算。

基于字符的统计

如果是基于字符的tokenization,那么直接统计文本中的字符数量即可。例如,对于文本 “知识星球名:招文袋”,字符数量为8,即token数量为8。但需要注意一些特殊情况,如是否将空格、标点符号等也算作token。如果要将空格也算作token,那么 “知识星球名:招文袋” 的token数量就是9。

基于特定规则的统计

对于一些特定的领域或任务,可能会有自定义的token定义和计算规则。例如,在处理代码时,可以将每个关键字、变量名、运算符等作为一个 token(小白不用处理代码,了解即可)。

最后,简单直白总结如下:

- token定义:大语言模型接收到文字后,分词器将其切成的小块就是token,它可以是单个汉字、词语、短语、标点符号、单词或词缀等。大模型输出文字时也是逐个token生成,所以看起来像打字。

- token存在的原因:类比人脑处理信息方式,为提高效率、节省脑力,人脑常把有意义的词语或短语作为整体对待,人工智能也借鉴了这一思路,通过分词器把大段文字拆解成大小合适的token。

- 分词器分词方法:分词器通过统计大量文字,把经常一起出现的组合(如“招文袋” )、单个常用字(如“请”)、常见字母组合(如“ing” )、标点符号等,分别打包成token,配上编号,形成庞大的token表。大模型输入和输出时,处理的是token编号,再由分词器转换为人类可看懂的内容。

- token的作用及计费方式:token是大模型理解和生成文字的基础,大模型通过计算token之间的关系推算下一个可能的token。几乎所有大模型公司按token数量计费,因为其对应背后的计算量。

这里有些AI大模型说是免费,其实是免费一部分token,超过后就要收费。比如,有平台就出了政策,说新注册或者拉新会员注册就免费送你50万token。看着数字好像很多都用不完的样子,但其实如果天天用的话,几天也就用没了。

- 不同模型分词差异:不同模型分词结果不同,如“请关注订阅招文袋公众号”在DeepSeek和其他模型里分词结果不同,所以分词的数量也就不同了。此外,token在人工智能领域外也有出现,但含义不同。

就说到这里,如果耐心看完,也就对token的概念基本清晰无误了。