NLP(五十五)tiktoken的使用

  tiktoken是OpenAI于近期开源的Python第三方模块,该模块主要实现了tokenizer的BPE(Byte pair encoding)算法,并对运行性能做了极大的优化。本文将介绍tiktoken模块的使用。

tiktoken简介

  BPE(Byte pair encoding)算法是NLP中常见的tokenizer方式,关于其介绍和实现原理,读者可参考深入理解NLP Subword算法:BPE、WordPiece、ULM。
  tiktoken已开源至Github,访问网址为:https://github.com/openai/tiktoken,tiktoken会比其它开源的tokenizer库运行快3-6倍,以下是它与hugging face的tokenizer库的性能比较:
不同线程数下tiktoken与hugging face的性能比较
以上结果是使用GPT-2 tokenizer在1G文本上进行的性能测试,使用的GPT2TokenizerFast来源于tokenizers==0.13.2, transformers==4.24.0 , tiktoken==0.2.0

简单使用

  tiktoken的Encodings(编码方式)用于展示文本是如何被转化为token的。不同的模型使用不同类型的编码方式。tiktoken支持如下三种OpenAI模型的编码方式:

编码方式OpenAI模型
cl100k_basegpt-4, gpt-3.5-turbo, text-embedding-ada-002
p50k_baseCodex模型,如 text-davinci-002, text-davinci-003
r50k_base (或gpt2)GPT-3模型,如davinci

可以通过如下代码来获取模型的编码方式:

# -*- coding: utf-8 -*-
import tiktoken# get encoding name
print(tiktoken.encoding_for_model('gpt-3.5-turbo'))

输出结果为:

<Encoding 'cl100k_base'>

注意,p50k_baser50k_base基本类似,在非代码应用中,它们通常会给出相同的token。
  cl100k_base中的100k代码该编码方式中的词汇表数量大约为100k,词汇表文件为cl100k_base_vocab.json,下载网址为:https://raw.githubusercontent.com/weikang-wang/ChatGPT-Vocabulary/main/cl100k_base_vocab.json,词汇数量为100256,如此庞大的词汇数量使得OpenAI模型在多种语言上都有不俗的表现。

编码与解码

  编码(encode)是指将文本映射为token的数字列表,解码(decode)是指将token的数字列表转化为文本。参看以下的Python代码实现:

# -*- coding: utf-8 -*-
import tiktoken# simple test
enc = tiktoken.get_encoding("cl100k_base")
print(enc.encode("hello world") == [15339, 1917])
print(enc.decode([15339, 1917]) == "hello world")
print(enc.encode("hello <|endoftext|>", allowed_special="all") == [15339, 220, 100257])# encode
tokens = enc.encode("tiktoken is great!")
print(tokens)
print(len(tokens))# decode
print(enc.decode([83, 1609, 5963, 374, 2294, 0]))# chinese encode
tokens = enc.encode("大模型是什么?")
print(tokens)
print(len(tokens))# chinese decode
print(enc.decode([27384, 54872, 25287, 21043, 6271, 222, 82696, 11571]))

输出结果如下:

True
True
True
[83, 1609, 5963, 374, 2294, 0]
6
tiktoken is great!
[27384, 54872, 25287, 21043, 6271, 222, 82696, 11571]
8
大模型是什么?

计算token数量

  OpenAI模型中token数量较为关键,毕竟,OpenAI接口调用的收费方式是按照token数量来的。关于OpenAI接口调用的收费方式,可以参考网站:https://openai.com/pricing。
  下面是用tiktoken来计算token数量的Python代码:

# -*- coding: utf-8 -*-
import tiktokendef num_tokens_from_string(string: str, encoding_name: str) -> int:# Returns the number of tokens in a text string.encoding = tiktoken.get_encoding(encoding_name)num_tokens = len(encoding.encode(string))return num_tokensprint(num_tokens_from_string('tiktoken is great!', 'cl100k_base'))
print(num_tokens_from_string('大模型是什么?', 'cl100k_base'))

输出结果为:

6
8

  在hugging face网站上,已经有人实现了tiktoken的token数量计算,访问网站为:https://huggingface.co/spaces/JacobLinCool/tiktoken-calculator ,页面如下:
tiktoken的token数量计算
  在对话补全(chat completion)场景中计算token数量,以模型gpt-3.5-turbo为例,实现Python代码如下:

