在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源创计划”,欢迎正在阅读的你也加入,一起分享。