tiktoken は、OpenAI のモデルで使用する高速 BPE トークナイザーです。
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
tokeniser API はtiktoken/core.py
に文書化されています。
tiktoken
を使用したコード例は、OpenAI クックブックにあります。
tiktoken
同等のオープンソース トークナイザーよりも 3 ~ 6 倍高速です。
GPT-2 トークナイザーを使用し、 tokenizers==0.13.2
、 transformers==4.24.0
、およびtiktoken==0.2.0
のGPT2TokenizerFast
を使用して、1 GB のテキストでパフォーマンスを測定しました。
問題トラッカーに質問を投稿してください。
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
拡張したい場合があります。これを行うには 2 つの方法があります。
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
だけで、カスタム エンコーディングを使用できるようになります。編集可能なインストールは使用しないようにしてください。