1. Tokenizing
Reading time: 4 minutes
Tokenizing
Tokenizing is die proses om data, soos teks, in kleiner, hanteerbare stukke genaamd tokens op te breek. Elke token word dan aan 'n unieke numeriese identifiseerder (ID) toegeken. Dit is 'n fundamentele stap in die voorbereiding van teks vir verwerking deur masjienleer modelle, veral in natuurlike taalverwerking (NLP).
tip
Die doel van hierdie aanvanklike fase is baie eenvoudig: Verdeel die invoer in tokens (ids) op 'n manier wat sin maak.
How Tokenizing Works
- Splitting the Text:
- Basic Tokenizer: 'n Eenvoudige tokenizer kan teks in individuele woorde en leestekens verdeel, terwyl spaties verwyder word.
- Example:
Teks:"Hello, world!"
Tokens:["Hello", ",", "world", "!"]
- Creating a Vocabulary:
- Om tokens in numeriese IDs om te skakel, word 'n vocabulary geskep. Hierdie vocabulary lys al die unieke tokens (woorde en simbole) en ken elkeen 'n spesifieke ID toe.
- Special Tokens: Dit is spesiale simbole wat by die vocabulary gevoeg word om verskillende scenario's te hanteer:
[BOS]
(Beginning of Sequence): Dui die begin van 'n teks aan.[EOS]
(End of Sequence): Dui die einde van 'n teks aan.[PAD]
(Padding): Gebruik om alle reekse in 'n batch dieselfde lengte te maak.[UNK]
(Unknown): Verteenwoordig tokens wat nie in die vocabulary is nie.- Example:
As"Hello"
ID64
toegeken word,","
is455
,"world"
is78
, en"!"
is467
, dan:
"Hello, world!"
→[64, 455, 78, 467]
- Handling Unknown Words:
As 'n woord soos"Bye"
nie in die vocabulary is nie, word dit vervang met[UNK]
.
"Bye, world!"
→["[UNK]", ",", "world", "!"]
→[987, 455, 78, 467]
(Aannemende[UNK]
het ID987
)
Advanced Tokenizing Methods
Terwyl die basiese tokenizer goed werk vir eenvoudige teks, het dit beperkings, veral met groot vocabularies en die hantering van nuwe of seldsame woorde. Gevorderde tokenizing metodes spreek hierdie probleme aan deur teks in kleiner subeenhede op te breek of die tokenisering proses te optimaliseer.
- Byte Pair Encoding (BPE):
- Purpose: Verminder die grootte van die vocabulary en hanteer seldsame of onbekende woorde deur hulle op te breek in gereeld voorkomende byte pare.
- How It Works:
- Begin met individuele karakters as tokens.
- Samevoeg iteratief die mees gereelde pare van tokens in 'n enkele token.
- Gaan voort totdat daar geen meer gereelde pare is wat saamgevoeg kan word nie.
- Benefits:
- Elimineer die behoefte aan 'n
[UNK]
token aangesien alle woorde verteenwoordig kan word deur bestaande subwoord tokens te kombineer. - Meer doeltreffende en buigsame vocabulary.
- Example:
"playing"
mag tokenized word as["play", "ing"]
as"play"
en"ing"
gereelde subwoorde is.
- WordPiece:
- Used By: Modelle soos BERT.
- Purpose: Soortgelyk aan BPE, breek dit woorde in subwoord eenhede om onbekende woorde te hanteer en die vocabulary grootte te verminder.
- How It Works:
- Begin met 'n basis vocabulary van individuele karakters.
- Voeg iteratief die mees gereelde subwoord by wat die waarskynlikheid van die opleidingsdata maksimeer.
- Gebruik 'n probabilistiese model om te besluit watter subwoorde saamgevoeg moet word.
- Benefits:
- Balans tussen 'n hanteerbare vocabulary grootte en effektiewe verteenwoordiging van woorde.
- Hanteer seldsame en saamgestelde woorde doeltreffend.
- Example:
"unhappiness"
mag tokenized word as["un", "happiness"]
of["un", "happy", "ness"]
afhangende van die vocabulary.
- Unigram Language Model:
- Used By: Modelle soos SentencePiece.
- Purpose: Gebruik 'n probabilistiese model om die mees waarskynlike stel van subwoord tokens te bepaal.
- How It Works:
- Begin met 'n groot stel potensiële tokens.
- Verwyder iteratief tokens wat die minste die model se waarskynlikheid van die opleidingsdata verbeter.
- Finaliseer 'n vocabulary waar elke woord verteenwoordig word deur die mees waarskynlike subwoord eenhede.
- Benefits:
- Buigsame en kan taal meer natuurlik modelleer.
- Lei dikwels tot meer doeltreffende en kompakte tokenizations.
- Example:
"internationalization"
mag in kleiner, betekenisvolle subwoorde soos["international", "ization"]
tokenized word.
Code Example
Let's understand this better from a code example from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:
# Download a text to pre-train the model
import urllib.request
url = ("https://raw.githubusercontent.com/rasbt/LLMs-from-scratch/main/ch02/01_main-chapter-code/the-verdict.txt")
file_path = "the-verdict.txt"
urllib.request.urlretrieve(url, file_path)
with open("the-verdict.txt", "r", encoding="utf-8") as f:
raw_text = f.read()
# Tokenize the code using GPT2 tokenizer version
import tiktoken
token_ids = tiktoken.get_encoding("gpt2").encode(txt, allowed_special={"[EOS]"}) # Allow the user of the tag "[EOS]"
# Print first 50 tokens
print(token_ids[:50])
#[40, 367, 2885, 1464, 1807, 3619, 402, 271, 10899, 2138, 257, 7026, 15632, 438, 2016, 257, 922, 5891, 1576, 438, 568, 340, 373, 645, 1049, 5975, 284, 502, 284, 3285, 326, 11, 287, 262, 6001, 286, 465, 13476, 11, 339, 550, 5710, 465, 12036, 11, 6405, 257, 5527, 27075, 11]