首页 > 其他分享 >OpenAI的子词标记化神器--tiktoken 以及 .NET 支持库SharpToken

OpenAI的子词标记化神器--tiktoken 以及 .NET 支持库SharpToken

时间:2023-04-23 22:58:32浏览次数:46  
标签:SharpToken totalTokens -- tiktoken tokensPerMessage OpenAI gpt NET

经过 Tokenize 之后,一串文本就变成了一串整数组成的向量。OpenAI 的 Tiktoken 是 更高级的 Tokenizer , 编码效率更高、支持更大的词汇表、计算性能也更高。 OpenAI在其官方GitHub上公开了一个开源Python库:tiktoken,这个库主要是用力做字节编码对的。 字节编码对(Byte Pair Encoder,BPE)是一种子词处理的方法。其主要的目的是为了压缩文本数据。主要是将数据中最常连续出现的字节(bytes)替换成数据中没有出现的字节的方法。该算法首先由Philip Gage在1994年提出。

下图是tiktoken中公开的OpenAI所有大模型所使用的词表。

image

可以看到,ChatGPT和GPT-4所使用的是同一个,名为“cl100k_base”的词表。而text-davinci-003和text-davinci-002所使用的是名为”p50k_base“的词表。

image

OpenAI 官方开源了Python版本, .NET社区 移植了https://github.com/dmitry-brazhenko/SharpToken, 它提供了使用基于 GPT 的编码对令牌进行编码和解码的功能。此库是为 .NET 6 和 .NET Standard 2.1 构建的,使其与各种框架兼容。

下面是一个示例函数,用于对传递到 gpt-3.5-turbo-0381 或gpt-4-314 的消息的tokens进行计数。请注意,从消息中计算tokens的确切方式可能会因模型而异。将函数中的计数视为一个估计值:

public int CountMessagesTokens(string Model ,string Messages)
   {
       int tokensPerMessage;
       if (Model.StartsWith("gpt-3.5-turbo"))
       {
           tokensPerMessage = 5;
       }
       else if (Model.StartsWith("gpt-4"))
       {
           tokensPerMessage = 4;
       }
       else
       {
           tokensPerMessage = 5;
       }

      var encoding = GptEncoding.GetEncoding("cl100k_base");
       int totalTokens = 0;
       foreach (var msg in Messages)
       {
           totalTokens += tokensPerMessage;
           totalTokens += encoding.Encode(msg.Content).Count;
       }
       totalTokens += 3;

      return totalTokens;
   }

标签:SharpToken,totalTokens,--,tiktoken,tokensPerMessage,OpenAI,gpt,NET
From: https://www.cnblogs.com/shanyou/p/17348030.html

相关文章

  • 算法学习day05数组part扩展-69、35、34
    packageLeetCode.arraypart01;/***69.x的平方根*给你一个非负整数x,计算并返回x的算术平方根。*由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。*注意:不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。*示例:*输入:x=......
  • 错对队 团队博客 第六天
    今日工作:每个人继续深入各个成员的工作 佳岳:帮助实现学生登陆后的界面展示,以及实现不同角色数据的展示,也就是通过每个团队在数据库中唯一的编码来看自己团队的请求 艺凡:  瑞鹏:  出现的问题:佳岳:今天的其他课程比较多,没分出太多时间给团队任务,但还是尽量实现了数据......
  • 解决 vagrant up下载太慢的问题
    1、下载链接手动下载CentOS7镜像,这里的2004_01可以修改成自己想要的版本(这里下载很快的,一两分钟就搞定了)https://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box2、加载下载的镜像1、cd到下载镜像的文件,打开windowcmd命令......
  • Docker CLI docker compose exec常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • 使用cin和getline()输入字符串
    相同点:作为while的条件时,终止条件均为:Ctrlz(或则Z),执行本循环,执行完后进入下一个循环均为换行符。1strings;2while(cin>>s)3{4cout<<"youinputis:"<<endl;5cout<<s<<endl;6}1strings;2whi......
  • Android Automation
    启动虚拟机 emulator@pixel2-skip-adb-auth-allow-host-audio-port5554-no-snapshot-no-boot-anim-memory3072-partition-size8192启动Appium自动下载ChromeDriverappium--allow-insecurechromedriver_autodownload占位......
  • Vue3 Suspense
    视频3.Suspense等待异步组件时渲染一些额外内容,让应用有更好的用户体验使用步骤:异步引入组件import{defineAsyncComponent}from'vue'constChild=defineAsyncComponent(()=>import('./components/Child.vue'))使用Suspense包裹组件,并配置好default与fallba......
  • 错对队 团队博客 第七天
    今日工作:初步进行工作的统一和汇总,将我们分别所写的内容初步结合到一起。   出现的问题:我们不同人所使用的包,编辑器都有所不同,有的使用myBatista 来帮助实现功能但其他人没有没能完美的结合到一起,包括 idea和ecilipes之间的差别也导致很多问题,在不同编辑器上写的界......
  • java调用GDAL,接口运行一次出现A fatal error has been detected by the Java Runtime
    参考文章:https://www.jianshu.com/p/4bffe29e3a02问题描述:通过调用GDAL写的SpringBoot接口,第一次访问成功,第二次报错,显示报错的位置为gdal库。尝试了很多方法https://www.cnblogs.com/jokingremarks/p/15132599.html#!comments仍然不成功,感觉应该是第二次运行接口时,进行垃圾回......
  • 离线询问
    -https://ac.nowcoder.com/acm/contest/54877/D观察题目,以猫猫的友善值为横坐标,与猫猫期望的友善值为纵坐标,则人类的友善值为纵坐标,期待的友善值为横坐标问题就转换为了求猫猫坐标左上角的最左上的人类坐标点对猫猫以坐标形式排个序,遍历每个猫猫,在遍历过程中维护最左上角的人......