# -*- coding: utf-8 -*-
import tiktoken
import openaidef num_tokens_from_messages(messages):# Returns the number of tokens used by a list of messages.encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")tokens_per_message = 4  # every message follows <|start|>{role/name}\n{content}<|end|>\ntokens_per_name = -1  # if there's a name, the role is omittednum_tokens = 0for message in messages:num_tokens += tokens_per_messagefor key, value in message.items():num_tokens += len(encoding.encode(value))if key == "name":num_tokens += tokens_per_namenum_tokens += 3  # every reply is primed with <|start|>assistant<|message|>return num_tokensexample_messages = [{"role": "system","content": "You are a helpful, pattern-following assistant that translates corporate jargon into plain English.",},{"role": "system","name": "example_user","content": "New synergies will help drive top-line growth.",},{"role": "system","name": "example_assistant","content": "Things working well together will increase revenue.",},{"role": "system","name": "example_user","content": "Let's circle back when we have more bandwidth to touch base on opportunities for increased leverage.",},{"role": "system","name": "example_assistant","content": "Let's talk later when we're less busy about how to do better.",},{"role": "user","content": "This late pivot means we don't have time to boil the ocean for the client deliverable.",},
]# example token count from the function defined above
print(f"{num_tokens_from_messages(example_messages)} prompt tokens counted by num_tokens_from_messages().")
# example token count from the OpenAI API
openai.api_key = ""
response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=example_messages,temperature=0,max_tokens=1
)
print(f'{response["usage"]["prompt_tokens"]} prompt tokens counted by the OpenAI API.')

输出结果如下:

127 prompt tokens counted by num_tokens_from_messages().
127 prompt tokens counted by the OpenAI API.

可见,在num_tokens_from_messages中,对于输入messages中的每条message,token数量先加上4,然后对字典中的value值进行token数量统计,如果此时对应的key为name,则token数量减1,因为要忽略role字段的token数量。在模型gpt-3.5-turbo中,num_tokens_from_messages函数与OpenAI对话补全中的token数量计算方式是一致的。

总结

  本文介绍了tiktoken模型和它的简单使用,以及token数量计算方式。

参考文献

  1. 深入理解NLP Subword算法:BPE、WordPiece、ULM: https://zhuanlan.zhihu.com/p/86965595
  2. tiktoken的Github网址:https://github.com/openai/tiktoken
  3. tiktoken-calculator: https://huggingface.co/spaces/JacobLinCool/tiktoken-calculator
  4. How_to_count_tokens_with_tiktoken.ipynb: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb

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

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

相关文章

基于GPT3.5实现本地知识库解决方案-利用向量数据库和GPT向量接口-实现智能回复并限制ChatGPT回答的范围

原文&#xff1a;基于GPT3.5实现本地知识库解决方案-利用向量数据库和GPT向量接口-实现智能回复并限制ChatGPT回答的范围 - 腾讯云开发者社区-腾讯云 标题有点长&#xff0c;但是基本也说明出了这篇文章的主旨&#xff0c;那就是利用GPT AI智能回答自己设置好的问题 既能实现…

【关于ChatGPT的30个问题】18、ChatGPT对于用户隐私的保护措施如何?/ By 禅与计算机程序设计艺术

18、ChatGPT对于用户隐私的保护措施如何? 目录 18、ChatGPT对于用户隐私的保护措施如何?

c++ 旅行商问题(动态规划)

目录 一、旅行商问题简介旅行商问题问题概述问题由来 二、基本思路三、实现1、状态压缩2、状态转移 四、代码五、复杂度分析 一、旅行商问题简介 旅行商问题 TSP&#xff0c;即旅行商问题&#xff0c;又称TSP问题&#xff08;Traveling Salesman Problem&#xff09;&#xff…

ChatGPT 最佳实践指南之:系统地测试变化

Test changes systematically 系统地测试变化 Improving performance is easier if you can measure it. In some cases a modification to a prompt will achieve better performance on a few isolated examples but lead to worse overall performance on a more representa…

医疗健康大数据:应用实例与系统分析

来源&#xff1a;网络大数据 1 、概述 随着信息技术和物联网技术的发展、个人电脑和智能手机的普及以及社交网络的兴起&#xff0c;人类活动产生的数据正以惊人的速度增长。根据国际数据公司(International DataCorporation&#xff0c;IDC)的报告&#xff0c;仅2011年&#xf…

夏季达沃斯论坛《2023年十大新兴技术报告》正式公布

来源&#xff1a;悦智网 该报告概述了未来3-5年内有望对社会产生积极影响的技术。该报告的范围不仅仅描述了技术及其相关的风险和机遇&#xff0c;还包括了对每项技术如何对人类、地球、繁荣、产业和公平产生影响的定性评估。 在夏季达沃斯论坛&#xff08;世界经济论坛第十四届…

音视频技术开发周刊 | 292

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 谷歌将 AI 芯片团队并入云计算部门 追赶微软和亚马逊 OpenAI推出的ChatGPT获得一定成功&#xff0c;微软是OpenAI的重要投资者&#xff0c;它将ChatGPT植入必应搜索&#…

CollovGPT——人工智能工具颠覆传统室内设计行业

作为线上室内设计领先的平台&#xff0c;Collov一直致力于使用先进的技术重新定义「室内设计」&#xff1a;让室内设计不再是一种奢侈品&#xff0c;而是每一个人都可以享受的生活体验。 经过两年的迭代和开发&#xff0c;我们现在正式上线CollovGPT — 一款基于Stable Diffusi…

