ЁЯПл The SchoolтА║ЁЯза AIтА║ЁЯзй рдзрдбрд╛ 03 тАФ Tokens: text рдЪреЗ puzzle рддреБрдХрдбреНрдпрд╛рдВрдд рдХрд╛рдкрдгреЗ
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯзй рдзрдбрд╛ 03 тАФ Tokens: text рдЪреЗ puzzle рддреБрдХрдбреНрдпрд╛рдВрдд рдХрд╛рдкрдгреЗ

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 03 ┬╖ рдорд╛рдЧреЗ: lesson-02-training ┬╖ рдкреБрдвреЗ: lesson-04-embeddings


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ02, рдЖрдгрд┐ рддреБрдореНрд╣реА рдХрдзреАрд╣реА type рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ prompt рд▓рд╛ рд╕рд░реНрд╡рд╛рдд рдЖрдзреА рд╣реЛрдгрд╛рд░реА рдЧреЛрд╖реНрдЯ: tokenization. рдЦрд░реА file: demo/tokenizer_toy.py тАФ tokenizer рдЖрдкрд▓реЗ рддреБрдХрдбреЗ рд╢рд┐рдХрддрд╛рдирд╛ рдкрд╛рд╣рд╛.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

model рд╣рд╛ рдПрдХ calculator рдЖрд╣реЗ тАФ рддреЛ рдЖрдХрдбреЗ рдЦрд╛рддреЛ, рдЕрдХреНрд╖рд░реЗ рдирд╛рд╣реА. рдореНрд╣рдгреВрди рдмрд╛рдХреА рдХрд╛рд╣реАрд╣реА рд╣реЛрдгреНрдпрд╛рдЖрдзреА, text puzzle рддреБрдХрдбреНрдпрд╛рдВрдд ЁЯзй рдХрд╛рдкрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рддреБрдХрдбреНрдпрд╛рд▓рд╛ рдПрдХ ID рдХреНрд░рдорд╛рдВрдХ рдорд┐рд│рддреЛ. рдХреЛрдгрддреЗ рддреБрдХрдбреЗ? рдЗрдереЗрдЪ рд╣реБрд╢рд╛рд░реА рдЖрд╣реЗ тАФ рддреЗ рдХреЛрдгреАрд╣реА рд╣рд╛рддрд╛рдиреЗ рдирд┐рд╡рдбрдд рдирд╛рд╣реА. tokenizer рддреЗ data рдордзреВрди рд╢рд┐рдХрддреЛ, рдПрдХрд╛рдЪ, рдРрдХрд╛рдпрд▓рд╛ рдореВрд░реНрдЦ рд╡рд╛рдЯрдгрд╛рд▒реНрдпрд╛ рдирд┐рдпрдорд╛рдиреЗ, рдЬреЛ рд╣рдЬрд╛рд░реЛ рд╡реЗрд│рд╛ рдкреБрдиреНрд╣рд╛ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ:

"рдПрдХрдореЗрдХрд╛рдВрдЪреНрдпрд╛ рд╢реЗрдЬрд╛рд░реА рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рд╡реЗрд│рд╛ рдпреЗрдгрд╛рд░реЗ рджреЛрди рддреБрдХрдбреЗ рд╢реЛрдзрд╛. рддреНрдпрд╛рдВрдирд╛ рдЪрд┐рдХрдЯрд╡реВрди рдПрдХ рддреБрдХрдбрд╛ рдХрд░рд╛. рдкреБрдиреНрд╣рд╛ рдХрд░рд╛." (рд╣реЗрдЪ BPE тАФ byte-pair encoding.)

