【OpenAI】第二节(Token)关于ChatGPT的Token你了解多少?最全Token讲解过程!

在当今的人工智能领域,GPT(Generative Pre-trained Transformer)无疑是最受关注的技术之一。无论是在文本生成、对话系统,还是在内容创作中,GPT都展现出了强大的能力。然而,很多人对GPT的工作原理仍然存在疑惑,尤其是在Token的计算方面。本文将为你详细解析GPT如何计算Token数,并提供实用的教程,帮助你更好地理解这一重要概念。

在这里插入图片描述

一、什么是Token?🤔

在大语言模型领域,Token 通常用来表示文本数据中的一个单元。在不同的语境下,一个Token可能代表一个字、一个词,或者是一个句子。在英文中,一个Token通常是一个词或者是标点符号。而在一些汉语处理系统中,一个Token可能是一个字,也可能是一个词。Token是处理和理解文本数据的基本单元。

1.1 Token的类型

  • 词Token:将每个单词视为一个Token,适用于处理结构化的文本。
  • 子词Token:将单词进一步拆分为更小的单位,适用于处理复杂词汇和拼写错误,提高模型对罕见词汇的理解能力。
  • 字符Token:将每个字符视为一个Token,适用于某些特定的应用场景,如字符级生成任务。

在深度学习的语言模型中,如Transformer,输入的文本首先被切分成一系列的tokens。这些tokens被转换成向量,然后被输入到神经网络中进行处理。因此,Token可以被理解为语言模型接收和处理的最小的信息单元。在训练过程中,每个Token会关联一个预测,这个预测可以是下一个Token的预测,也可以是该Token的属性预测,如词性、情感等。

Token与字节的类比

很多同学将Token理解为中文语义里的“字节”,这种理解在类比关系上有一定的相似度,因为“字节”是计算机存储和处理数据的基本单元,而“Token”则是语言模型处理文本信息的基本单元。然而,这种理解并不完全准确。

  • 复杂性:Token在语言模型中的作用比字节更加复杂和多元。每个Token不仅代表文本数据中的一个单位,还携带了丰富的语义信息。
  • 语义信息:在处理一句话时,Token可能表示一个字,一个词,甚至一个短语,每个Token在模型中都有一个对应的向量表示,包含了该Token的语义信息、句法信息等。

因此,尽管Token和字节都是基本的处理单位,但Token在大语言模型中的含义和作用要比字节更加丰富和复杂。

Token类型示意图

二、为什么会有Token?

GPT的输入和输出并不是直接以中文字符或词语为单位进行处理。实际上,GPT不仅能处理中文,还能处理几乎世界上所有流行的自然语言。因此,我们需要引入Token的概念,以适应多语言的需求。

Token是自然语言处理的最细粒度,简单来说,GPT的输入是一个个的Token,输出也是一个个的Token。这种设计使得GPT能够兼容和处理多种语言。

Token与Unicode编码

要实现多语言兼容,GPT使用了Unicode编码。Unicode是一种在计算机上使用的字符编码,旨在为每种语言中的每个字符设定统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换和处理的要求。

例如,中文中的“你”字对应的Unicode编码为:

\u4F60

具体解析:

  • \u 表示后面是一个Unicode编码。
  • 4F60 是16进制数,转换成10进制为20320,表示Unicode编码中的第20320个编码对应“你”字。
  • 最后将20320转换为2进制,得到 0100 1111 0110 0000

因此,GPT实际上是将我们输入的文字转换成Token,通过GPT模型预测Token,再将Token转换成文字,最后输出给我们。
在这里插入图片描述

Token限制

ChatGPT-4-32k 模型的上下文上限

ChatGPT-4-32k模型的上下文上限是32k Token(即32000个Token)。这一限制会影响以下两个方面:

  1. 一次性输入:一次性输入的Token数量不能超过上限。
  2. 一次对话的总体上下文长度:整个对话中所有Token的总数不能超过上限。如果超过,模型会遗忘最前面的对话内容。

这种机制类似于鱼的短时记忆,确保模型能够在有限的上下文中进行有效的对话。不同模型可能具有不同的Token限制,选择合适的模型时需要考虑这一因素,以满足具体应用需求。

三、GPT如何计算Token数?🔍

GPT的Token计算主要依赖于其Token化算法,以下是计算Token数的基本步骤:

3.1 文本预处理

在计算Token数之前,GPT会对输入文本进行预处理。这包括:

  • 去除多余的空格
  • 标点符号的标准化
  • 转换为统一的字符编码(如Unicode)

3.2 Token化

GPT使用**Byte Pair Encoding(BPE)**算法进行Token化。BPE是一种基于频率的算法,通过合并最常见的字节对来生成Token。具体步骤如下:

  1. 初始化:将文本中的每个字符视为一个Token。
  2. 统计频率:计算所有Token的频率。
  3. 合并Token:选择频率最高的Token对进行合并,生成新的Token。
  4. 重复:重复步骤2和3,直到达到预设的Token数量或没有更多的合并可能。

