OpenAI的子词标记化神器--tiktoken 以及 .NET 支持库SharpToken
2023/4/24 1:22:05
本文主要是介绍OpenAI的子词标记化神器--tiktoken 以及 .NET 支持库SharpToken,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
OpenAI在其官方GitHub上公开了一个开源Python库:tiktoken,这个库主要是用力做字节编码对的。 字节编码对(Byte Pair Encoder,BPE)是一种子词处理的方法。其主要的目的是为了压缩文本数据。主要是将数据中最常连续出现的字节(bytes)替换成数据中没有出现的字节的方法。该算法首先由Philip Gage在1994年提出。
下图是tiktoken中公开的OpenAI所有大模型所使用的词表。
可以看到,ChatGPT和GPT-4所使用的是同一个,名为“cl100k_base”的词表。而text-davinci-003和text-davinci-002所使用的是名为”p50k_base“的词表。
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;
}
这篇关于OpenAI的子词标记化神器--tiktoken 以及 .NET 支持库SharpToken的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#