paint-brush
Ваш чат-бот не читає слова, а підраховує токениза@paulr
2,565 показання
2,565 показання

Ваш чат-бот не читає слова, а підраховує токени

за 9m2025/02/05
Read on Terminal Reader

Надто довго; Читати

Токенізація — це шлюз, через який необроблений текст перетворюється у формат, придатний для використання великими мовними моделями (LLM), такими як GPT. Він діє як міст між зрозумілим для людини вмістом і числовими даними, які обробляються моделями. Спосіб токенізації тексту безпосередньо впливає на те, наскільки ефективно модель може обробляти дані.
featured image - Ваш чат-бот не читає слова, а підраховує токени
undefined HackerNoon profile picture

Токенізація — це шлюз, через який необроблений текст перетворюється у формат, придатний для використання великими мовними моделями (LLM), такими як GPT. Він діє як міст між зрозумілим для людини вмістом і числовими даними, які обробляються моделями. Перш ніж модель зможе зрозуміти або створити зв’язний текст, вона повинна розбити вхідні дані на менші одиниці, які називаються токенами .


В архітектурі GPT токенізація є фундаментальною для продуктивності та можливостей моделі, впливаючи на ефективність, використання контекстного вікна та якість виведення. Токенізація — це процес розбиття тексту на менші одиниці, звані токенами, які можуть представляти слова, підслова, символи або навіть спеціальні символи. Ці маркери є основними будівельними блоками, які обробляє модель. Спосіб токенізації тексту безпосередньо впливає на те, наскільки ефективно модель може обробляти дані, скільки інформації вміщується в контекстне вікно та якість відповідей, які вона генерує.


Контекстне вікно — це максимальна кількість токенів, які модель може обробити за одну операцію, включаючи як вхідні, так і згенеровані вихідні дані. Наприклад, модель із контекстним вікном із 32 000 токенів має вмістити все — ваш введений текст, системні інструкції та відповідь моделі — у межах цього ліміту. Ефективна токенізація зменшує кількість токенів, необхідних для представлення певного тексту, що дає змогу включати більше вмісту або отримувати довші, багатші виходи, не перевищуючи обмеження. З іншого боку, погана токенізація може без потреби збільшити кількість токенів, втрачаючи цінний простір у вікні контексту та обмежуючи зручність використання моделі для більш тривалих завдань.


Після того, як текст токенізовано, кожен токен перетворюється на числове вбудовування — математичне представлення у багатовимірному просторі (часто сотні чи тисячі вимірів). Це вбудовування фіксує значення та зв’язки лексеми в контексті всього словника. Наприклад, лексеми для подібних слів, як-от «бігти» та «біг», будуть розташовані ближче до цього місця, ніж непов’язані лексеми, як-от «бігти» та «стіл». Ці вбудовування дозволяють моделі зрозуміти послідовність токенів і передбачити найбільш ймовірний наступний токен під час генерації тексту. Саме цей процес дозволяє GPT виробляти узгоджені, контекстуально релевантні результати, будь то відповідь на запит, завершення речення чи генерування творчого вмісту.

По суті, токенізація — це не просто етап попередньої обробки — це критично важливий засіб для ефективного функціонування моделей GPT і надання високоякісних результатів.


Як працює токенізація

Токенізація не є універсальним процесом; він змінюється залежно від попередньо визначених правил або алгоритмів, призначених для розбиття тексту на керовані одиниці, які називаються маркерами.


Ось більш глибокий погляд на те, як це працює:


Розщеплення

Це передбачає поділ тексту на менші одиниці, такі як слова, підслова або символи. Сучасні LLM часто покладаються на токенізацію підслів , оскільки вона забезпечує баланс між ефективністю та надійністю. Цей баланс виникає через те, що токенізація підслів може обробляти рідкісні або невідомі слова, розбиваючи їх на більш дрібні, більш поширені компоненти, водночас кодуючи часті слова як окремі лексеми.


приклад :
Розглянемо слово unhappiness . Використовуючи токенізацію підслова, воно може зламати:

  • un , happi і ness .

Такий підхід забезпечує:

  • Ефективність : загальні компоненти, такі як un і ness повторно використовуються в різних словах, зменшуючи розмір словника.
  • Надійність : рідкісні слова, як- unhappiness все ще можна обробити, розділивши їх на відомі підкомпоненти, уникаючи проблем із словниковим запасом.


На практиці це дозволяє моделям краще узагальнювати різноманітні текстові введення без надмірного роздування словникового запасу.


Кодування

Кодування призначає унікальне ціле число кожному токену на основі попередньо визначеного словника — сукупності всіх можливих токенів, які розпізнає модель. У контексті GPT та подібних моделей словник створюється під час навчання та являє собою набір підслів (або символів), які модель використовує для розуміння та створення тексту.


Наприклад, у GPT:

  • Слово hello може бути одним маркером із цілим представленням, наприклад 1356 .
  • Рідкісний термін, як-от micropaleontology можна розбити на лексеми підслів, як-от micro , paleo та ntology , кожна з яких має своє ціле число.


Для ChatGPT це означає, що коли користувач вводить текст, токенізатор відображає вхідний рядок у послідовність цілих чисел на основі словника моделі. Ця послідовність потім обробляється нейронною мережею. Розмір словникового запасу впливає на використання пам’яті моделлю та ефективність обчислень, встановлюючи баланс між обробкою складних мовних конструкцій і підтриманням продуктивності системи.


