Tiktoken es un tokenizador BPE rápido para usar con los modelos de 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" )
La versión de código abierto de tiktoken
se puede instalar desde PyPI:
pip install tiktoken
La API del tokenizador está documentada en tiktoken/core.py
.
Se puede encontrar un código de ejemplo que utiliza tiktoken
en el libro de cocina de OpenAI.
tiktoken
es entre 3 y 6 veces más rápido que un tokenizador de código abierto comparable:
Rendimiento medido en 1 GB de texto usando el tokenizador GPT-2, usando GPT2TokenizerFast
de tokenizers==0.13.2
, transformers==4.24.0
y tiktoken==0.2.0
.
Publique preguntas en el rastreador de problemas.
Si trabaja en OpenAI, asegúrese de consultar la documentación interna o no dude en contactar a @shantanu.
Los modelos de lenguaje no ven texto como usted y yo, sino que ven una secuencia de números (conocidos como tokens). La codificación de pares de bytes (BPE) es una forma de convertir texto en tokens. Tiene un par de propiedades deseables:
tiktoken
contiene un submódulo educativo que es más amigable si deseas aprender más sobre los detalles de BPE, incluyendo código que ayuda a visualizar el procedimiento de 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" )
Es posible que desee ampliar tiktoken
para admitir nuevas codificaciones. Hay dos formas de hacer esto.
Cree su objeto Encoding
exactamente de la manera que desee y simplemente páselo.
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 ,
}
)
Utilice el mecanismo del complemento tiktoken_ext
para registrar sus objetos Encoding
con tiktoken
.
Esto solo es útil si necesita tiktoken.get_encoding
para encontrar su codificación; de lo contrario, prefiera la opción 1.
Para hacer esto, necesitarás crear un paquete de espacio de nombres en tiktoken_ext
.
Diseñe su proyecto de esta manera, asegurándose de omitir el archivo tiktoken_ext/__init__.py
:
my_tiktoken_extension
├── tiktoken_ext
│ └── my_encodings.py
└── setup.py
my_encodings.py
debería ser un módulo que contenga una variable denominada ENCODING_CONSTRUCTORS
. Este es un diccionario de un nombre de codificación a una función que no toma argumentos y devuelve argumentos que se pueden pasar a tiktoken.Encoding
para construir esa codificación. Para ver un ejemplo, consulte tiktoken_ext/openai_public.py
. Para obtener detalles precisos, consulte tiktoken/registry.py
.
Tu setup.py
debería verse así:
from setuptools import setup , find_namespace_packages
setup (
name = "my_tiktoken_extension" ,
packages = find_namespace_packages ( include = [ 'tiktoken_ext*' ]),
install_requires = [ "tiktoken" ],
...
)
¡Luego simplemente pip install ./my_tiktoken_extension
y deberías poder usar tus codificaciones personalizadas! Asegúrese de no utilizar una instalación editable.