tiktoken é um tokenizador BPE rápido para uso com modelos OpenAI.
import tiktoken
enc = tiktoken . get_encoding ( "o200k_base" )
assert enc . decode ( enc . encode ( "hello world" )) == "hello world"
# To get the tokeniser corresponding to a specific model in the OpenAI API:
enc = tiktoken . encoding_for_model ( "gpt-4o" )
A versão de código aberto do tiktoken
pode ser instalada a partir do PyPI:
pip install tiktoken
A API tokeniser está documentada em tiktoken/core.py
.
Um exemplo de código usando tiktoken
pode ser encontrado no OpenAI Cookbook.
tiktoken
é entre 3-6x mais rápido do que um tokenizador de código aberto comparável:
Desempenho medido em 1 GB de texto usando o tokeniser GPT-2, usando GPT2TokenizerFast
de tokenizers==0.13.2
, transformers==4.24.0
e tiktoken==0.2.0
.
Por favor, poste perguntas no rastreador de problemas.
Se você trabalha na OpenAI, verifique a documentação interna ou entre em contato com @shantanu.
Os modelos de linguagem não veem texto como você e eu; em vez disso, veem uma sequência de números (conhecida como tokens). A codificação de pares de bytes (BPE) é uma forma de converter texto em tokens. Tem algumas propriedades desejáveis:
tiktoken
contém um submódulo educacional que é mais amigável se você quiser aprender mais sobre os detalhes do BPE, incluindo código que ajuda a visualizar o procedimento do BPE:
from tiktoken . _educational import *
# Train a BPE tokeniser on a small amount of text
enc = train_simple_encoding ()
# Visualise how the GPT-4 encoder encodes text
enc = SimpleBytePairEncoding . from_tiktoken ( "cl100k_base" )
enc . encode ( "hello world aaaaaaaaaaaa" )
Você pode estender tiktoken
para suportar novas codificações. Existem duas maneiras de fazer isso.
Crie seu objeto Encoding
exatamente do jeito que você deseja e simplesmente distribua-o.
cl100k_base = tiktoken . get_encoding ( "cl100k_base" )
# In production, load the arguments directly instead of accessing private attributes
# See openai_public.py for examples of arguments for specific encodings
enc = tiktoken . Encoding (
# If you're changing the set of special tokens, make sure to use a different name
# It should be clear from the name what behaviour to expect.
name = "cl100k_im" ,
pat_str = cl100k_base . _pat_str ,
mergeable_ranks = cl100k_base . _mergeable_ranks ,
special_tokens = {
** cl100k_base . _special_tokens ,
"<|im_start|>" : 100264 ,
"<|im_end|>" : 100265 ,
}
)
Use o mecanismo de plugin tiktoken_ext
para registrar seus objetos Encoding
com tiktoken
.
Isso só é útil se você precisar de tiktoken.get_encoding
para encontrar sua codificação; caso contrário, prefira a opção 1.
Para fazer isso, você precisará criar um pacote de namespace em tiktoken_ext
.
Faça o layout do seu projeto assim, certificando-se de omitir o arquivo tiktoken_ext/__init__.py
:
my_tiktoken_extension
├── tiktoken_ext
│ └── my_encodings.py
└── setup.py
my_encodings.py
deve ser um módulo que contém uma variável chamada ENCODING_CONSTRUCTORS
. Este é um dicionário de um nome de codificação para uma função que não aceita argumentos e retorna argumentos que podem ser passados para tiktoken.Encoding
para construir essa codificação. Por exemplo, consulte tiktoken_ext/openai_public.py
. Para obter detalhes precisos, consulte tiktoken/registry.py
.
Seu setup.py
deve ser parecido com isto:
from setuptools import setup , find_namespace_packages
setup (
name = "my_tiktoken_extension" ,
packages = find_namespace_packages ( include = [ 'tiktoken_ext*' ]),
install_requires = [ "tiktoken" ],
...
)
Em seguida, basta pip install ./my_tiktoken_extension
e você poderá usar suas codificações personalizadas! Certifique-se de não usar uma instalação editável.