扩散模型和Transformer梦幻联动!一举拿下新SOTA

作者丨羿阁 萧箫 来源丨量子位 导读 “U-Net已死&#xff0c;Transformer成为扩散模型新SOTA了&#xff01;” 就在ChatGPT占尽AI圈风头时&#xff0c;纽约大学谢赛宁的图像生成模型新论文横空出世&#xff0c;收获一众同行惊讶的声音。 MILA在读ML博士生Ethan Caballero 论文…

92K Star !AI 都完全不需要咱们人类了?

Auto-GPT 究竟是一个开创性的项目&#xff0c;还是一个被过度炒作的 AI 实验&#xff1f;本文为我们揭开了喧嚣背后的真相&#xff0c;并揭示了 Auto-GPT 不适合实际应用的生产局限性。 作者&#xff1a;Jina AI 创始人兼 CEO 肖涵博士 译者&#xff1a; 新智元编辑部 原文链接…

揭秘 Auto-GPT 喧嚣背后的残酷真相!

Auto-GPT 究竟是一个开创性的项目&#xff0c;还是一个被过度炒作的 AI 实验&#xff1f;本文为我们揭开了喧嚣背后的真相&#xff0c;并揭示了 Auto-GPT 不适合实际应用的生产局限性。 本文来自 Jina 官方投稿&#xff0c;作者为 Jina AI 创始人兼 CEO 肖涵博士&#xff0c;如…

通过ChatGPT使用Mermaid.js生成时间序列图、组织结构图等

1、用mermaid.js 生成京东网站改版时间序列图 以下是使用Mermaid.js生成的京东网站改版时间序列图&#xff1a; gantttitle 京东网站改版时间序列图dateFormat YYYY-MM-DDsection 基础功能改版登录注册界面 :done, 2018-01-15, 10d购物车页面优化 :done, 2018-02-10, 10d商…

淘汰ChatGPT的Auto-GPT是炒作?自己跑代码,不需要人类,GitHub已破5万星

视学算法报道 编辑&#xff1a;编辑部 【导读】Auto-GPT究竟是一个开创性的项目&#xff0c;还是一个被过度炒作的AI实验&#xff1f;这篇文章为我们揭开了喧嚣背后的真相&#xff0c;并揭示了Auto-GPT不适合实际应用的局限性。 这两天&#xff0c;Auto-GPT——一款让最强语言…

AIPRM for ChatGPT 提示词模板扩展工具实践

&#xff08;1&#xff09;基本介绍 AIPRM for ChatGPT是一个Chrome浏览器扩展程序&#xff0c;基于Chromium内核开发的浏览器都可以使用该扩展&#xff0c;比如微软的Edge浏览器等。 在AIPRM的帮助下&#xff0c;我们可以在ChatGPT中一键使用各种专门为网站SEO、SaaS、营销、…

惊!掌握通义千问的关键,从这些必知内容开始!

今年快过半了&#xff0c;要说顶流话题还得是ChatGPT&#xff0c;相关话题的热度居高不下&#xff0c;而其从GPT-3.5到GPT-4的升级&#xff0c;也让我们深刻了解了什么叫一代版本一代神&#xff0c;从GPT-3.5到GPT-4&#xff0c;真的就是一个跨阶级式的升级。 技术内涵 ChatGPT…

讯飞星火大模型申请及测试:诚意满满

“ 大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 最近国产大模型跟下饺子似&#xff0c;隔几天就发布一个。厂家发布得起劲&#xf…

拍摄电话?窃听邮件?了解社会工程学攻击和你可能受到的风险

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 社会工程学 社会工程学-渗透测试 社会工程学作用 亦思社会工程学 你注册过哪些网站&…

文心千帆为你而来

1. 前言 3月16号百度率先发布了国内第一个人工智能大语言模型—文心一言。文心一言的发布在业界引起了不小的震动。而文心一言的企业服务则由文心千帆大模型平台提供。文心千帆大模型平台是百度智能云打造出来的一站式大模型开发与应用平台&#xff0c;提供包括文心一言在内的…

第二弹进阶吴恩达 ChatGPT Prompt 技巧

第一弹笔记在这里&#xff1a; 总结吴恩达 ChatGPT Prompt 免费课程 今天分享第二弹&#xff0c;进阶篇。 第一点&#xff0c;任务序列化。 通常看完一篇长文&#xff0c;脑子里往往充满无数疑问。急切想知道所有答案&#xff0c;必须列一个问题清单。对话式问法&#xff0c;对…

CVPR2023论文速递(2023.3.22)!已接入ChatGPT总结!共31篇!

整理&#xff1a;AI算法与图像处理 CVPR2023论文和代码整理&#xff1a;https://github.com/DWCTOD/CVPR2023-Papers-with-Code-Demo 欢迎关注公众号 AI算法与图像处理&#xff0c;获取更多干货&#xff1a; 大家好, 最近正在优化每周分享的CVPR论文, 目前考虑按照不同类别去分…