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
เร็วกว่าโทเค็นโอเพ่นซอร์สที่เทียบเคียงได้ระหว่าง 3-6 เท่า:
ประสิทธิภาพที่วัดบนข้อความขนาด 1GB โดยใช้โทเค็น 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
และคุณควรจะสามารถใช้การเข้ารหัสที่คุณกำหนดเองได้! ตรวจสอบให้แน่ใจ ว่าไม่ได้ ใช้การติดตั้งที่แก้ไขได้