短语“Hello world”怎么可能有两个英语令牌和 12 个印地语令牌?
在我最近发表了一篇关于如何估算OpenAI的API成本的文章后,我收到了一条有趣的评论,有人注意到OpenAI API在其他语言中比在英语中贵得多,例如使用中文,日语或韩语(CJK)字符的语言。
![](http://www.openaimy.com/wp-content/uploads/2023/08/65a4f5adcf0d2c60883e793219b192bb.png)
一位读者对我最近关于如何使用库估算OpenAI的API成本的文章 的评论tiktoken
我没有意识到这个问题,但很快意识到这是一个活跃的研究领域:今年年初,Petrov等人[2]的一篇名为“语言模型标记器引入语言之间的不公平”的论文表明,“翻译成不同语言的相同文本可能具有截然不同的标记化长度,在某些情况下差异高达15倍。
作为复习,标记化是将文本拆分为标记列表的过程,标记列表是文本中的常见字符序列。
![](http://www.openaimy.com/wp-content/uploads/2023/08/1305a0f113279482d760285aa0f8d45c.png)
标记化示例
令牌化长度的差异是一个问题,因为 OpenAI API 以 1,000 个令牌为单位计费。因此,如果您在可比较文本中拥有多达 15 倍的代币,这将导致 API 成本增加 15 倍。
实验:不同语言的令牌数量
让我们将短语“Hello world”翻译成日语(こんにちは世界)并将其转录为印地语(हैलोवर्ल्ड)。当我们使用 OpenAI 的 GPT 模型中使用的分词器标记新短语时,我们得到以下结果(您可以在本文末尾找到我用于这些实验的代码):cl100k_base