大模型的TOKEN究竟是什么东西啊?前几天有人这么问我,我说像DeepSeek、GPT这样的大语言模型都有一个刀法精湛的小弟叫分词器。当大模型接收到一段文字,会让分词器把它切成很多个小块,这切出来的每一个小块就叫做一个TOKEN。比如这段话在大模型里可能会被切成这个样子。
token1
像这样单个的汉字可能是一个TOKEN,两个汉字构成的词语也可能是一个TOKEN,三个字构成的常见短语也可能是一个TOKEN,一个标点符号也可能是一个TOKEN,一个单词或者是几个字母组成的一个词缀,也可能是一个TOKEN。大模型,在输出文字的时候也是一个TOKEN一个TOKEN的往外蹦,所以看起来可能有点像在打字一样。她听完以后好像更疑惑了,诶?怎么TOKEN又可以是一个字,又可以是两个字,还可以是三个字,又可以是一个单词或者半个单词呢?这到底是怎么定出来的呀?
于是我决定换一个方式给他通俗解释一下大模型的TOKEN究竟是啥,以及为什么会是这样?那首先请你快速的念一下这几个字,看是不是有点没有认出来,或者需要愣2秒才可以认出来。
token2
但如果这些字出现在词语或者成语里,你瞬间就可以念出来。
token3
那之所以会这样,是因为我们的大脑在日常生活中喜欢把这些有含义的词语或者短语优先作为一个整体来对待,不到万不得已不会去一个字一个字的抠,这就导致我们对这些词语还挺熟悉,单看这些字却有点陌生。
而大脑之所以要这么做,是因为这样可以节省脑力。咱们的大脑还是非常懂得偷懒的,比如今天天气不错这句话,如果一个字一个字的处理,一共需要有6个部分,但如果划分成3个常见且有意义的词,就只需要处理三个部分之间的关系,从而提高效率,节省脑力。
既然人脑可以这么做,那人工智能当然也可以这么做。所以就有了分词器,专门帮大模型把大段的文字拆解成大小合适的一个个TOKEN,那不同的分词器它的分词方法和结果当然不一样,分的越合理,大模型就越轻松。这就好比餐厅里负责切菜的切配工,他的刀工越好,主厨做起菜来当然就越省事。
那分词器究竟是怎么分的词呢?其中一种方法大概是这样,分词器统计了大量文字以后,发现苹果这两个字经常一起出现,就把它们打包成一个TOKEN,给它一个数字编号,然后丢到一个大的词汇表里。这样下次再看到苹果这两个字,直接认出这个组合就可以了。然后他可能又发现鸡这个字经常出现,并且可以搭配不同的其他字,于是他就把鸡这个字打包成一个TOKEN,配一个编号,并且丢到词汇表里。他又发现ING这三个字母经常一起出现,于是又把ING打包成一个TOKEN,配一个编号收录到表里去。它又发现逗号经常出现,于是把逗号也作为一个TOKEN给他一个编号收录到表里去。经过大量统计和收集分词器就可以得到一个庞大的TOKEN表,可能有5万个、10万个甚至更多TOKEN,可以囊括我们日常见到的各种字词符号等等。这样一来,大模型在输入和输出的时候都只需要面对一堆数字编号就可以了,再由分词器按照TOKEN表转换成人类可以看懂的文字和符号,这样一分工,工作效率就非常的高。
有这么一个网站输入一段话,它就可以告诉你这段话是有几个TOKEN构成,分别是什么,以及这几个TOKEN的编号分别是什么?我来演示一下,这里有很多模型可以选,我选的是DeepSeek。我输入,哈哈,是一个TOKEN,哈哈哈,也是一个TOKEN,4个哈还是一个TOKEN,但是5个哈就变成了两个TOKEN,说明大家平常用两个或3个的更多。
再来。一心一意是三个TOKEN,鸡蛋是一个TOKEN。但是鸭蛋是两个TOKEN,关羽是一个TOKEN,张飞是两个TOKEN,孙悟空是一个TOKEN,沙悟净是3个TOKEN。
另外前面说过,不同的模型分词的结果可能会不同。比如苹果的苹字在DeepSeek里是两个TOKEN,但是在千问模型里却是一个TOKEN,所以回过头来看,TOKEN到底是什么呢?TOKEN,它就是大模型世界里的一块块积木。大模型之所以可以理解和生成文字,就是靠计算这些TOKEN之间的关系来推算出下一个TOKEN最有可能是哪一个。这也是为什么几乎所有大模型公司都是按照TOKEN的数量来计费,因为TOKEN的数量对应了背后的计算量。最后,TOKEN这个词在人工智能领域之外的其他领域也经常出现,大家可以理解为只是碰巧都叫TOKEN这个名字而已,就像同样都叫车模,这个车模和这个车模那能是一回事吗?
你说这大模型到底是用什么办法理解人类文字的呀?前几天有人这么问我,我告诉他大模型会把每一个词用数字来表示,这样预测下一个词就变成了,再做一道小学计算题,只要不停地往后做计算题,它就可以不停地输出文字。她听完以后好像更疑惑了的样子,可是一个词语的含义那么丰富,用数字是怎么把这些丰富含义都表达出来的呢?比如像苹果,既可以表示一种水果,又可以表示一家公司。用数字到底是怎么表达出复杂含义的呢?于是我决定换一个方式给他通俗解释一下。我们先假设国王这个词用1来表示,女王这个词也用1来表示,是不是可以看作这两个词在某一个维度上是完全相同的,比如地位,当然也可能是别的维度啊。而如果女王这个词用2来表示,就说明这两个词在某种维度上是不同的,这个维度可能是性别。现在我们开始用两个数字来表示每个词,国王是二一,而女王是二二是不是可以看作他们在某一个维度上是相同的,而在另一个维度上是不同的。你看多用一个数字来描述每一个词,就可以更细致地来描述出它们之间的区别。
那我们现在再加两个词,男人这个词在性别上和国王是一样的,都是一,但是地位和国王不同,女人这个词在性别上和女王是一样的,而在地位上和男人是一样的。
有趣的事情就发生了,你会发现国王减去男人,再加上女人,正好就等于女王。那我们来算一下,在地位上2-1+1=2,在性别上1-1+2=2,而(2,2)刚好就是女王。我们仅仅用了两个数来表示每个词,再配合上简单的加减法,就模拟出了这四个词在两个维度上的区别和相互的关系。那如果我们用更多的数来表示每一个词,比如用3个、10个、100个、1,000个数,那不就可以从更多的维度上来更细致地描述每个词之间的关系?大模型就是这么干的,在GPT1里,每个词用了768个精确到小数点后7位数的数字来表示。在GPT2里,每个词用1,600个数来表示。在GPT3里用的是12,288个数,在DeepSeekV3里用的是7,168个数来表示每一个词。不过大模型并不会告诉你每个数究竟代表什么意思,虽然每个数肯定代表着某种含义或者属性。
用来表示每个词的这一堆数字。专业术语叫做词嵌入,英文叫embedding。词嵌入为什么要叫这么奇怪的名字呢?你看刚才我们用两个数字来表示一个词,这两个数字是不是可以看作是一个二维坐标,或者是一个二维向量?那么用两个数字来表示一个词,就相当于是把这个词嵌入到了一个二维平面里,而用三个数字来表示一个词,就相当于把这个词嵌入到了一个三维空间里。
用7,168个数来表示每个词,就相当于把这个词嵌入到了7,168维的空间里,虽然我画不出来,你也想象不出来,但它在数学上的确存在,这就是为什么它叫词嵌入,因为真的是把一个词语嵌入到一个数学空间里。
那每一个词的词嵌入的值是怎么定出来的呢?刚开始都是随机的,相当于所有的词随机散乱在一个空间里,在大模型训练的阶段,会根据人类现有的大量文字的分布规律,把每一个词收拾到最合适的位置上。意思相近的词通常会离得更近一些。训练完以后,词语和词语之间的位置关系就可以体现出他们之间的词义关系。就像前面举的这个例子,而一个词的含义本质上就是由它和其他词的关系来决定。比如我们在解释一个词语的时候,会用很多其他的词来解释它,而解释它用的这些词的含义又需要用另外一些词来解释,如此往复最后就会发现词语和词语相互交织在一起才形成了每个词的含义,所以在空间上的位置关系就可以体现出每个词的含义,用的数字越多就描述得更细致。
那像苹果这个词既可以表示一种水果,又可以表示一家公司品牌,那它的词嵌入的位置究竟是在水果这边还是在公司这边呢?答案都不是,或者都是。那一开始它是处在一个中间状态,就像薛定谔的猫,当它和其他的词出现在一起,会相互发生计算,改变它原来的值,让它变成某一种更具体的含义。比如当苹果前面出现了一个吃字,那这个吃字就会和苹果发生计算,把苹果的词嵌入的值更新为代表水果的那个苹果。而如果苹果后面跟了一个手机或者公司,那这些词同样会和苹果发生计算,把苹果这个词的词嵌入更新为专门指代公司品牌的那个值。所以回过头来,大模型是怎么理解文字的呢?每个词的背后都是大量的数学计算。
Reply