A token a nyelvi modellek legkisebb feldolgozási egysége: egy szó, egy szótöredék, egy írásjel vagy egy szóköz. A modell nem betűket és nem mondatokat olvas, hanem tokenek sorozatát dolgozza fel, és mindig a következő tokent becsüli meg.
Hogyan darabolja fel a szöveget
A darabolást a tokenizer végzi, még a modell előtt. A gyakori szavak egyetlen tokent kapnak. A ritkább szavak több darabra esnek szét.
A magyar szöveg ezért drágább, mint az angol. Az ékezetek és a toldalékok miatt egy szó gyakran 3-4 tokenre bomlik.
- angol szöveg: nagyjából 4 karakter jut egy tokenre
- magyar szöveg: nagyjából 2-3 karakter jut egy tokenre
- egy 3000 karakteres magyar oldalszöveg: durván 1000-1500 token
Mire megy el a keret
Egy LLM (nagy nyelvi modell) egyszerre véges mennyiségű tokent lát. Ezt a keretet hívjuk kontextus-ablaknak. Ebbe fér bele a rendszerüzenet, a felhasználó promptja, az oldalad beolvasott szövege és maga a válasz is.
Egy weboldalnál a HTML is tokeneket fogyaszt. A div-ek, az inline stílusok és a beágyazott scriptek ugyanúgy beleszámítanak. Ha a nyers HTML nagy része markup, a hasznos tartalom a maradékba szorul. Ez a tartalmi zaj (a fő tartalom aránya) gyakorlati következménye.
Mikor számít igazán
Hosszú oldalakon, sok termékkel dolgozó listákon és chatben, ahol több forrás fér egymás mellé. A riportokban rendre azt látjuk, hogy a nagy HTML-méret mögött nem sok szöveg van, hanem sok kód.
Röviden: minden karakter, amit a gép beolvas, tokenbe kerül, és a tokenkeret mindig véges.
Technikai példa
A HTML és a látható szöveg arányát két paranccsal megméred:
# nyers HTML mérete bájtban
curl -sL https://pelda.hu/szolgaltatasok | wc -c
# a látható szöveg mérete tagek nélkül
curl -sL https://pelda.hu/szolgaltatasok \
| sed -e 's/<script[^>]*>.*<\/script>//g' -e 's/<[^>]*>//g' \
| tr -s ' \n' ' ' | wc -c
Ha az első szám 480000, a második pedig 6200, akkor a látható szöveg a HTML 1,3%-a. A becsült tokenszám a látható részre nagyjából 2500, a teljes HTML-re viszont több mint 150000.
Pontos számhoz használd a hivatalos tokenizer könyvtárat:
pip install tiktoken
python3 -c "import tiktoken, sys; enc = tiktoken.get_encoding('o200k_base'); print(len(enc.encode(sys.stdin.read())))" < oldal.txt
A kimenet az adott kódolás szerinti tokenszám. Más modellcsaládok más tokenizert használnak, így a szám modellenként eltérhet 10-20%-kal.
Gyakori kérdések
Hány token egy átlagos magyar weboldal szövege?
Egy 3000 karakteres magyar oldalszöveg durván 1000-1500 token. A nyers HTML ennél sokszor nagyságrenddel több, mert a tagek és a scriptek is tokenekre bomlanak. A becsléshez oszd a karakterszámot 2,5-tel, ez magyar szövegnél jól használható közelítés.
Miért drágább a magyar szöveg tokenben, mint az angol?
A tokenizerek túlnyomórészt angol szövegen tanultak, ezért az angol szavak nagy része egyetlen tokent kap. A magyar szavak ékezetesek és toldalékoltak, így 3-4 darabra esnek szét. Ugyanaz a mondanivaló magyarul jellemzően 1,5-2-szer több tokent fogyaszt.
Kell-e rövidíteni a szövegeket a tokenek miatt?
Nem, a hasznos tartalmat ne vágd. A felesleges markupot, a duplikált menüket és az inline scripteket érdemes csökkenteni. A sorrend is számít: a lényeget tedd az oldal és a forrás elejére, hogy csonkolásnál is bekerüljön.
A tömörítés csökkenti a tokenszámot?
Nem. A gzip és a brotli a hálózati átvitelt gyorsítja, de a feldolgozó rendszer a kicsomagolt HTML-t tokenizálja. Tokenben csak a valódi tartalomcsökkentés és a markup karcsúsítása segít.
Honnan tudom, mennyi fér be a kontextus-ablakba?
Ez modellenként eltér, és a szolgáltató dokumentációjában szerepel. A keretet osztozva használja a rendszerüzenet, a felhasználói kérdés, a beolvasott források és a válasz. Egyetlen oldal ritkán kapja meg a teljes keretet, mert több forrás fér egymás mellé.