Розшифровка

Декодування — це зворотний процес: перетворення послідовності цілих чисел маркерів назад у зрозумілий людині текст. Для токенізації підслів це передбачає перекомпонування підслів у повні слова, де це можливо.


Як це працює :

  1. Модель генерує послідовність цілих чисел (токенів) під час виведення.
  2. Декодер шукає кожне ціле число у словнику та отримує відповідне підслово чи символ.
  3. Підслова об’єднуються для утворення слів із застосуванням правил для забезпечення зв’язності (наприклад, видалення непотрібних пробілів навколо підслів).


приклад :
Припустимо, модель генерує токени для un , happi і ness . Декодування перетворює це на unhappiness шляхом об’єднання підслів. Правильне використання пробілів гарантує, що un не розглядатиметься як окреме слово.


Ця система дозволяє моделям на основі підслів ефективно генерувати текст, зберігаючи здатність правильно представляти рідкісні або складні терміни.


Чому я як розробник маю турбуватися?

У той час як ChatGPT API обробляє токенізацію автоматично, розробники використовують tiktoken безпосередньо, щоб отримати точніший контроль над своїми програмами. Це дозволяє попередньо перевіряти та керувати обмеженнями маркерів , гарантуючи, що введений текст і відповіді відповідають обмеженням моделі. Це особливо важливо для уникнення помилок при роботі з довгими розмовами або документами. Крім того, розробники можуть оптимізувати використання токенів , щоб зменшити витрати на API, обрізаючи або підсумовуючи вхідні дані.


tiktoken також допомагає у вирішенні проблем токенізації , забезпечуючи прозорість того, як текст токенізується та декодується. Для обробки довгих введених даних 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"])

Основні моменти в коді:

  1. Попередня перевірка обмежень маркерів гарантує, що вхідні дані відповідають обмеженням моделі, уникаючи скорочення чи помилок.
  2. Резюмування введених даних зменшує використання маркерів під час роботи з довгим текстом.
  3. Налагодження токенізації забезпечує прозорість того, як токени кодуються та декодуються.
  4. Розбиття довгих документів на керовані блоки ефективно обробляє великі вхідні дані.
  5. Удосконалена маніпуляція токеном демонструє точний контроль над введеннями токенів.


Цей підхід забезпечує як оптимальну продуктивність, так і економічну ефективність під час розробки на основі API ChatGPT.

3. Вивчення tiktoken : Tokenizer GPT

Бібліотека tiktoken OpenAI розроблена для ефективної токенізації та розуміння обмежень моделей GPT. Давайте дослідимо, як це працює:

Приклад використання

Ось приклад Python, як токенізувати текст за допомогою tiktoken . Мені подобається використовувати https://colab.research.google.com/ для запуску моїх блокнотів Python.


 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)

Вихід

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

4. Важелі для розробників для токенізації в API ChatGPT

Під час використання API ChatGPT розуміння токенізації допомагає оптимізувати:

  1. Вхідна ефективність :
    • Зберігайте введення лаконічним. Кожен маркер коштує процесорної потужності та впливає на ліміт маркерів (наприклад, 8 Кб для GPT-3.5, 32 Кб для GPT-4).
    • Ефективно повторно використовуйте контекст, зберігаючи лише важливу інформацію.
  2. Вибір моделі :
    • Різні моделі GPT мають різну поведінку токенізації. Моделі з більшими контекстними вікнами дозволяють ширше вводити дані, але спричиняють вищі витрати.
  3. Швидке структурування :
    • Експериментуйте з форматуванням і формулюванням, щоб мінімізувати непотрібні маркери. Зменшення багатослівності може максимізувати бюджет маркерів без втрати сенсу.
  4. Точне налаштування та маніпулювання маркерами :
    • Використовуйте операції на рівні маркерів, як-от доповнення та скорочення, щоб забезпечити однакові вхідні дані в різних програмах.

5. Приклад реалізації на Python

Ось практичний приклад розрахунку використання маркера під час запиту до 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'])

Цей код допомагає контролювати використання токенів, що має вирішальне значення для оптимізації витрат і продуктивності.


6. Їжа на винос

Розуміння токенізації має важливе значення для інженерів, які створюють програми ШІ, оскільки це безпосередньо впливає на те, як текстові дані обробляються мовними моделями. Токенізація передбачає розбиття необробленого тексту на менші значущі одиниці, такі як слова, підслова або символи, які є основними вхідними даними для цих моделей. Цей процес дозволяє розробникам точно керувати розмірами вхідних даних, оптимізувати витрати за рахунок зменшення непотрібного використання маркерів і покращити продуктивність моделі, забезпечивши сегментацію тексту таким чином, щоб зберегти контекстне значення. Крім того, включення токенізації безпосередньо в код на стороні клієнта може оптимізувати операції за рахунок зменшення витрат на передачу даних і затримки, забезпечуючи ефективніше кешування та швидшу попередню обробку. Освоївши токенізацію, інженери можуть створювати системи штучного інтелекту, які є одночасно надійними та економічно ефективними, зрештою підвищуючи швидкість реагування та масштабованість своїх програм.