paint-brush
Vaš chatbot ne čita riječi - on broji žetonepo@paulr
2,532 čitanja
2,532 čitanja

Vaš chatbot ne čita riječi - on broji žetone

po 9m2025/02/05
Read on Terminal Reader

Predugo; Čitati

Tokenizacija je pristupnik kroz koji se neobrađeni tekst pretvara u format koji mogu koristiti veliki jezični modeli (LLM) kao što je GPT. Djeluje kao most između sadržaja čitljivog čovjeka i numeričkih podataka koje modeli obrađuju. Način na koji je tekst tokeniziran izravno utječe na to koliko učinkovito model može rukovati podacima.
featured image - Vaš chatbot ne čita riječi - on broji žetone
undefined HackerNoon profile picture

Tokenizacija je pristupnik kroz koji se neobrađeni tekst pretvara u format koji mogu koristiti veliki jezični modeli (LLM) kao što je GPT. Djeluje kao most između sadržaja čitljivog čovjeka i numeričkih podataka koje modeli obrađuju. Prije nego što model može razumjeti ili generirati koherentan tekst, mora razbiti unos u manje jedinice koje se nazivaju tokeni .


U GPT arhitekturama, tokenizacija je temeljna za performanse i mogućnosti modela, utječući na učinkovitost, korištenje kontekstnog prozora i kvalitetu izlaza. Tokenizacija je proces rastavljanja teksta u manje jedinice koje se nazivaju tokeni, a koje mogu predstavljati riječi, podriječi, znakove ili čak posebne simbole. Ti su tokeni osnovni građevni blokovi koje model obrađuje. Način na koji je tekst tokeniziran izravno utječe na to koliko učinkovito model može rukovati podacima, koliko informacija stane unutar kontekstnog prozora i kvalitetu odgovora koje generira.


Kontekstni prozor je najveći broj tokena koje model može obraditi u jednoj operaciji, uključujući i ulaz i generirani izlaz. Na primjer, model s kontekstnim prozorom od 32 000 žetona mora stati u sve — vaš ulazni tekst, upute sustava i odgovor modela — unutar ovog ograničenja. Učinkovita tokenizacija smanjuje broj tokena potrebnih za predstavljanje određenog teksta, omogućujući vam da uključite više sadržaja ili dobijete duže, bogatije rezultate bez prekoračenja ograničenja. Loša tokenizacija, s druge strane, može nepotrebno povećati broj tokena, trošeći dragocjeni prostor u prozoru konteksta i ograničavajući upotrebljivost modela za dulje zadatke.


Nakon što je tekst tokeniziran, svaki se token pretvara u numeričku ugradnju — matematički prikaz u visokodimenzionalnom prostoru (često stotine ili tisuće dimenzija). Ovo ugrađivanje bilježi značenje i odnose tokena u kontekstu cijelog vokabulara. Na primjer, tokeni za slične riječi kao što su "trčanje" i "trčanje" bit će postavljeni bliže ovom prostoru nego nepovezani tokeni kao što su "trčanje" i "stol". Ova ugrađivanja omogućuju modelu razumijevanje slijeda tokena i predviđanje najvjerojatnijeg sljedećeg tokena tijekom generiranja teksta. Ovaj proces omogućuje GPT-u da proizvede koherentne, kontekstualno relevantne rezultate, bilo da odgovara na upit, dovršava rečenicu ili stvara kreativni sadržaj.

U biti, tokenizacija nije samo korak pretprocesiranja - to je ključno sredstvo za učinkovito funkcioniranje GPT modela i pružanje visokokvalitetnih rezultata.


Kako funkcionira tokenizacija

Tokenizacija nije proces koji odgovara svima; varira ovisno o unaprijed definiranim pravilima ili algoritmima koji su dizajnirani za razbijanje teksta u jedinice kojima se može upravljati zvane tokeni.


Evo dubljeg pogleda na to kako funkcionira:


Cijepanje

To uključuje dijeljenje teksta na manje jedinice kao što su riječi, podriječi ili znakovi. Moderni LLM-ovi često se oslanjaju na tokenizaciju podriječi jer nudi ravnotežu između učinkovitosti i robusnosti. Ova ravnoteža nastaje zato što tokenizacija podriječi može rukovati rijetkim ili nepoznatim riječima tako da ih razbije na manje, uobičajenije komponente, dok i dalje kodira česte riječi kao pojedinačne tokene.


Primjer :
Razmotrite riječ unhappiness . Upotrebom tokenizacije podriječi može provaliti u:

  • un , happi , and ness .

Ovaj pristup osigurava:

  • Učinkovitost : Uobičajene komponente poput un i ness ponovno se koriste u različitim riječima, smanjujući veličinu vokabulara.
  • Robusnost : Rijetke riječi kao što je unhappiness još uvijek se mogu obraditi razbijanjem na poznate podkomponente, izbjegavajući probleme s nedostatkom rječnika.


U praktičnom smislu, to omogućuje bolju generalizaciju modela u različitim unosima teksta bez pretjeranog napuhavanja vokabulara.


Kodiranje

