tiktoken adalah tokeniser BPE cepat untuk digunakan dengan model 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
versi open source dapat diinstal dari PyPI:
pip install tiktoken
API tokeniser didokumentasikan di tiktoken/core.py
.
Contoh kode penggunaan tiktoken
dapat ditemukan di OpenAI Cookbook.
tiktoken
3-6x lebih cepat dibandingkan tokeniser open source yang sebanding:
Kinerja diukur pada teks 1GB menggunakan tokeniser GPT-2, menggunakan GPT2TokenizerFast
dari tokenizers==0.13.2
, transformers==4.24.0
dan tiktoken==0.2.0
.
Silakan posting pertanyaan di pelacak masalah.
Jika Anda bekerja di OpenAI, pastikan untuk memeriksa dokumentasi internal atau jangan ragu untuk menghubungi @shantanu.
Model bahasa tidak melihat teks seperti Anda dan saya, melainkan melihat rangkaian angka (dikenal sebagai token). Pengkodean pasangan byte (BPE) adalah cara mengubah teks menjadi token. Ia memiliki beberapa properti yang diinginkan:
tiktoken
berisi submodul edukasi yang lebih ramah jika ingin mempelajari lebih lanjut detail BPE, termasuk kode yang membantu memvisualisasikan prosedur 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" )
Anda mungkin ingin memperluas tiktoken
untuk mendukung pengkodean baru. Ada dua cara untuk melakukan ini.
Buat objek Encoding
Anda persis seperti yang Anda inginkan dan sebarkan saja.
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 ,
}
)
Gunakan mekanisme plugin tiktoken_ext
untuk mendaftarkan objek Encoding
Anda dengan tiktoken
.
Ini hanya berguna jika Anda memerlukan tiktoken.get_encoding
untuk menemukan pengkodean Anda, jika tidak, pilih opsi 1.
Untuk melakukan ini, Anda perlu membuat paket namespace di bawah tiktoken_ext
.
Tata letak proyek Anda seperti ini, pastikan untuk menghilangkan file tiktoken_ext/__init__.py
:
my_tiktoken_extension
├── tiktoken_ext
│ └── my_encodings.py
└── setup.py
my_encodings.py
harus berupa modul yang berisi variabel bernama ENCODING_CONSTRUCTORS
. Ini adalah kamus dari nama penyandian ke fungsi yang tidak menggunakan argumen dan mengembalikan argumen yang dapat diteruskan ke tiktoken.Encoding
untuk membuat penyandian tersebut. Misalnya, lihat tiktoken_ext/openai_public.py
. Untuk detail selengkapnya, lihat tiktoken/registry.py
.
setup.py
Anda akan terlihat seperti ini:
from setuptools import setup , find_namespace_packages
setup (
name = "my_tiktoken_extension" ,
packages = find_namespace_packages ( include = [ 'tiktoken_ext*' ]),
install_requires = [ "tiktoken" ],
...
)
Maka cukup pip install ./my_tiktoken_extension
dan Anda seharusnya dapat menggunakan pengkodean khusus Anda! Pastikan untuk tidak menggunakan instalasi yang dapat diedit.