ChatGPT如何计算token数?

GPT 不是适用于某一门语言的大型语言模型,它适用于几乎所有流行的自然语言。所以 GPT 的 token 需要 兼容 几乎人类的所有自然语言,那意味着 GPT 有一个非常全的 token 词汇表,它能表达出所有人类的自然语言。如何实现这个目的呢?

答案是通过 unicode 编码。

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

以下的网址可以计算一个语料的tokens数目:

https://platform.openai.com/tokenizericon-default.png?t=N7T8https://platform.openai.com/tokenizer

有两个问题:

  • 汉字是怎么编码的?
  • 编码和模型是否相关?

虽然 GPT-3.5 的代码和模型权重并未开源,但是 tokenizer 部分是开源到 GitHub - openai/tiktoken: tiktoken is a fast BPE tokeniser for use with OpenAI's models.tiktoken is a fast BPE tokeniser for use with OpenAI's models. - GitHub - openai/tiktoken: tiktoken is a fast BPE tokeniser for use with OpenAI's models.icon-default.png?t=N7T8https://github.com/openai/tiktoken 的,这是一个  BPE(Byte-Pair Encoding tokenization)方法的 tokenizer。

关于第一个问题,ChatGPT 是一个多语言模型,因此编码的问题不局限于汉字。tiktoken 的词表绝大多数是英文子词,并包含少量 unicode token 和表示字节的 token,以 UTF-8 的形式表示多语言。

关于第二个问题,不同的 OpenAI 模型采用了不同的编码方式。

  • GPT-4、GPT-3.5-turbo 等模型采用的是 cl100k_base,词表 100k 大小。
  • text-davinci 系列采用的是 p50k_base,词表大小 50k。
  • 还有一些其他模型采用了 r50k_base。
  • 更早的 GPT-2 有单独的编码方式,也开源在 HuggingFace。

https://github.com/openai/tiktoken/blob/main/tiktoken/model.pyicon-default.png?t=N7T8https://github.com/openai/tiktoken/blob/main/tiktoken/model.py作用:

用tiktoken进行token计数

​OpenAI的模型都有token限制。有时在将文本传递给API之前,需要计算字符串中的token数量,以确保不超过该限制。其中,一个需要计算token数量的技术是“检索增强生成(Retrieval Augmented Generation)”,通过对文档语料库运行搜索(或嵌入搜索)来回答用户的问题,提取最有可能的内容,并将其作为上下文涵盖在prompt中。成功实现这种模式的关键是,在token限制内包含尽可能多的相关上下文,因此需要能够计算token数量。OpenAI提供了一个名为tiktoken(https://github.com/openai/tiktoken)的Python库来实现这一功能。如果你深入研究这个库,就会发现它目前包括五种不同的切分方案:r50k_base、p50k_base、p50k_edit、cl100k_base和gpt2。其中,cl100k_base是最相关的,它是GPT-4和当前ChatGPT使用的经济型gpt-3.5-turbo模型的tokenizer。text-davinci-003 使用的是p50k_base 。在tiktoken/model.py 的MODEL_TO_ENCODING 词典中可以找到模型与tokenizer的完整映射。

相关推荐

  1. ChatGPT APi中Token是什么?如何计算Token使用量?

    2023-12-21 13:40:02       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-21 13:40:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-21 13:40:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-21 13:40:02       82 阅读
  4. Python语言-面向对象

    2023-12-21 13:40:02       91 阅读

热门阅读

  1. kotlin第三方库记录

    2023-12-21 13:40:02       50 阅读
  2. 测试理论知识三:测试用例、测试策略

    2023-12-21 13:40:02       49 阅读
  3. Linux 如何查看架构和系统

    2023-12-21 13:40:02       55 阅读
  4. 基于AES图像加解密算法的MATLAB仿真

    2023-12-21 13:40:02       47 阅读
  5. 一种带缓存DSP28335 CAN程序

    2023-12-21 13:40:02       49 阅读
  6. 安全运营之态势感知与监测

    2023-12-21 13:40:02       71 阅读
  7. Promise.all()和Promise.race()

    2023-12-21 13:40:02       63 阅读
  8. 最小质因子之和

    2023-12-21 13:40:02       57 阅读
  9. 记录 | 源码编译Arm CPU版FFmpeg

    2023-12-21 13:40:02       67 阅读
  10. Python爬虫山东重庆各地区天气预报

    2023-12-21 13:40:02       58 阅读
  11. 在国产GPU寒武纪MLU上快速上手Pytorch使用指南

    2023-12-21 13:40:02       76 阅读