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. 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. Ženklinimas 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. Konteksto langas Kai tekstas yra įjungtas, kiekvienas atpažinimo ženklas paverčiamas – 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į. skaitmeniniu įterpimu 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 , 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. požodžių žymėjimu : Apsvarstykite žodį . Naudojant požodžio prieigos raktą, jis gali suskaidyti į: Pavyzdys unhappiness , , and . un happi ness Šis metodas užtikrina: : bendri komponentai, tokie kaip ir pakartotinai naudojami skirtinguose žodžiuose, todėl sumažėja žodynas. Efektyvumas un ness : retus žodžius, pvz. vis tiek galima apdoroti suskirstant juos į žinomas sudedamąsias dalis, išvengiant problemų, susijusių su žodynu. Tvirtumas unhappiness 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ą – 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. žodyną Pavyzdžiui, GPT: Žodis gali būti vienas ženklas su sveikuoju skaičiumi, pvz., . hello 1356 Retas terminas, pvz. gali būti suskirstytas į požodžių žetonus, tokius kaip , ir , kurių kiekvienas turi savo sveikąjį skaičių. micropaleontology micro paleo ntology „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 Modelis generuoja sveikųjų skaičių (žetonų) seką išvesties metu. Dekoderis suranda kiekvieną sveikąjį skaičių žodyne ir nuskaito atitinkamą požodį arba simbolį. Požodžiai sujungiami, kad sudarytų žodžius, taikant taisykles, užtikrinančias nuoseklumą (pvz., pašalinant nereikalingus tarpus aplink požodžius). : Tarkime, kad modelis generuoja , ir žetonus. Dekodavimas rekonstruoja tai į , sujungdamas požodžius. Tinkamas tarpų valdymas užtikrina, kad nebūtų traktuojamas kaip atskiras žodis. Pavyzdys un happi ness unhappiness un Š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 naudoja tiesiogiai, kad galėtų tiksliau valdyti savo programas. Tai leidžia , 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 , kad sumažintų API išlaidas, apkarpydami arba apibendrindami įvestis. tiktoken iš anksto patikrinti ir tvarkyti prieigos raktų ribas optimizuoti prieigos raktų naudojimą taip pat padeda ir suteikia skaidrumo, kaip tekstas yra ženklinamas ir dekoduojamas. Norėdami , 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, užtikrina tikslią žetonų generavimo ir apdorojimo kontrolę. tiktoken derinti atpažinimo problemas apdoroti ilgas įvestis tiktoken tiktoken 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: užtikrina, kad įvestis atitiktų modelio apribojimus, išvengiama sutrumpinimo ar klaidų. Išankstinis prieigos rakto apribojimų tikrinimas sumažina prieigos rakto naudojimą dirbant su ilgu tekstu. Įvesties apibendrinimas suteikia skaidrumo, kaip koduojami ir dekoduojami žetonai. Derinimo prieigos raktas į valdomus gabalus, efektyviai apdorojama didelė įvestis. Padalijus ilgus dokumentus rodo tikslų žetonų įvesties valdymą. Išplėstinis prieigos raktų manipuliavimas Šis metodas užtikrina optimalų našumą ir ekonomiškumą kuriant ChatGPT API. tyrinėjimas: GPT žetonų priemonė 3. tiktoken OpenAI biblioteka sukurta taip, kad būtų galima efektyviai naudoti žetonus ir suprasti GPT modelių apribojimus. Panagrinėkime, kaip tai veikia: tiktoken Naudojimo pavyzdys Štai Python pavyzdys, kaip suvesti tekstą naudojant . Man patinka naudoti savo Python bloknotams. tiktoken https://colab.research.google.com/ 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: : Į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ą. : Modelio pasirinkimas Skirtingi GPT modeliai turi skirtingą tokenizacijos elgesį. Modeliai su didesniais kontekstiniais langais suteikia daugiau įvesties, bet patiria didesnes išlaidas. : 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. : 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ą.