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
tokeniser API 記錄在tiktoken/core.py
中。
使用tiktoken
的範例程式碼可以在 OpenAI Cookbook 中找到。
tiktoken
比同類開源 tokeniser 快 3-6 倍:
使用 GPT-2 tokeniser、來自tokenizers==0.13.2
、 transformers==4.24.0
和tiktoken==0.2.0
GPT2TokenizerFast
在 1GB 文字上測量效能。
請在問題追蹤器中發布問題。
如果您在 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
插件機制向tiktoken
註冊您的Encoding
物件。
只有當您需要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
,您應該就可以使用自訂編碼了!確保不要使用可編輯的安裝。