这种方法能够有效地生成适应多语言、多词汇的Token化方案,尤其在处理复合词和罕见词汇时表现出色。

3.3 计算Token数

一旦文本被Token化,GPT可以轻松计算出Token的数量。每个Token都被分配一个唯一的ID,GPT通过这些ID来识别和处理Token。最终,Token数即为Token化后的Token列表的长度。

Token计算流程图

四、如何在Python中计算Token数?🖥️

如果你使用的是GPT-4或其他模型,可以选择相应的Token化器,以获得更准确的结果。

针对GPT-4的示例

由于GPT-4可能使用不同的Token化算法或词汇表,你可以使用OpenAI提供的tiktoken库来计算Token数:

pip install tiktoken
import tiktoken# 初始化tiktoken的Token化器
enc = tiktoken.get_encoding("gpt-4")# 输入文本
text = "你好,GPT!今天我们来学习如何计算Token数。"# Token化
tokens = enc.encode(text)# 计算Token数
token_count = len(tokens)print(f"输入文本的Token数为:{token_count}")

五、其他计算Token的方法

除了使用编程方法计算Token数,还有一些在线工具可以帮助你快速计算Token数量:

  1. OpenAI Tokenizer
    这是OpenAI官方提供的Token计算工具,支持多种语言和模型,界面简洁,使用方便。

  2. Tiktoken计算器
    该工具支持不同的OpenAI模型,提供详细的Token分解信息,适合需要深入了解Token结构的用户。

  3. Hugging Face Tokenizer
    Hugging Face也提供在线的Token计算工具,支持多种预训练模型,适合开发者和研究人员使用。

这些工具提供了便捷的界面,适合不熟悉编程的用户快速计算Token数。此外,部分工具还支持批量处理和详细的Token分解,满足不同用户的需求。

在这里插入图片描述

六、Open API KEY

1、API Key的介绍

在使用OpenAI的GPT模型时,API Key扮演着非常关键的角色。

通过API Key,用户可以调用GPT进行文本生成、对话系统和内容创作等多种任务。同时,API Key帮助OpenAI跟踪每个用户的Token使用情况,确保在订阅计划内合理使用资源。

了解Token的计算及其限制对于优化API调用、降低成本至关重要。

2、如何获取API Key

这个在之前的文章讲过,可以查看之前的文章。

【OpenAI】第一节(OpenAI API)获取OpenAI API KEY的两种方式,开发者必看全方面教程!

3、如何用代码调API KEY

下面是Python代码调用的方式

