tiktoken — это быстрый токенизатор BPE для использования с моделями 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" )
Версию tiktoken
с открытым исходным кодом можно установить из PyPI:
pip install tiktoken
API токенайзера описан в tiktoken/core.py
.
Пример кода, использующего tiktoken
можно найти в кулинарной книге OpenAI.
tiktoken
работает в 3-6 раз быстрее, чем аналогичный токенайзер с открытым исходным кодом:
Производительность измерена на 1 ГБ текста с использованием токенизатора GPT-2, GPT2TokenizerFast
из tokenizers==0.13.2
, transformers==4.24.0
и tiktoken==0.2.0
.
Пожалуйста, задавайте вопросы в трекере проблем.
Если вы работаете в OpenAI, обязательно ознакомьтесь с внутренней документацией или свяжитесь с @shantanu.
Языковые модели не видят текст, как вы и я, вместо этого они видят последовательность чисел (известную как токены). Кодирование пар байтов (BPE) — это способ преобразования текста в токены. У него есть пара желательных свойств:
tiktoken
содержит образовательный подмодуль, который более удобен, если вы хотите узнать больше о деталях BPE, включая код, который помогает визуализировать процедуру 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" )
Возможно, вы захотите расширить tiktoken
для поддержки новых кодировок. Есть два способа сделать это.
Создайте свой объект Encoding
именно так, как вы хотите, и просто передайте его.
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 ,
}
)
Используйте механизм плагина tiktoken_ext
для регистрации ваших объектов Encoding
с помощью tiktoken
.
Это полезно только в том случае, если вам нужен tiktoken.get_encoding
для поиска вашей кодировки, в противном случае выберите вариант 1.
Для этого вам нужно создать пакет пространства имен под tiktoken_ext
.
Разместите свой проект следующим образом, пропустив файл tiktoken_ext/__init__.py
:
my_tiktoken_extension
├── tiktoken_ext
│ └── my_encodings.py
└── setup.py
my_encodings.py
должен быть модулем, содержащим переменную с именем ENCODING_CONSTRUCTORS
. Это словарь от имени кодировки до функции, которая не принимает аргументов и возвращает аргументы, которые можно передать в tiktoken.Encoding
для создания этой кодировки. Пример см. в tiktoken_ext/openai_public.py
. Точные сведения см. на странице tiktoken/registry.py
.
Ваш setup.py
должен выглядеть примерно так:
from setuptools import setup , find_namespace_packages
setup (
name = "my_tiktoken_extension" ,
packages = find_namespace_packages ( include = [ 'tiktoken_ext*' ]),
install_requires = [ "tiktoken" ],
...
)
Затем просто pip install ./my_tiktoken_extension
, и вы сможете использовать свои собственные кодировки! Обязательно не используйте редактируемую установку.