tiktoken est un tokeniser BPE rapide à utiliser avec les modèles 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 version open source de tiktoken
peut être installée depuis PyPI :
pip install tiktoken
L'API tokeniser est documentée dans tiktoken/core.py
.
Un exemple de code utilisant tiktoken
peut être trouvé dans le livre de recettes OpenAI.
tiktoken
est entre 3 et 6 fois plus rapide qu'un tokeniser open source comparable :
Performances mesurées sur 1 Go de texte à l'aide du tokeniser GPT-2, en utilisant GPT2TokenizerFast
de tokenizers==0.13.2
, transformers==4.24.0
et tiktoken==0.2.0
.
Veuillez poster des questions dans le suivi des problèmes.
Si vous travaillez chez OpenAI, assurez-vous de consulter la documentation interne ou n'hésitez pas à contacter @shantanu.
Les modèles de langage ne voient pas le texte comme vous et moi, mais une séquence de nombres (appelés jetons). Le codage par paires d'octets (BPE) est un moyen de convertir du texte en jetons. Il possède quelques propriétés souhaitables :
tiktoken
contient un sous-module éducatif plus convivial si vous souhaitez en savoir plus sur les détails du BPE, y compris le code qui permet de visualiser la procédure 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" )
Vous souhaiterez peut-être étendre tiktoken
pour prendre en charge de nouveaux encodages. Il existe deux façons de procéder.
Créez votre objet Encoding
exactement comme vous le souhaitez et faites-le simplement circuler.
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 ,
}
)
Utilisez le mécanisme du plugin tiktoken_ext
pour enregistrer vos objets Encoding
avec tiktoken
.
Ceci n'est utile que si vous avez besoin tiktoken.get_encoding
pour trouver votre encodage, sinon préférez l'option 1.
Pour ce faire, vous devrez créer un package d'espace de noms sous tiktoken_ext
.
Disposez votre projet comme ceci, en veillant à omettre le fichier tiktoken_ext/__init__.py
:
my_tiktoken_extension
├── tiktoken_ext
│ └── my_encodings.py
└── setup.py
my_encodings.py
doit être un module contenant une variable nommée ENCODING_CONSTRUCTORS
. Il s'agit d'un dictionnaire allant d'un nom d'encodage à une fonction qui ne prend aucun argument et renvoie des arguments qui peuvent être transmis à tiktoken.Encoding
pour construire cet encodage. Pour un exemple, voir tiktoken_ext/openai_public.py
. Pour des détails précis, voir tiktoken/registry.py
.
Votre setup.py
devrait ressembler à ceci :
from setuptools import setup , find_namespace_packages
setup (
name = "my_tiktoken_extension" ,
packages = find_namespace_packages ( include = [ 'tiktoken_ext*' ]),
install_requires = [ "tiktoken" ],
...
)
Ensuite, pip install ./my_tiktoken_extension
et vous devriez pouvoir utiliser vos encodages personnalisés ! Assurez-vous de ne pas utiliser une installation modifiable.