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

openai,标记,神器,tiktoken,以及,net,支持,sharptoken · 浏览次数 : 600

小编点评

**Tokenize 过程** 1. **Tokenizer 库**将文本数据转换为一个整数组成的向量。 2. **OpenAI 的  Tiktoken  **是更高级的 Tokenizer ,拥有更高的编码效率、更大的词汇表和计算性能。 3. **Byte Pair Encoder (BPE)**是一种子词处理方法,用于压缩文本数据。 4. **BPE**首先由 Philip Gage 在 1994 年提出,用于压缩文本数据。 5. **CountMessagesTokens 函数**计算给定的消息的 token数量。 6. **函数参数**包括模型名称和消息字符串。 7. **BPE**用于编码消息,并根据模型名称计算 token数量。 8. **返回值**表示消息的 token数量。 **总结** 生成内容时,需要使用 Tokenize 库进行文本转换,并根据模型名称调整 token数量。

正文

经过 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;
   }

与OpenAI的子词标记化神器--tiktoken 以及 .NET 支持库SharpToken相似的内容:

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

经过 Tokenize 之后,一串文本就变成了一串整数组成的向量。OpenAI 的 Tiktoken 是 更高级的 Tokenizer , 编码效率更高、支持更大的词汇表、计算性能也更高。 OpenAI在其官方GitHub上公开了一个开源Python库:tiktoken,这个库主要是用力做字节编码对

OpenAI的离线音频转文本模型 Whisper 的.NET封装项目

whisper介绍 Open AI在2022年9月21日开源了号称其英文语音辨识能力已达到人类水准的Whisper神经网络,且它亦支持其它98种语言的自动语音辨识。 Whisper系统所提供的自动语音辨识(Automatic Speech Recognition,ASR)模型是被训练来运行语音辨识与

使用SemanticKernel 进行智能应用开发(2023-10更新)

以OpenAI 的ChatGPT 所掀起的GenAI 快速创新浪潮,其中连接LLM 和 应用之间的桥梁的两大开源项目:LangChain[1]和Semantic Kernel[2] ,在半年前写过一篇文章 LangChain vs Semantic Kernel [3],这半年以来Semantic

基于OpenAI的代码编辑器,有点酷有点强!

最近随着OpenAI的一系列大动作,把软件领域搅的天翻地覆。各行各业各领域,都出现了大量新产品。 开发工具领域首当其冲,各种新工具层出不穷,今天TJ就给大家推荐一个全新的开发工具:Cursor 从官网介绍可以看到,Cursor基于OpenAI实现,继承了最新的GPT-4模型,支持Mac、Window

把盏言欢,款款而谈,ChatGPT结合钉钉机器人(outgoing回调)打造人工智能群聊/单聊场景,基于Python3.10

就像黑火药时代里突然诞生的核弹一样,OpenAI的ChatGPT语言模型的横空出世,是人工智能技术发展史上的一个重要里程碑。这是一款无与伦比、超凡绝伦的模型,能够进行自然语言推理和对话,并且具有出色的语言生成能力。

深入探讨Function Calling:在Semantic Kernel中的应用实践

引言 上一章我们熟悉了 OpenAI 的 function calling 的执行原理,这一章节我们讲解一下 function calling 在 Semantic Kernel 的应用。 在OpenAIPromptExecutionSettings跟 LLM 交互过程中,ToolCallBehav

使用ChatGPT自动构建知识图谱

1.概述 本文将探讨利用OpenAI的gpt-3.5-turbo从原始文本构建知识图谱,通过LLM和RAG技术实现文本生成、问答和特定领域知识的高效提取,以获得有价值的洞察。在开始前,我们需要明确一些关键概念。 2.内容 2.1 什么是知识图谱? 知识图谱是一种语义网络,它表示和连接现实世界中的实体

[转帖]聊聊Chat GPT-1到GPT-4的发展历程

http://blog.itpub.net/69925873/viewspace-2935360/ OpenAI的Generative Pre-trained Transformer(GPT)模型通过引入非常强大的语言模型,在自然语言处理(NLP)领域引起了巨大震动。这些模型可以执行各种NLP任务,

技术速览|Meta Llama 2 下一代开源大型语言模型

Meta Llama 2 旨在与 OpenAI 的 ChatGPT 和 Google Bard 等其他著名语言模型对标,但又具有独特优势。在本文中,我们将聊聊 Llama 2 是什么、它的优势是什么、是如何开发的、以及如何开始上手使用。

Yarp项目代理ChatGPT,解决网络无法访问openAI的问题

# 1.创建Yarp项目 目的:通过代理解决网络无法访问openAI的问题 项目源码地址:[https://github.com/raokun/YarpProject](https://github.com/raokun/YarpProject) ## 1.创建.net7 webapi项目 创建一个