概述
用ChatGPT它是按照token计费的。那么token是什么?怎么计算出来的?
ChatGPT用的token化算法是BPE。名字是叫做字节对编码。原先就有这个算法,是用来做数据压缩的。ChatGPT的算法跟原来不一样。
它的结果是建立一个从 字符串(token) 到 整数编码 的1-1映射。
encoder: pair of index -> index
decoder: index -> str
编码是一步一步两两合并。解码是1步到位。
一、建立对应表的步骤
一开始将原串转成UTF-8,那么就变成一串 [0, 256) 的整数了。
所以,我们初始的对应表是,0~255 的 ASCII 码 对应到 0~255 的整数。
接下来,相邻两个数结对,统计每个对的出现次数。注意,这些对是有重叠的,比如[1, 2, 5, 10],配对结果是[(1, 2), (2, 5), (5, 10)]。
取出现次数最多的对合并。如何合并?就是产生一个新的整数编码,记录它对应的字符串。然后把整数串里面这些对都替换掉,2个旧码换成1个新编码,这就是合并。
进行多轮。
二、解码步骤
解码非常简单。整数编码查表,直接替换成字符串,就还原了。
三、编码步骤
编码是按照对应表所确立的顺序替换。原整数串的相邻两个数成对。在对应表里面找到编号最小的,且出现在当前整数串的对,合并。然后继续。直到无法合并。合并顺序必须满足,编号小的合并都已经做完了,才能做编号大的。这样保证相同的串还是替换成相同的合并后编码。
其他
英语单词间的空格并没有特殊处理。没有先把文本切分成一个个单词再输入到BPE。
网友评论