рд╣реЗ рдкреБрд░реЗрд╕рд╛ рд╡реЗрд│ рдЪрд╛рд▓рд╡рд╛ рдЖрдгрд┐ рддреБрдХрдбреЗ рдЕрдкреНрд░рддрд┐рдо рд╕рдордЬреВрддрджрд╛рд░ рдмрдирддрд╛рдд: рдиреЗрд╣рдореАрдЪреЗ рд╢рдмреНрдж рдПрдХрдЪ рддреБрдХрдбрд╛ рдмрдирддрд╛рдд (the, school), рджреБрд░реНрдореАрд│ рд╢рдмреНрдж рдЙрдк-рддреБрдХрдбреНрдпрд╛рдВрддреВрди рдмрдирддрд╛рдд (un + believ + able), рдЖрдгрд┐ рдХрд╛рд╣реАрд╣реА тАФ рдХреЛрдгрддреАрд╣реА typo, рдХреЛрдгрддреАрд╣реА рднрд╛рд╖рд╛, рдХреЛрдгрддреЗрд╣реА emoji тАФ рдЫреЛрдЯреНрдпрд╛ рддреБрдХрдбреНрдпрд╛рдВрддреВрди рдЕрдЬреВрдирд╣реА рд▓рд┐рд╣рд┐рддрд╛ рдпреЗрддреЗ. ~50тАУ100 рд╣рдЬрд╛рд░ рддреБрдХрдбреЗ рд╕рдВрдкреВрд░реНрдг рдорд╛рдирд╡реА text рд╡реНрдпрд╛рдкрддрд╛рдд.

рдпрд╛рддреВрди рддреБрдореНрд╣реА рдЕрдиреБрднрд╡рд▓реЗрд▓реНрдпрд╛ рдЦрд▒реНрдпрд╛ рд╡рд┐рдЪрд┐рддреНрд░рдкрдгрд╛рдВрдЪреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдорд┐рд│рддреЗ:

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
    t["ЁЯУЭ text<br/>'the robot reads'"]
    bpe["ЁЯзй tokenizer - BPE<br/>glue the most frequent pair,<br/>repeat thousands of times"]
    ids["ЁЯФв token IDs<br/>[464, 9379, 9743]"]
    m["ЁЯза model<br/>sees ONLY these numbers -<br/>never words, never letters"]
    t -->|"1 cut into learned pieces"| bpe -->|"2 look up IDs"| ids -->|"3"| m

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

Tokens рд╣реА model рдЪреА рд╕рдВрд╡реЗрджрдирд╛-рд╡реНрдпрд╡рд╕реНрдерд╛ рдЖрд╣реЗ тАФ рдпрд╛рд╣реВрди рдмрд╛рд░реАрдХ рдХрд╛рд╣реАрд╣реА рддреНрдпрд╛рд▓рд╛ рдЕрдХреНрд╖рд░рд╢рдГ рдЬрд╛рдгрд╡реВ рд╢рдХрдд рдирд╛рд╣реА. "LLMs X рдордзреНрдпреЗ рд╡рд┐рдЪрд┐рддреНрд░рдкрдгреЗ рд╡рд╛рдИрдЯ рдЖрд╣реЗрдд" рдпрд╛ рдпрд╛рджреАрдЪрд╛ рдЕрд░реНрдзрд╛ рднрд╛рдЧ (spelling рдЪреЗ рдЦреЗрд│, рд▓рд╛рдВрдм рдЖрдХрдбреНрдпрд╛рдВрд╡рд░рдЪреЗ рдЧрдгрд┐рдд, рдХрд╛рд╣реА рднрд╛рд╖рд╛рдВрддреАрд▓ рдпрдордХ) "рдЕрд░реНрдерд╛рддрдЪ тАФ рддреНрдпрд╛рд▓рд╛ рдЦрд░реЛрдЦрд░ рджрд┐рд╕рдгрд╛рд░реЗ рддреБрдХрдбреЗ рдкрд╛рд╣рд╛" рдпрд╛рдд рд╡рд┐рд░рдШрд│рддреЛ. model рдЪреНрдпрд╛ рд╡рд╛рдЧрдгреНрдпрд╛рдЪреЗ debugging рддреНрдпрд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд▓реЗ рдЗрдереВрди рд╕реБрд░реВ рд╣реЛрддреЗ, рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рд╣реЗрдЪ рджрд┐рд╕рддреЗ.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛

python3 demo/tokenizer_toy.py

