搞了半年 AI 开发,Token 这个概念到现在还是一团浆糊。有人说一个 Token 约等于一个词,有人说约等于4个字符,中文又说一个字差不多就是一个 Token。到底有没有个准确的换算关系?字节、字符、词元、Token 这几个概念我感觉每篇文章说的都不一样。
Token 不是字节也不是字符,它是 tokenizer 分词后的最小单位。不同模型用的 tokenizer 不一样,所以同一句话在 GPT 和 Claude 里分出来的 Token 数量不同。大致规律是英文平均 1 token ≈ 4 字符 ≈ 0.75 个单词,中文大概 1 个汉字 ≈ 1-2 个 token,取决于 tokenizer 的词表大小。BPE 算法会把高频词合并成一个 token,所以常见词 token 少,生僻词 token 多。不要指望有个精确的换算公式,本来就是动态的。
去 OpenAI 的 tokenizer 页面粘一段文字就知道了,比看十篇文章管用
前端转 AI 的说一下,一开始我也搞混了。词元就是 Token 的中文翻译,是同一个东西。字节是存储概念 1 byte = 8 bit,字符是编码概念比如 UTF-8 一个中文 3 字节,Token 是分词概念。三者根本不在一个维度上,没有固定换算关系。
mark 留个爪
补充下为什么没有固定换算。Token 的本质是 BPE 或者 SentencePiece 算法对文本做的分割,这个分割依赖训练语料统计频率。GPT-4 用的 cl100k_base 词表有 10 万个 token,Claude 用的词表更大些。同一句中文在不同词表下切出来的 token 数可以差 30% 以上。所以你问一个 token 等于多少个字符,答案是看模型看语言看具体文本,没有通用公式。
所以根本就没有准确换算…那每次 API 调用前怎么预估费用啊
中文一个字大概1.5个token,英文一个词大概1.3个token左右
token不等于字不等于词,它是分词器切出来的最小单元
中文一个字可能是一token也可能是半个,看模型分词方式
一个中文字大约1.5个token,英文一个词大概0.7个,这比例记住就够用了
一个中文字大概是两三个Token,英文一个词一两个,就这么理解
不同模型的tokenizer切法不一样,你这说法太笼统了
词元这个翻译最贴切,一个token不一定是一个完整的字
Token就是分词器切出来的最小语言单位,跟字节不一样
词元是Token的中文翻译,字节是存储单位,字符是显示单位
中文分词和英文分词差异很大,所以同样的内容中文Token更多
tokenizer页面试一次比看十篇文章强,真的
这几个概念经常被混用,这篇终于理清楚了
中文一字1.5个token这个比例用着顺手