Kodiranje dodjeljuje jedinstveni cijeli broj svakom tokenu na temelju unaprijed definiranog vokabulara — zbirke svih mogućih tokena koje model prepoznaje. U kontekstu GPT-a i sličnih modela, vokabular se stvara tijekom obuke i predstavlja skup podriječi (ili znakova) koje model koristi za razumijevanje i generiranje teksta.


Na primjer, u GPT-u:

  • Riječ hello može biti jedan token s prikazom cijelog broja poput 1356 .
  • Rijedak pojam poput micropaleontology može se podijeliti na tokene podriječi kao što su micro , paleo i ntology , svaki sa svojim cijelim brojem.


Za ChatGPT to znači da kada korisnik unese tekst, tokenizator preslikava ulazni niz u niz cijelih brojeva na temelju vokabulara modela. Ovaj niz zatim obrađuje neuronska mreža. Veličina vokabulara utječe na korištenje memorije modela i učinkovitost računanja, uspostavljajući ravnotežu između rukovanja složenim jezičnim konstrukcijama i održavanja performansi sustava.


Dekodiranje

Dekodiranje je obrnuti proces: pretvaranje niza tokena cijelih brojeva natrag u tekst čitljiv ljudima. Za tokenizaciju podriječi, to uključuje ponovno sastavljanje podriječi u potpune riječi gdje je to moguće.


Kako radi :

  1. Model generira niz cijelih brojeva (žetona) tijekom izlaza.
  2. Dekoder traži svaki cijeli broj u vokabularu i dohvaća njegovu odgovarajuću podriječ ili znak.
  3. Podriječi se ulančavaju u obliku riječi, primjenjujući pravila koja osiguravaju koherenciju (npr. uklanjanje nepotrebnih razmaka oko podriječi).


Primjer :
Pretpostavimo da model generira oznake za un , happi i ness . Dekodiranje to rekonstruira u unhappiness ulančavanjem podriječi. Ispravno rukovanje razmacima osigurava da se un ne tretira kao zasebna riječ.


Ovaj sustav omogućuje modelima koji se temelje na podriječima učinkovito generiranje teksta uz zadržavanje sposobnosti ispravnog predstavljanja rijetkih ili složenih pojmova.


Zašto bi me kao programera trebalo brinuti?

Dok ChatGPT API automatski upravlja tokenizacijom, programeri izravno koriste tiktoken kako bi stekli finiju kontrolu nad svojim aplikacijama. Omogućuje prethodnu provjeru i upravljanje ograničenjima tokena , osiguravajući da ulazni tekst i odgovori odgovaraju ograničenjima modela. Ovo je posebno važno za izbjegavanje pogrešaka pri radu s dugim razgovorima ili dokumentima. Osim toga, programeri mogu optimizirati korištenje tokena kako bi smanjili troškove API-ja skraćivanjem ili sažimanjem unosa.


tiktoken također pomaže u otklanjanju grešaka u problemima tokenizacije , pružajući transparentnost u načinu na koji se tekst tokenizira i dekodira. Za rukovanje dugim unosima , tiktoken može podijeliti tekst u manje dijelove, omogućujući obradu velikih dokumenata u dijelovima. Na kraju, za napredne slučajeve upotrebe, kao što je ugradnja ili manipulacija na razini tokena, tiktoken osigurava preciznu kontrolu nad načinom na koji se tokeni generiraju i obrađuju.

 import openai import tiktoken openai.api_key = "your-api-key" # Initialize tokenizer for GPT-4 encoding = tiktoken.get_encoding("cl100k_base") # Function to count tokens def count_tokens(text): return len(encoding.encode(text)) # Example input user_input = "Explain the theory of relativity in detail with examples." conversation_history = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is the theory of relativity?"} ] # Combine inputs for token counting conversation_text = "".join([msg["content"] for msg in conversation_history]) + user_input # Pre-check input token limit (Use Case 1) token_limit = 4096 if count_tokens(conversation_text) > token_limit: print("Trimming conversation to fit within token limit.") conversation_history = conversation_history[1:] # Trim oldest message # Optimize input by summarizing if too long (Use Case 2) def summarize_if_needed(text, max_tokens=500): if count_tokens(text) > max_tokens: print("Input too long, summarizing...") response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "Summarize the following text."}, {"role": "user", "content": text} ], max_tokens=200 ) return response.choices[0].message["content"] return text long_text = "A very long text input that exceeds the desired token limit ... (more text)" optimized_text = summarize_if_needed(long_text, max_tokens=500) # Debug tokenization (Use Case 3) tokens = encoding.encode("OpenAI's ChatGPT is amazing!") print("Tokenized:", tokens) for token in tokens: print(f"Token ID: {token}, Token: '{encoding.decode([token])}'") # Handle long documents by splitting into chunks (Use Case 4) def split_into_chunks(text, chunk_size): tokens = encoding.encode(text) for i in range(0, len(tokens), chunk_size): yield encoding.decode(tokens[i:i + chunk_size]) document = "A very long document... (more text)" chunks = list(split_into_chunks(document, chunk_size=1000)) # Process each chunk separately responses = [] for chunk in chunks: response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": chunk}], max_tokens=300 ) responses.append(response.choices[0].message["content"]) full_response = " ".join(responses) # Advanced token manipulation (Use Case 5) custom_text = "Analyze the sentiment of this text." tokens = encoding.encode(custom_text) response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": encoding.decode(tokens)}], max_tokens=100 ) print("Final Response:", response.choices[0].message["content"])

