paint-brush
Jūsų pokalbių robotas neskaito žodžių – tai skaičiuoja žetonuspateikė@paulr
2,532 skaitymai
2,532 skaitymai

Jūsų pokalbių robotas neskaito žodžių – tai skaičiuoja žetonus

pateikė 9m2025/02/05
Read on Terminal Reader

Per ilgai; Skaityti

Tokenizavimas yra vartai, per kuriuos neapdorotas tekstas paverčiamas formatu, kurį gali naudoti dideli kalbos modeliai (LLM), pvz., GPT. Jis veikia kaip tiltas tarp žmogaus skaitomo turinio ir skaitmeninių duomenų, kuriuos modeliuoja procesas. Teksto žymėjimo būdas tiesiogiai veikia tai, kaip efektyviai modelis gali apdoroti duomenis.
featured image - Jūsų pokalbių robotas neskaito žodžių – tai skaičiuoja žetonus
undefined HackerNoon profile picture

Tokenizavimas yra vartai, per kuriuos neapdorotas tekstas paverčiamas formatu, kurį gali naudoti dideli kalbos modeliai (LLM), pvz., GPT. Jis veikia kaip tiltas tarp žmogaus skaitomo turinio ir skaitmeninių duomenų, kuriuos modeliuoja procesas. Kad modelis galėtų suprasti arba generuoti nuoseklų tekstą, jis turi suskaidyti įvestį į mažesnius vienetus, vadinamus prieigos raktais .


GPT architektūrose prieigos raktas yra labai svarbus modelio veikimui ir galimybėms, turintis įtakos efektyvumui, kontekstinio lango naudojimui ir išvesties kokybei. Ženklinimas yra teksto skaidymas į mažesnius vienetus, vadinamus žetonais, kurie gali reikšti žodžius, požodžius, simbolius ar net specialius simbolius. Šie žetonai yra pagrindiniai modelio apdorojami elementai. Teksto atpažinimo būdas tiesiogiai veikia tai, kaip efektyviai modelis gali apdoroti duomenis, kiek informacijos telpa jo konteksto lange ir jo generuojamų atsakymų kokybei.


Konteksto langas yra didžiausias žetonų skaičius, kurį modelis gali apdoroti per vieną operaciją, įskaitant įvestį ir sugeneruotą išvestį. Pavyzdžiui, modelis su 32 000 žetonų konteksto langu turi atitikti viską – įvesties tekstą, sistemos instrukcijas ir modelio atsakymą – neviršijant šios ribos. Veiksmingas prieigos raktas sumažina žetonų, reikalingų tam tikram tekstui, skaičių, todėl galite įtraukti daugiau turinio arba gauti ilgesnius, turtingesnius rezultatus neviršijant limito. Kita vertus, prastas prieigos raktas gali be reikalo padidinti žetonų skaičių, išeikvoti vertingą erdvę konteksto lange ir apriboti modelio naudojimą atliekant ilgesnes užduotis.


Kai tekstas yra įjungtas, kiekvienas atpažinimo ženklas paverčiamas skaitmeniniu įterpimu – matematinį atvaizdą didelės apimties erdvėje (dažnai šimtai ar tūkstančiai matmenų). Šis įterpimas fiksuoja žetono reikšmę ir ryšius viso žodyno kontekste. Pavyzdžiui, panašių žodžių, tokių kaip „bėgti“ ir „bėgti“, žetonai šioje vietoje bus dedami arčiau nei nesusiję žetonai, pvz., „bėgti“ ir „stalas“. Šie įterpimai leidžia modeliui suprasti žetonų seką ir nuspėti greičiausiai kitą žetoną generuojant tekstą. Šis procesas leidžia GPT sukurti nuoseklius, kontekstui svarbius rezultatus, nesvarbu, ar atsakant į užklausą, užbaigiant sakinį, ar kuriant kūrybinį turinį.

Iš esmės tokenizavimas nėra tik išankstinio apdorojimo žingsnis – tai labai svarbi priemonė, leidžianti GPT modeliams efektyviai veikti ir teikti aukštos kokybės rezultatus.


Kaip veikia tokenizavimas

Tokenizavimas nėra universalus procesas; ji skiriasi priklausomai nuo iš anksto nustatytų taisyklių arba algoritmų, skirtų tekstui skaidyti į valdomus vienetus, vadinamus žetonais.


Čia išsamiau apžvelgsime, kaip tai veikia:


Skaldymas

