1. Tokenizing

Tokenizing

Tokenizing is die proses om data, soos teks, op te breek in kleiner, hanteerbare stukke wat tokens genoem word. 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).

Die doel van hierdie aanvanklike fase is baie eenvoudig: Verdeel die invoer in tokens (ids) op 'n manier wat sin maak.

How Tokenizing Works

  1. Splitting the Text:

  • Basic Tokenizer: 'n Eenvoudige tokenizer kan teks in individuele woorde en leestekens verdeel, terwyl spasie verwyder word.

  • Example: Teks: "Hello, world!" Tokens: ["Hello", ",", "world", "!"]

  1. Creating a Vocabulary:

  • Om tokens in numeriese ID's om te skakel, word 'n vocabularium geskep. Hierdie vocabularium lys al die unieke tokens (woorde en simbole) en ken elkeen 'n spesifieke ID toe.

  • Special Tokens: Dit is spesiale simbole wat by die vocabularium 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): Word gebruik om alle reekse in 'n batch dieselfde lengte te maak.

  • [UNK] (Unknown): Verteenwoordig tokens wat nie in die vocabularium is nie.

  • Example: As "Hello" ID 64 toegeken word, "," is 455, "world" is 78, en "!" is 467, dan: "Hello, world!"[64, 455, 78, 467]

  • Handling Unknown Words: As 'n woord soos "Bye" nie in die vocabularium is nie, word dit vervang met [UNK]. "Bye, world!"["[UNK]", ",", "world", "!"][987, 455, 78, 467] (Aannemende [UNK] het ID 987)

Advanced Tokenizing Methods

Terwyl die basiese tokenizer goed werk vir eenvoudige teks, het dit beperkings, veral met groot vocabulariums en die hantering van nuwe of seldsame woorde. Gevorderde tokeniseringmetodes spreek hierdie probleme aan deur teks in kleiner subeenhede op te breek of die tokeniseringproses te optimaliseer.

  1. Byte Pair Encoding (BPE):

  • Purpose: Verminder die grootte van die vocabularium 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 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 vocabularium.

  • Example: "playing" mag as ["play", "ing"] getokeniseer word as "play" en "ing" gereelde subwoorde is.

  1. WordPiece:

  • Used By: Modelle soos BERT.

  • Purpose: Soortgelyk aan BPE, breek dit woorde in subwoord eenhede op om onbekende woorde te hanteer en die vocabulariumgrootte te verminder.

  • How It Works:

  • Begin met 'n basisvocabularium 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 vocabulariumgrootte en effektiewe verteenwoordiging van woorde.

  • Hanteer seldsame en saamgestelde woorde doeltreffend.

  • Example: "unhappiness" mag as ["un", "happiness"] of ["un", "happy", "ness"] getokeniseer word, afhangende van die vocabularium.

  1. 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 verbetering in die model se waarskynlikheid van die opleidingsdata bied.

  • Finaliseer 'n vocabularium 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 tokenisering.

  • Example: "internationalization" mag in kleiner, betekenisvolle subwoorde soos ["international", "ization"] getokeniseer 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]

Verwysings

Last updated