Istaknuto u kodu:

  1. Prethodno provjera ograničenja tokena osigurava da se unos uklapa unutar ograničenja modela, izbjegavajući skraćivanje ili pogreške.
  2. Sažimanje unosa smanjuje upotrebu tokena pri radu s dugim tekstom.
  3. Tokenizacija otklanjanja pogrešaka pruža transparentnost načina na koji se tokeni kodiraju i dekodiraju.
  4. Dijeljenje dugih dokumenata u dijelove kojima se može upravljati učinkovito obrađuje velike ulaze.
  5. Napredna manipulacija tokenima pokazuje preciznu kontrolu nad tokeniziranim ulazima.


Ovaj pristup osigurava i optimalnu izvedbu i troškovnu učinkovitost kada se gradi na ChatGPT API-ju.

3. Istraživanje tiktoken : GPT-ov Tokenizer

OpenAI-jeva biblioteka tiktoken dizajnirana je za učinkovito tokeniziranje i razumijevanje ograničenja GPT modela. Istražimo kako to funkcionira:

Primjer upotrebe

Evo Python primjera kako tokenizirati tekst pomoću tiktoken . Volim koristiti https://colab.research.google.com/ za pokretanje svojih python bilježnica.


 import tiktoken # Choose a model-specific tokenizer encoding = tiktoken.get_encoding("o200k_base") # Input text text = "Tokenization is crucial for GPT models." # Tokenize text tokens = encoding.encode(text) print("Tokens:", tokens) # Decode back to text decoded_text = encoding.decode(tokens) print("Decoded Text:", decoded_text)

Izlaz

 Tokens: [4421, 2860, 382, 19008, 395, 174803, 7015, 13] Decoded Text: Tokenization is crucial for GPT models.

4. Poluge programera za tokenizaciju u ChatGPT API-jima

Kada koristite ChatGPT API-je, razumijevanje tokenizacije pomaže optimizirati:

  1. Učinkovitost unosa :
    • Unosi neka budu sažeti. Svaki token košta procesorsku snagu i utječe na ograničenje tokena (npr. 8k za GPT-3.5, 32k za GPT-4).
    • Učinkovito ponovno upotrijebite kontekst zadržavajući samo bitne informacije.
  2. Odabir modela :
    • Različiti GPT modeli imaju različita ponašanja tokenizacije. Modeli s većim kontekstnim prozorima omogućuju širi unos, ali imaju veće troškove.
  3. Brzo strukturiranje :
    • Eksperimentirajte s oblikovanjem i fraziranjem kako biste smanjili nepotrebne tokene. Smanjenje opširnosti može povećati proračun tokena bez gubitka značenja.
  4. Fino podešavanje i manipulacija tokenima :
    • Upotrijebite operacije na razini tokena kao što su ispuna i skraćivanje kako biste osigurali ujednačene unose u svim aplikacijama.

5. Primjer implementacije u Pythonu

Evo praktičnog primjera za izračun upotrebe tokena prilikom postavljanja upita ChatGPT API-ju:

 import tiktoken import openai def calculate_tokens(api_input, model="gpt-3.5-turbo"): encoding = tiktoken.encoding_for_model(model) tokens = encoding.encode(api_input) return len(tokens) # Example API call with token usage calculation api_input = "Explain the significance of tokenization in LLMs." model = "gpt-4" token_count = calculate_tokens(api_input, model) print(f"Token count for input: {token_count}") response = openai.ChatCompletion.create( model=model, messages=[{"role": "user", "content": api_input}] ) print("API Response:", response['choices'][0]['message']['content'])

Ovaj kod pomaže u praćenju upotrebe tokena, što je ključno za optimizaciju troškova i performansi.


6. Za ponijeti

Razumijevanje tokenizacije bitno je za inženjere koji grade AI aplikacije jer izravno utječe na to kako se tekstualni podaci obrađuju u jezičnim modelima. Tokenizacija uključuje raščlanjivanje sirovog teksta na manje, smislene jedinice—kao što su riječi, podriječi ili znakovi—što su osnovni ulazi za ove modele. Ovaj proces programerima omogućuje precizno upravljanje veličinama unosa, optimiziranje troškova smanjenjem nepotrebne upotrebe tokena i poboljšanje performansi modela osiguravanjem da je tekst segmentiran na način koji zadržava kontekstualno značenje. Štoviše, uključivanje tokenizacije izravno u kôd na strani klijenta može pojednostaviti operacije smanjenjem troškova prijenosa podataka i latencije, omogućujući učinkovitije predmemoriranje i bržu pretprocesiranje. Savladavanjem tokenizacije, inženjeri mogu izgraditi sustave umjetne inteligencije koji su i robusni i isplativi, u konačnici poboljšavajući odziv i skalabilnost svojih aplikacija.