Tai apima teksto padalijimą į mažesnius vienetus, tokius kaip žodžiai, požodžiai ar simboliai. Šiuolaikinės LLM dažnai pasikliauja požodžių žymėjimu , nes tai užtikrina efektyvumo ir tvirtumo pusiausvyrą. Ši pusiausvyra atsiranda dėl to, kad požodžių prieigos raktas gali apdoroti retus ar nežinomus žodžius, suskaidydamas juos į mažesnius, dažniau pasitaikančius komponentus, o dažnus žodžius vis tiek užkoduodamas kaip atskirus žetonus.


Pavyzdys :
Apsvarstykite žodį unhappiness . Naudojant požodžio prieigos raktą, jis gali suskaidyti į:

  • un , happi , and ness .

Šis metodas užtikrina:

  • Efektyvumas : bendri komponentai, tokie kaip un ir ness pakartotinai naudojami skirtinguose žodžiuose, todėl sumažėja žodynas.
  • Tvirtumas : retus žodžius, pvz. unhappiness vis tiek galima apdoroti suskirstant juos į žinomas sudedamąsias dalis, išvengiant problemų, susijusių su žodynu.


Praktiškai tai leidžia modeliams geriau apibendrinti įvairias teksto įvestis, per daug neišplečiant žodyno.


Kodavimas

Kodavimas kiekvienam prieigos raktui priskiria unikalų sveikąjį skaičių pagal iš anksto nustatytą žodyną – visų galimų žetonų rinkinį, kurį atpažįsta modelis. GPT ir panašių modelių kontekste žodynas sukuriamas mokymo metu ir atspindi požodžių (arba simbolių) rinkinį, kurį modelis naudoja tekstui suprasti ir generuoti.


Pavyzdžiui, GPT:

  • Žodis hello gali būti vienas ženklas su sveikuoju skaičiumi, pvz., 1356 .
  • Retas terminas, pvz. micropaleontology gali būti suskirstytas į požodžių žetonus, tokius kaip micro , paleo ir ntology , kurių kiekvienas turi savo sveikąjį skaičių.


„ChatGPT“ atveju tai reiškia, kad kai vartotojas įveda tekstą, prieigos raktas susieja įvesties eilutę į sveikųjų skaičių seką pagal modelio žodyną. Tada šią seką apdoroja neuroninis tinklas. Žodyno dydis turi įtakos modelio atminties naudojimui ir skaičiavimo efektyvumui, užtikrinant pusiausvyrą tarp sudėtingų kalbos konstrukcijų tvarkymo ir sistemos našumo išlaikymo.


Dekodavimas

Dekodavimas yra atvirkštinis procesas: sveikųjų žetonų sekos konvertavimas atgal į žmogaus skaitomą tekstą. Naudojant požodį, tai apima, jei įmanoma, iš naujo sudėti požodžius į užbaigtus žodžius.


Kaip tai veikia :

  1. Modelis generuoja sveikųjų skaičių (žetonų) seką išvesties metu.
  2. Dekoderis suranda kiekvieną sveikąjį skaičių žodyne ir nuskaito atitinkamą požodį arba simbolį.
  3. Požodžiai sujungiami, kad sudarytų žodžius, taikant taisykles, užtikrinančias nuoseklumą (pvz., pašalinant nereikalingus tarpus aplink požodžius).


Pavyzdys :
Tarkime, kad modelis generuoja un , happi ir ness žetonus. Dekodavimas rekonstruoja tai į unhappiness , sujungdamas požodžius. Tinkamas tarpų valdymas užtikrina, kad un nebūtų traktuojamas kaip atskiras žodis.


Ši sistema leidžia antriniais žodžiais pagrįstiems modeliams efektyviai generuoti tekstą, išlaikant galimybę teisingai pateikti retus ar sudėtingus terminus.


Kodėl man, kaip kūrėjui, turėtų rūpėti?

Nors „ChatGPT“ API automatiškai apdoroja prieigos raktą, kūrėjai tiktoken naudoja tiesiogiai, kad galėtų tiksliau valdyti savo programas. Tai leidžia iš anksto patikrinti ir tvarkyti prieigos raktų ribas , užtikrinant, kad įvesties tekstas ir atsakymai atitiktų modelio apribojimus. Tai ypač svarbu norint išvengti klaidų dirbant su ilgais pokalbiais ar dokumentais. Be to, kūrėjai gali optimizuoti prieigos raktų naudojimą , kad sumažintų API išlaidas, apkarpydami arba apibendrindami įvestis.


