GPT 如何将文本拆分成 token?
在GPT模型中,tokenization(词元化)指的是将用户输入的文本分割成token(词元)的过程,以让GPT能更好地理解输入文本的词义、句法和语义,以及生成更连贯的输出内容。这是非常重要的预处理操作,对模型的最终效果有重大影响。
而tokenizer(词元生成器)是将文本切分成token的工具或组件。它将原始文本转换成模型可处理的数字形式,为GPT的生成与推理提供基础能力。
本文详细介绍了GPT tokenizer的工作原理。作者Simon Willison是开源Web应用框架Django的共同发起人,他也开源了用于探索和发布数据的工具Datasette。(以下内容由OneFlow编译,转载请联系OneFlow获得授权。来源:https://simonwillison.net/2023/Jun/8/gpt-tokenizers/)
The dog eats the apples El perro come las manzanas 片仮名
1
探索一些有趣的token
探索一些有趣的token
-
“The”: 464 -
“ dog”: 3290 -
“ eats”: 25365 -
“ the”: 262 -
“ apples”: 22514
-
“El”: 9527 -
“ per”: 583 -
“ro”: 305 -
“ come”: 1282 -
“ las”: 39990 -
“ man”: 582 -
“zan”: 15201 -
“as”: 292
-
片: 31965 229 -
仮: 20015 106 -
名: 28938 235
2
故障token
故障token
这些故障token都位于token嵌入空间的中心附近。这意味着,模型在区分这些token和其他位于嵌入空间中心附近的token时存在困难,因此当被要求“重复”这些token时,模型会选择错误的token。
这种情况发生的原因是,这些token在互联网上出现了很多次(例如,davidjl用户在Reddit上有163000个帖子,仅仅是计算递增的数字),但是这些token本身并不难以预测(因此,在训练过程中,梯度变得几乎为零,并且嵌入向量会衰减到零,这是某些优化器在归一化权重时会进行的操作)。
3
用tiktoken进行token计数
用tiktoken进行token计数
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-4")
# or "gpt-3.5-turbo" or "text-davinci-003"
tokens = encoding.encode("Here is some text")
token_count = len(tokens)
现在token将是一个包含四个整数token ID的数组——在该例中是[8586, 374, 1063, 1495]。
使用.decode()方法将一个token ID数组转换回文本:
text = encoding.decode(tokens)
# 'Here is some text'
4
ttok
ttok
# Count tokens
echo -n "Count these tokens" | ttok
# Outputs: 3 (the newline is skipped thanks to echo -n)
# Truncation
curl 'https://simonwillison.net/' | strip-tags -m | ttok -t 6
# Outputs: Simon Willison’s Weblog
# View integer token IDs
echo "Show these tokens" | ttok --tokens
# Outputs: 7968 1521 11460 198
5
token生成过程
token生成过程
试用OneFlow: github.com/Oneflow-Inc/oneflow/
本文分享自微信公众号 - OneFlow(OneFlowTechnology)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Wasmer 悬赏 5000 美元以在 Zig 中添加 Wasm/WASIX 支持
Wasmer 创始人兼 CEO Syrus Akbary 在 Zig 仓库中提出了一个“支持 WASIX”的 issue;并提供了 5000 美元的悬赏。他表示,Zig 支持 WASIX 对 Wasm 和 Zig 社区来说均意义重大。 根据介绍,WASIX 是对现有 WASI ABI 的长期稳定和支持,加上额外的非侵入式系统调用扩展,以弥补缺失的空白;使真正、实用和有用的应用程序能够立即编译和使用。它的目标是加快 WASI 生态系统的发展,且不会对 wasi_preview1 进行任何破坏性变更。 目前 WASIX 已在 WASI Preview 1 的基础上增加了对 pthreads、sockets、fork、process spawning 等功能的全面支持。Syrus Akbary 指出,通过在 Zig 中提供对 WASIX 的支持,将会带来诸多好处。譬如: 它允许在许多平台(包括浏览器)中使用 Zig 它将允许拥有一个通用的 C 编译器,将 C 文件(在底层使用 LLVM)编译到任何架构,并且可以从任何支持运行 Wasm 的架构运行 它将允许创建 http 服务器(或 TCP/...
- 下一篇
Python 改进 f-strings 语法,解除封印,整合到统一的解析器中
在将于 10 月初发布的 Python 3.12 中,我们将看到 f-strings 语法带来了一些变化,新版取消了最初制定 f-strings 时制定的一些限制。经过这些变化,使得 f-strings 更加统一,成为一种可以直接整合到解析器中的正式化语法。这将会为终端用户和库开发者带来较大优势,同时也大大降低用于解析 f-strings 代码的维护成本。 最初设置 f-strings 限制是为了能够在不修改现有词法分析器的情况下将 f-strings 的解析实现到 CPython 中。但目前来看,这些限制反而带来了复杂性。比如: 在表达式部分中,无法使用引号字符来界定 f-strings >>> f'Magic wand: { bag['wand'] }' ^ SyntaxError: invalid syntax 之前考虑过的一种解决方法会导致在执行的代码中出现转义序列,这在 f-strings 中是被禁止的: >>> f'Magic wand { bag[\'wand\'] } string' SyntaxError: f-st...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 2048小游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启