Voordat een AI je vraag kan begrijpen, een essay kan schrijven of een zin kan vertalen, moet het ruwe tekst verwerken. Elke chatbot, zoekmachine en taalmodel begint met strings - reeksen karakters die menselijke taal vertegenwoordigen.
Begrijpen hoe strings werken opent de deur naar natural language processing, een van de meest opwindende gebieden van kunstmatige intelligentie.
Een string is simpelweg een reeks karakters - letters, cijfers, spaties en symbolen - opgeslagen in volgorde.
message = "Hello, World!"
Elk karakter heeft een positie (index), net als bij een array:
index: 0 1 2 3 4 5 6 7 8 9 10 11 12
char: H e l l o , W o r l d !
Een substring is een deel van een string. Uit "Hello, World!" kun je "World" extraheren (indices 7 tot 11). AI-systemen extraheren voortdurend substrings - namen uit zinnen, hashtags uit tweets, of URL's uit webpagina's.
In de meeste talen zijn strings immutable - je kunt een karakter niet ter plekke wijzigen. In plaats daarvan maak je een nieuwe string. Dit is belangrijk voor prestaties: als je AI-pipeline tekst miljoenen keren wijzigt, kan het telkens aanmaken van nieuwe strings vertragen.
Het complete werk van Shakespeare bevat ongeveer 900.000 woorden. GPT-4 werd getraind op datasets duizenden keren groter - honderden miljarden woorden, allemaal als strings verwerkt voordat ze in getallen werden omgezet.
AI-modellen lezen woorden niet zoals mensen. Ze gebruiken tokenisatie - tekst opsplitsen in kleinere stukken genaamd tokens.
Invoer: "unhappiness"
Tokens: ["un", "happiness"]
Invoer: "ChatGPT is brilliant"
Tokens: ["Chat", "G", "PT", " is", " brilliant"]
Tokenisatie zit tussen karakter- en woordniveau verwerking. Het verwerkt zeldzame woorden door ze in bekende deelstukken te breken, waardoor het vocabulaire beheersbaar blijft.
Wanneer je een lang, ongebruikelijk woord zoals "antidisestablishmentarianism" typt in ChatGPT, breekt het model het in bekende sub-woord tokens. Waarom is dit beter dan elk mogelijk Engels woord als apart token op te slaan?
Sign in to join the discussion
Een kernbewerking op strings is het zoeken van een patroon in een grotere tekst. Bevat deze e-mail het woord "urgent"? Bevat deze code een beveiligingslek?
Schuif het patroon langs de tekst, controleer karakter voor karakter:
tekst: "the cat sat on the mat"
patroon: "cat"
Positie 0: "the" → geen match
Positie 1: "he " → geen match
Positie 4: "cat" → match gevonden op index 4!
Dit is O(n × m) in het slechtste geval. Voor korte patronen is het prima. Voor het scannen van miljoenen documenten hebben we slimmere aanpakken nodig.
Waarom is naïeve patroonherkenning traag voor zeer grote teksten?
reverse("hello") → "olleh"
AI gebruikt omkering in sequence-to-sequence modellen - sommige vroege vertaalmodellen keerden de invoerzin om voor betere nauwkeurigheid.
Een palindroom leest hetzelfde van voor naar achter: "racecar", "madam", "level".
is_palindrome(text):
return text == reverse(text)
Twee woorden zijn anagrammen als ze dezelfde karakters bevatten in een andere volgorde: "listen" en "silent".
are_anagrams(word1, word2):
return character_counts(word1) == character_counts(word2)
Dit sluit aan bij het frequentietelpatroon uit de vorige les - hash maps maken het O(n).
Welke aanpak controleert het meest efficiënt of twee woorden anagrammen zijn?
| Patroon | Matcht | Toepassing |
|---------|--------|------------|
| \d+ | Een of meer cijfers | Getallen extraheren |
| [A-Z][a-z]+ | Een woord met hoofdletter | Eigennamen vinden |
| \b\w+@\w+\.\w+\b | E-mailadressen | Data-extractie |
| (cat\|dog\|bird) | Een van drie woorden | Classificatietrefwoorden |
AI-datapipelines gebruiken regex uitgebreid voor datacleaning - HTML-tags verwijderen, datums extraheren en ongewenste tekens wegfilteren.
Reguliere expressies zijn krachtig maar lastig. Een slecht geschreven regex kan exponentieel lang duren - bekend als "catastrofale backtracking." Test je patronen altijd op randgevallen.
Elke stap omvat stringbewerkingen - knippen, zoeken, vervangen en splitsen.
Wanneer je een bericht stuurt in een taal zonder spaties (zoals Chinees of Japans), hoe zou tokenisatie anders werken?
OpenAI's tokeniser splitst "tokenisation" in ["token", "isation"] - twee tokens. Maar "tokenization" wordt ["token", "ization"]. Hetzelfde concept kost verschillende bedragen afhankelijk van de spelling!
Waarom wordt tokenisatie uitgevoerd voordat tekst aan een AI-model wordt gevoed?