tiktoken taip pat padeda derinti atpažinimo problemas ir suteikia skaidrumo, kaip tekstas yra ženklinamas ir dekoduojamas. Norėdami apdoroti ilgas įvestis , tiktoken gali padalyti tekstą į mažesnius gabalus, kad būtų galima apdoroti didelius dokumentus dalimis. Galiausiai, išplėstinio naudojimo atvejais, pvz., įterpiant arba manipuliuojant žetonų lygiu, tiktoken užtikrina tikslią žetonų generavimo ir apdorojimo kontrolę.

 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"])

Svarbiausi kodo akcentai:

  1. Išankstinis prieigos rakto apribojimų tikrinimas užtikrina, kad įvestis atitiktų modelio apribojimus, išvengiama sutrumpinimo ar klaidų.
  2. Įvesties apibendrinimas sumažina prieigos rakto naudojimą dirbant su ilgu tekstu.
  3. Derinimo prieigos raktas suteikia skaidrumo, kaip koduojami ir dekoduojami žetonai.
  4. Padalijus ilgus dokumentus į valdomus gabalus, efektyviai apdorojama didelė įvestis.
  5. Išplėstinis prieigos raktų manipuliavimas rodo tikslų žetonų įvesties valdymą.


Šis metodas užtikrina optimalų našumą ir ekonomiškumą kuriant ChatGPT API.

3. tiktoken tyrinėjimas: GPT žetonų priemonė

OpenAI tiktoken biblioteka sukurta taip, kad būtų galima efektyviai naudoti žetonus ir suprasti GPT modelių apribojimus. Panagrinėkime, kaip tai veikia:

Naudojimo pavyzdys

Štai Python pavyzdys, kaip suvesti tekstą naudojant tiktoken . Man patinka naudoti https://colab.research.google.com/ savo Python bloknotams.


 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)

Išvestis

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

4. Kūrėjo svertai žetonų įvedimui ChatGPT API

Naudojant „ChatGPT“ API supratimas apie prieigos raktą padeda optimizuoti:

  1. Įvesties efektyvumas :
    • Įveskite glaustą informaciją. Kiekvienas prieigos raktas kainuoja apdorojimo galią ir turi įtakos prieigos rakto limitui (pvz., 8k GPT-3.5, 32k GPT-4).
    • Efektyviai pakartotinai naudokite kontekstą išsaugant tik esminę informaciją.
  2. Modelio pasirinkimas :
    • Skirtingi GPT modeliai turi skirtingą tokenizacijos elgesį. Modeliai su didesniais kontekstiniais langais suteikia daugiau įvesties, bet patiria didesnes išlaidas.
  3. Greitas struktūravimas :
    • Eksperimentuokite su formatavimu ir frazavimu, kad sumažintumėte nereikalingų žetonų skaičių. Sumažinus žodiškumą, galima padidinti žetonų biudžetą neprarandant prasmės.
  4. Tikslus derinimas ir manipuliavimas žetonais :
    • Naudokite prieigos rakto lygio operacijas, pvz., užpildymą ir sutrumpinimą, kad užtikrintumėte vienodą įvestį visose programose.

5. Pavyzdžio įgyvendinimas Python

Štai praktinis pavyzdys, kaip apskaičiuoti prieigos rakto naudojimą teikiant užklausą „ChatGPT“ API:

 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'])

Šis kodas padeda stebėti prieigos raktų naudojimą, o tai labai svarbu optimizuojant išlaidas ir našumą.


6. Išsinešti

Tokenizacijos supratimas yra būtinas inžinieriams, kuriantiems AI programas, nes tai tiesiogiai veikia tai, kaip tekstiniai duomenys apdorojami kalbos modeliais. Ženklinimas apima neapdoroto teksto suskaidymą į mažesnius, reikšmingus vienetus, tokius kaip žodžiai, požodžiai ar simboliai, kurie yra pagrindinė šių modelių įvestis. Šis procesas leidžia kūrėjams tiksliai valdyti įvesties dydžius, optimizuoti išlaidas sumažinant nereikalingą prieigos rakto naudojimą ir pagerinti modelio našumą užtikrinant, kad tekstas būtų segmentuojamas taip, kad būtų išlaikyta kontekstinė reikšmė. Be to, tiesiogiai įtraukus prieigos raktą į kliento kodą, galima supaprastinti operacijas, sumažinant duomenų perdavimo sąnaudas ir delsą, o tai leidžia efektyviau kaupti talpyklą ir greičiau atlikti išankstinį apdorojimą. Įvaldydami žetonų naudojimą, inžinieriai gali sukurti DI sistemas, kurios būtų tvirtos ir ekonomiškos, o tai galiausiai padidins jų taikomųjų programų reagavimą ir mastelio keitimą.