рдкрд╛рд╣рд╛ BPE рдЖрдзреА e+a, рдордЧ t+he рдЪрд┐рдХрдЯрд╡рддреЛ, рдордЧ tea/ead рд╡рд╛рдврд╡рддреЛ тАФ рдПрдХрд╛ рдореВрд░реНрдЦ рдирд┐рдпрдорд╛рддреВрди рд╕рдордЬреВрддрджрд╛рд░ рддреБрдХрдбреЗ рддреБрдордЪреНрдпрд╛ рдбреЛрд│реНрдпрд╛рдВрд╕рдореЛрд░ рддрдпрд╛рд░ рд╣реЛрддрд╛рдд. рдордЧ рдПрдХрд╛ рдЦрд▒реНрдпрд╛рд╢реА рдЦреЗрд│рд╛: OpenAI рдЪреЗ tokenizer playground рдХрд┐рдВрд╡рд╛ tiktoken тАФ рддреНрдпрд╛рдд unbelievable, strawberry, рдЖрдгрд┐ рдПрдХ Hindi рд╡рд╛рдХреНрдп paste рдХрд░рд╛, рдЖрдгрд┐ рддреБрдХрдбреЗ рдореЛрдЬрд╛.

тПня╕П рдкреБрдвреЗ

рдкреНрд░рддреНрдпреЗрдХ рддреБрдХрдбреНрдпрд╛рдЪрд╛ ID рдордЧ рдЖрдХрдбреНрдпрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреАрдд рдмрджрд▓рддреЛ, рдЬреА рддреНрдпрд╛рдЪрд╛ рдЕрд░реНрде рд╕рд╛рдард╡рддреЗ тАФ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рд╢реЗрдЬрд╛рд░реА рдпреЗрддрд╛рдд: embeddings, рдЕрд░реНрдерд╛рдВрдЪрд╛ рдмреИрдардХ-рддрдХреНрддрд╛.

git checkout lesson-04-embeddings

ЁЯзй Lesson 03 тАФ Tokens: cutting text into puzzle pieces

ЁЯУН You are here: Lesson 03 of 12 ┬╖ Previous: lesson-02-training ┬╖ Next: lesson-04-embeddings


ЁЯУж What's in this branch

Lessons 01тАУ02, plus the first thing that happens to every prompt you ever type: tokenization. Real file: demo/tokenizer_toy.py тАФ watch a tokenizer learn its pieces.

ЁЯзТ Explain like I'm 5

A model is a calculator тАФ it eats numbers, not letters. So before anything else, text is cut into puzzle pieces ЁЯзй and each piece gets an ID number. Which pieces? Here's the clever part тАФ nobody chooses them by hand. The tokenizer learns them from data, by one dumb-sounding rule repeated thousands of times:

"Find the two pieces that appear next to each other most often. Glue them into one piece. Repeat." (That's BPE тАФ byte-pair encoding.)

Run it long enough and the pieces become wonderfully sensible: common words end up as ONE piece (the, school), rare words get built from sub-pieces (un + believ + able), and anything тАФ any typo, any language, any emoji тАФ can still be spelled out from small pieces. ~50тАУ100 thousand pieces cover all human text.

This explains real quirks you've met:

ЁЯЧ║я╕П Diagram

flowchart LR
    t["ЁЯУЭ text<br/>'the robot reads'"]
    bpe["ЁЯзй tokenizer - BPE<br/>glue the most frequent pair,<br/>repeat thousands of times"]
    ids["ЁЯФв token IDs<br/>[464, 9379, 9743]"]
    m["ЁЯза model<br/>sees ONLY these numbers -<br/>never words, never letters"]
    t -->|"1 cut into learned pieces"| bpe -->|"2 look up IDs"| ids -->|"3"| m

тЭУ What

ЁЯдФ Why

Tokens are the model's sensory system тАФ it literally cannot perceive anything finer. Half the "LLMs are weirdly bad at X" list (spelling games, arithmetic on long numbers, rhyming in some languages) dissolves into "of course тАФ look at the pieces it actually sees." Debugging model behavior starts with what did it see, and this is what it sees.

ЁЯзк Try it

python3 demo/tokenizer_toy.py

Watch BPE glue e+a, then t+he, then grow tea/ead тАФ sensible pieces emerging from a dumb rule, before your eyes. Then go play with a real one: OpenAI's tokenizer playground or tiktoken тАФ paste unbelievable, strawberry, and a Hindi sentence, and count the pieces.

тПня╕П Next

Each piece-ID then becomes a list of numbers that encodes its meaning тАФ near-synonyms end up neighbors: embeddings, the seating chart of meanings.

git checkout lesson-04-embeddings
тЖР PrevioustrainingNext тЖТembeddings

This page is the lesson's README from the lesson-03-tokens branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.