from openai import OpenAI
client = OpenAI(# 能用AI平台 Api Key地址:# https://www.nyai.chat/chat?invite=nyai_1141439&fromChannel=csdn241021_27_tokenapi_key = "能用AI-平台生成的key",base_url = ""
)response = client.chat.completions.create(messages=[# 用户提示词:鲁迅为什么打周树人?{'role': 'user', 'content': "鲁迅为什么打周树人?"},],model='gpt-4',  # 模型stream=True
)for chunk in response:print(chunk.choices[0].delta.content, end="", flush=True)

4、模型的大全

完整的模型名称大全

七、总结🌟

通过本文的深入解析,我们了解了GPT如何计算Token数的基本原理和实际应用。掌握Token的计算不仅有助于我们更好地使用GPT,还能在文本生成、费用计算、模型优化和多语言处理等方面发挥重要作用。

如果你对GPT及其应用有更多的兴趣,欢迎关注我的CSDN博客,获取更多关于自然语言处理和人工智能的精彩内容!同时,也欢迎在评论区分享你的看法和问题,让我们一起探讨!💬


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MobileViT模型实现图像分类

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【Bi-LSTM-CRF实现中文命名实体识别工具(TensorFlow)】 2.【卫星图像道路检测…

跨界创新|使用自定义YOLOv11和Ollama(Llama 3)增强OCR文本识别

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

DevOps实践:在GitLab CI/CD中集成静态分析Helix QAC的工作原理与优势

基于云的GitLab CI/CD平台使开发团队能够简化其CI/CD流程,并加速软件开发生命周期(SDLC)。 将严格的、基于合规性的静态分析(如Helix QAC所提供)作为新阶段添加到现有的GitLab CI/CD流程中,将进一步增强SD…

如何使用 NumPy 和 Matplotlib 进行数据可视化

如何使用 NumPy 和 Matplotlib 进行数据可视化 在数据科学领域,NumPy 和 Matplotlib 是 Python 中最常用的两个库。NumPy 用于科学计算和数据处理,而 Matplotlib 提供了丰富的图表工具来展示数据。本文将介绍如何将这两个库结合使用,轻松进行…

现货黄金怎么交易能快速入门?

现货黄金交易的核心在于以小博大,即用较小的亏损去搏击较大的利润,成功不仅要靠资金上的管理,更需要心态和策略的支持。现货黄金交易的过程也是人性修炼的过程,新手投资者不仅要学会交易技巧,更需要学会控制情绪&#…

sql server 行转列及列转行

图1 图2 1.行转列 (图1->图2) 1.方法一 (数据库通用),使用max 加case when 函数 -- 行转列 图1->图2 SELECT name,MAX(CASE WHEN subject语文 THEN score ELSE 0 END) AS "语文",MAX(CASE WHEN subject数学 …

雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的

如果域名处填写的分别为 IP 与域名,那么当使用进行 IP 请求时,则将会命中第一个配置的站点 以上图为例,如果用户使用 IP 访问,命中 example.com。 如果域名处填写的分别为域名与泛域名,除非准确命中域名,否…

将后端返回的网络url转成blob对象,实现pdf预览

调用e签宝返回的数据是网络链接就很让人头疼,最后想到可以转换成blob对象,便在百度上找到方法,记录一下。 祝大家节日快乐!! 代码在最后!!!! 代码在最后!&a…

Yandex搜索广告开户与投放全攻略!

Yandex 是俄罗斯最大的搜索引擎与数字广告平台,在俄罗斯市场具有广泛的影响力和庞大的用户基础。以下是 Yandex 搜索广告开户与投放的全攻略,包括云衔科技支持的相关服务。 一、Yandex 搜索广告的优势 1、广泛的市场覆盖:Yandex 在俄罗斯的…

Git合并多个分支中的提交内容

IDEA中使用 IEAD编辑器中使用Git IEAD编辑器中使用Git 案例一: 把test分支的其中提交的内容合并到main分支上。 你现在通过IDEA开发的分支是test分支,当你在test分支把内容都写完了并且提交内容保存到了本地的git暂存区中的时候,如果此时你的…

接口测试(九)jmeter——关联(JSON提取器)

一、JSON提取器介绍 要检查的响应字段:样本数据源引用名称:可自定义设置引用方法:${引用变量名}匹配数字 匹配数字含义-1表示全部0随机1第一个2第二个…以此类推 缺省值:匹配失败时的默认值ERROR,可以不写 二、js…

记一次js泄露pass获取核心业务

文章目录 一、漏洞原因二、漏洞成果三、漏洞利用过程1.js泄露口令信息2、进入系统后台,管理数据库权限(22个)3、执行命令获取服务器权限4、通过添加扫描脚本,获取存活的内网信息四、免责声明一、漏洞原因 系统存在js泄露口令信息,获取系统超级管理员权限。系统为核心数据研…

ASP.NET MVC-font awesome-localhost可用IIS不可用

环境: win10, .NET 6.0,IIS 问题描述 本地IIS正常显示,但放到远程服务器上,每个icon都显示?。同时浏览器的控制台报错: fontawesome-webfont.woff2:1 Failed to load resource: the server responded with a statu…

Ubuntu下Mysql修改默认存储路径

首先声明,亲身经验,自己实践,网上百度了好几个帖子,全是坑,都TMD的不行,修改各种配置文件,就是服务起不来,有以下几种配置文件需要修改 第一个文件/etc/mysql/my.cnf 这个文件是存…

力扣382:链表随机结点

给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。 实现 Solution 类: Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有…

Vue开发

新建 Vue 项目 vue create project_name按照自己的需求模块进行安装 选择安装 Router、Vuex 插件 选择 Vue3 版本 是否使用 history 模式的路由,按需选 Y 或者 n 后面的选项都默认即可 是否记住上面的选择项:否 总体配置 启动项目 cd demo…

solr安装ik分词器

环境 系统 windows docker v4.34.3 solr:8.11.2 ik:ik-analyzer-solr7-7.x 1.安装步骤 1.1启动solr 1.1启动(为了方便编辑配置文件,挂载了文件目录) docker run -d -p 8983:8983 -v C:\docker\solr\classes:/opt/solr/server/solr-webap…

Windows解决localhost拒绝了连接请求

最近,在开发前端Vue项目时,Vue项目启动成功,没有任何报错,服务控制台已出现APP访问地址,如下图所示。 览器打开后页面先是空白,然后过了一会儿显示无法访问此网站,localhost拒绝了我们的连接请…

关于写更新接口的一些理解

“更新”接口的思路 在上篇文章中,我们讲了如何编写删除接口。这篇文章将讲解如何编写更新接口。 其实,更新接口和新增接口非常相似。整体思路都是传入form参数,然后在service层将form转换成entity,最后调用updateById方法&…

idea删除git历史提交记录

前言:此文章是我在实际工作中有效解决问题的方法,做记录的同时也供大家参考! 一、 首先,通过idea的终端或系统的cmd控制台,进入到你的项目文件根目录,idea终端默认就是项目根目录。 二、确保你当前处于要删…