tiktoken ist ein schneller BPE-Tokenisierer zur Verwendung mit OpenAI-Modellen.
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" )
Die Open-Source-Version von tiktoken
kann von PyPI installiert werden:
pip install tiktoken
Die Tokeniser-API ist in tiktoken/core.py
dokumentiert.
Beispielcode mit tiktoken
finden Sie im OpenAI Cookbook.
tiktoken
ist zwischen 3-6x schneller als ein vergleichbarer Open-Source-Tokeniser:
Leistung gemessen an 1 GB Text mit dem GPT-2-Tokeniser, unter Verwendung von GPT2TokenizerFast
von tokenizers==0.13.2
, transformers==4.24.0
und tiktoken==0.2.0
.
Bitte posten Sie Fragen im Issue-Tracker.
Wenn Sie bei OpenAI arbeiten, lesen Sie unbedingt die interne Dokumentation oder wenden Sie sich an @shantanu.
Sprachmodelle sehen keinen Text wie Sie und ich, sondern eine Folge von Zahlen (sogenannte Token). Byte Pair Encoding (BPE) ist eine Möglichkeit, Text in Token umzuwandeln. Es hat ein paar wünschenswerte Eigenschaften:
tiktoken
enthält ein pädagogisches Untermodul, das benutzerfreundlicher ist, wenn Sie mehr über die Details von BPE erfahren möchten, einschließlich Code, der bei der Visualisierung des BPE-Verfahrens hilft:
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" )
Möglicherweise möchten Sie tiktoken
erweitern, um neue Kodierungen zu unterstützen. Es gibt zwei Möglichkeiten, dies zu tun.
Erstellen Sie Ihr Encoding
Objekt genau nach Ihren Wünschen und geben Sie es einfach weiter.
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 ,
}
)
Verwenden Sie den Plugin-Mechanismus tiktoken_ext
, um Ihre Encoding
Objekte bei tiktoken
zu registrieren.
Dies ist nur dann sinnvoll, wenn Sie tiktoken.get_encoding
benötigen, um Ihre Kodierung zu finden, andernfalls bevorzugen Sie Option 1.
Dazu müssen Sie ein Namespace-Paket unter tiktoken_ext
erstellen.
Gestalten Sie Ihr Projekt wie folgt und achten Sie darauf, die Datei tiktoken_ext/__init__.py
wegzulassen:
my_tiktoken_extension
├── tiktoken_ext
│ └── my_encodings.py
└── setup.py
my_encodings.py
sollte ein Modul sein, das eine Variable namens ENCODING_CONSTRUCTORS
enthält. Dies ist ein Wörterbuch von einem Codierungsnamen bis zu einer Funktion, die keine Argumente akzeptiert und Argumente zurückgibt, die an tiktoken.Encoding
übergeben werden können, um diese Codierung zu erstellen. Ein Beispiel finden Sie unter tiktoken_ext/openai_public.py
. Genaue Details finden Sie unter tiktoken/registry.py
.
Ihre setup.py
sollte etwa so aussehen:
from setuptools import setup , find_namespace_packages
setup (
name = "my_tiktoken_extension" ,
packages = find_namespace_packages ( include = [ 'tiktoken_ext*' ]),
install_requires = [ "tiktoken" ],
...
)
Dann pip install ./my_tiktoken_extension
und Sie sollten in der Lage sein, Ihre benutzerdefinierten Codierungen zu verwenden! Stellen Sie sicher, dass Sie keine bearbeitbare Installation verwenden.