Коли говорять про ChatGPT та інші великі мовні моделі, слово «токен» з'являється постійно. Модель має контекст на певну кількість токенів, API рахує вхідні й вихідні токени, довгий документ займає десятки тисяч токенів, а надто велика розмова зрештою може перестати повністю вміщуватися в контекст.
Через це легко уявити, що токен — просто технічна назва слова. Але це не так.
Токен — це одиниця інформації, на яку система розбиває текст перед тим, як передати його мовній моделі.
Одне коротке слово іноді може бути одним токеном, довше — кількома, а окремими токенами можуть ставати розділові знаки, частини слів, цифри й навіть фрагменти разом із пробілами.
Саме тому кількість слів і кількість токенів у тексті майже ніколи не збігаються.
Навіщо ШІ взагалі потрібні токени
Людина бачить речення:
«Штучний інтелект допомагає працювати з текстом».
Для нас воно складається зі слів і має зрозуміле значення. Комп'ютер натомість зрештою повинен працювати з числами.
Тому між людським текстом і нейронною мережею існує додатковий етап — токенізація.
Спеціальна система, яку називають токенізатором, розбиває вхідний текст на певні фрагменти. Кожному такому фрагменту відповідає числовий ідентифікатор. Уже послідовність цих чисел надходить до мовної моделі.
Умовно процес можна представити так:
текст → токени → числові ID → обробка моделлю → нові токени → текст відповіді
Тобто коли ми пишемо ChatGPT запитання, модель буквально не отримує речення в тому вигляді, у якому бачимо його ми.
Це одна з базових деталей, без якої складно зрозуміти, як працюють сучасні мовні моделі.
Токен — це слово, літера чи частина слова?
Він може бути всім із переліченого.
Ранні системи обробки природної мови часто працювали зі словами. Такий підхід здається логічним: можна створити словник, у якому кожному слову відповідає власний номер.
Проблема виникає майже одразу. Мов надзвичайно багато, а кількість можливих слів практично необмежена.
В українській, наприклад, від слова «працювати» утворюються «працюю», «працюєш», «працювали», «працюватимемо» та багато інших форм. До цього додаються прізвища, назви компаній, сленг, друкарські помилки, нові терміни, URL-адреси, програмний код тощо.
Якщо зробити кожне можливе слово окремою одиницею, знадобиться гігантський словник, який однаково ніколи не буде повним.
Інша крайність — розбивати все на окремі символи. Тоді словник буде маленьким, але навіть коротке речення перетворюватиметься на дуже довгу послідовність.
Сучасні мовні моделі часто використовують компроміс — субслівну токенізацію. Часті слова або фрагменти можуть залишатися цілими, а рідкісні розбиваються на менші частини.
Наприклад, англійське закінчення
-ing трапляється настільки часто, що в BPE-токенізаторах воно може існувати як корисний повторюваний фрагмент. Саме такий принцип OpenAI наводить у документації свого
токенізатора tiktoken. Водночас «субслівний» тут не означає, що токенізатор обов'язково знаходить справжні корені, суфікси чи інші морфеми. Поділ формується статистично, а tiktoken використовує різновид BPE, що працює з байтами.
З українськими словами відбувається щось подібне, хоча конкретний поділ залежить від токенізатора. Те саме слово в одній моделі може складатися з двох токенів, а в іншій — з одного або трьох.
Тому приклад на кшталт:
[нейро] [мережа]
може добре пояснювати сам принцип, але не означає, що конкретна модель обов'язково розіб'є слово «нейромережа» саме так.
Що таке токенізація
Токенізація — це процес перетворення вихідних даних на послідовність токенів, з якою може працювати модель.
Для великих мовних моделей важливо знайти такий спосіб поділу, який одночасно дозволяє компактно представляти поширені конструкції та не губитися при зустрічі з незнайомими словами.
Одним із найвпливовіших підходів став Byte Pair Encoding, або BPE.
Велику роль у поширенні субслівної токенізації в нейронних мовних системах відіграла опублікована 2016 року робота Ріко Сеннріха, Баррі Геддоу та Александри Берч
«Neural Machine Translation of Rare Words with Subword Units». Дослідники показали, як поділ на субслівні одиниці допомагає нейронному машинному перекладу працювати з рідкісними й раніше невідомими словами. Згодом цей підхід став надзвичайно впливовим для NLP і систем на кшталт BERT та GPT.
У спрощеному вигляді ідея така: токенізатор вчиться, які фрагменти часто зустрічаються в даних, і формує з них словник одиниць, зручних для компактного представлення тексту.
Саме тому популярне коротке слово може отримати один токен, а рідкісне довге слово — розпастися на кілька.
Як токен перетворюється на щось зрозуміле моделі
Після токенізації кожному токену відповідає певний ID — ціле число.
Умовно:
«кіт» → токен № 18472
«спить» → токен № 52931
Ці номери наведені лише для пояснення принципу — реальні ID залежать від конкретного токенізатора.
Сам номер не містить значення слова. Токен № 18472 не є «більш котячим» за токен № 18473 і не означає, що один токен важливіший за інший. Це насамперед індекс, за яким система знаходить потрібне представлення.
Далі токен перетворюється на вектор — набір чисел, який модель може математично обробляти. Таке числове представлення називають embedding, або ембедингом.
Тому токен і ембединг — не одне й те саме.
Токен — одиниця, на яку розбили текст.
ID токена — її номер у словнику.
Ембединг — числове представлення, з яким уже працює нейронна мережа.
До цього додається інформація про позицію токена в послідовності та інші механізми моделі. Далі Transformer аналізує зв'язки між токенами й формує внутрішнє представлення контексту.
Як ChatGPT генерує текст токен за токеном
Токени потрібні не лише для читання запиту. Відповідь моделі також створюється ними.
Якщо дуже спростити, мовна модель отримує вже наявну послідовність і визначає ймовірності можливих наступних токенів.
Наприклад:
«Столиця України — ...»
Після цього модель оцінює можливі продовження, а механізм генерації визначає наступний токен.
Коли він з'являється, процес повторюється:
контекст → наступний токен → оновлений контекст → наступний токен → ...
Так поступово формується речення, абзац і ціла відповідь.
Звісно, сучасна велика мовна модель значно складніша за просту таблицю ймовірностей. Вона враховує величезну кількість зв'язків у контексті, а сучасні системи можуть додатково використовувати пошук, інструменти, роботу з файлами та механізми міркування. Але на рівні самої генерації тексту поняття токена залишається фундаментальним.
Скільки символів або слів містить один токен
Універсальної формули немає.
OpenAI наводить для англійської мови зручну приблизну оцінку: один токен часто відповідає приблизно чотирьом символам або трьом чвертям слова. Відповідно, 100 токенів — це орієнтовно 75 англійських слів. Водночас компанія окремо наголошує, що результат залежить від мови, контексту, моделі та кодування.
Тут особливо важливе уточнення — ця формула стосується англійської.
Механічно рахувати за нею українські тексти не варто. Різні писемності, морфологія та те, наскільки ефективно конкретний токенізатор представляє певну мову, впливають на кількість токенів.
Тому 1000 українських і 1000 англійських слів зовсім не обов'язково займуть однакову кількість токенів.
Більше того, навіть два майже однакові рядки можуть токенізуватися по-різному через регістр, пробіл або розділовий знак.
Чому пробіли й розділові знаки теж мають значення
Токенізатор працює не з «поняттями», а з конкретною послідовністю символів або байтів.
Тому:
«Кіт»
«кіт»
« кіт»і
«кіт.»
можуть утворювати різні набори токенів.
У документації OpenAI є показовий приклад зі словом red: його представлення відрізняється залежно від великої чи малої літери, позиції в реченні та наявності пробілу перед словом.
Це може здатися незначною технічною деталлю, але вона пояснює чимало незвичної поведінки мовних моделей.
Чому ШІ іноді погано рахує літери у словах
Класичний приклад — попросити мовну модель порахувати кількість певних літер у слові.
Для людини завдання природне: ми можемо подивитися на слово символ за символом. Для мовної моделі початковою одиницею часто є не окрема літера, а токен, який може містити одразу кілька символів.
Тому слово, яке людина бачить як послідовність із десяти літер, модель може отримати у вигляді кількох фрагментів.
Це одна з причин, чому мовним моделям історично було складніше виконувати деякі завдання з точним підрахунком символів, анаграмами чи маніпуляціями з окремими літерами, ніж завдання, що здаються значно складнішими семантично.
Сучасні системи можуть компенсувати цю проблему міркуванням, програмним кодом або іншими інструментами, тому сама токенізація вже не означає, що модель обов'язково помилиться. Але вона допомагає зрозуміти, звідки взагалі береться така дивна слабкість.
Що таке контекстне вікно і яке відношення до нього мають токени
Термін «контекстне вікно» описує обсяг інформації, який модель може враховувати під час виконання завдання.
І цей обсяг вимірюють саме в токенах.
У контекст можуть потрапляти не лише останнє запитання користувача, а й попередні повідомлення розмови, системні інструкції, частини документів, результати роботи інструментів та інша інформація, необхідна для відповіді.
Умовно, якщо модель має контекстне вікно на 100 000 токенів, це не означає, що користувач може вставити текст рівно на 100 000 токенів і зверху отримати необмежену відповідь. У багатьох моделях загальний ліміт охоплює вхідні й вихідні токени, а точні обмеження залежать від конкретної моделі та сервісу. Сучасні моделі з великим контекстом можуть підтримувати сотні тисяч токенів.
Велике контекстне вікно не означає ідеальної пам'яті
Існує важлива пастка: якщо модель технічно здатна отримати дуже довгий документ, це ще не означає, що вона однаково добре використає кожну його частину.
У відомому дослідженні
«Lost in the Middle: How Language Models Use Long Contexts» автори перевіряли, як мовні моделі знаходять потрібну інформацію у великих контекстах. У досліджуваних ними моделях результат часто був кращим, коли релевантна інформація містилася на початку або наприкінці контексту, і погіршувався, коли вона опинялася посередині.
Відтоді довгоконтекстні моделі суттєво розвинулися, тому результати цієї роботи не варто автоматично переносити на кожну сучасну модель. Але саме розрізнення між «може прийняти N токенів» і «однаково добре використовує всі N токенів» залишається важливим.
Тому бездумно додавати до запиту десятки документів не завжди краще, ніж передати менший, але релевантний набір інформації.
Контекст і пам'ять — різні речі
Через токени також легше зрозуміти різницю між контекстом і пам'яттю ШІ.
Контекст — це інформація, доступна моделі безпосередньо під час конкретного запиту. Її можна уявити як робочий стіл: модель бачить те, що зараз на ньому лежить.
Пам'ять у таких продуктах, як ChatGPT, — окремий механізм. Інформація з попередніх взаємодій може зберігатися поза поточним контекстом, а релевантні відомості за потреби використовуватися в наступних розмовах.
Тобто збільшення контекстного вікна саме по собі не дає ШІ нескінченної пам'яті.
Що таке вхідні та вихідні токени
У сервісах для розробників часто можна побачити поняття input tokens та output tokens.
Вхідні токени — інформація, яку система передала моделі для обробки: запит користувача та інший контекст.
Вихідні токени — токени, які модель створила у відповіді.
У деяких API існують й інші категорії. Наприклад, OpenAI окремо обліковує кешовані токени — токени вхідних даних, отримані з кешу, — та токени міркування (reasoning tokens), які деякі моделі використовують для внутрішніх кроків перед формуванням остаточної відповіді. Ці категорії відображаються в даних про використання API.
Для звичайної людини, яка просто користується ChatGPT через сайт або застосунок, ці категорії переважно залишаються технічною деталлю. Для розробника, який працює через API, вони вже безпосередньо впливають на використання ресурсів і вартість.
Чому за ШІ часто платять саме за токени
Для API великих мовних моделей токени стали зручною одиницею вимірювання використання.
Запит на два речення і аналіз 300-сторінкового документа потребують зовсім різного обсягу обчислень. Те саме стосується короткої відповіді «так» і детального звіту на кілька тисяч слів.
Тому постачальники ШІ-сервісів часто встановлюють ціну залежно від кількості оброблених токенів.
В OpenAI API тарифи для мовних моделей, зокрема, встановлюються окремо для вхідних, кешованих вхідних і вихідних токенів, а ціни зазвичай указують за мільйон токенів. Вартість залежить від конкретної моделі.
Це не потрібно плутати з підпискою на ChatGPT: користувач звичайного тарифного плану ChatGPT не отримує окремий рахунок за кожен використаний токен. Токенна модель розрахунку особливо важлива для розробників, які інтегрують мовні моделі у власні програми через API, а також для окремих корпоративних схем використання.
Чому коротший промпт не завжди кращий
Якщо токени впливають на контекст і вартість, може виникнути логічне запитання: чи потрібно робити всі запити максимально короткими?
Не обов'язково.
Зайві двадцять речень справді можуть бути непотрібними. Але надмірно короткий запит може не містити контексту, необхідного для хорошої відповіді.
Наприклад:
«Напиши лист».
займає дуже мало токенів, але майже нічого не пояснює моделі.
Натомість:
«Напиши короткий дружній лист клієнту, якому потрібно повідомити про перенесення зустрічі з понеділка на середу. Без надмірно офіційного тону».
буде довшим, але значно точніше визначає завдання.
Тому оптимізація токенів — це не мистецтво писати якомога менше. Скоріше це вміння не витрачати контекст на інформацію, яка не допомагає виконати завдання.
Чому різні моделі рахують один текст по-різному
Не існує єдиного універсального токенізатора для всього штучного інтелекту.
Різні сімейства моделей можуть мати різні словники, алгоритми токенізації та правила обробки тексту. Навіть у межах однієї компанії різні покоління моделей можуть використовувати інше кодування.
OpenAI прямо зазначає, що точна кількість токенів залежить від моделі та кодування, а для роботи з токенізацією своїх моделей надає бібліотеку tiktoken.
Тому фраза «цей текст має 3000 токенів» без уточнення токенізатора інколи є лише приблизною.
Коректніше сказати: «цей текст має приблизно 3000 токенів для такої-то моделі або такого-то кодування».
Що таке спеціальні токени
Не всі токени обов'язково відповідають видимим частинам звичайного тексту.
Моделі й системи навколо них можуть використовувати спеціальні токени, які позначають структуру інформації: наприклад, межі певних фрагментів або службові елементи формату. У самому tiktoken також передбачений окремий механізм спеціальних токенів.
Користувач зазвичай їх не бачить.
Це ще одна причина, чому кількість токенів, фактично переданих моделі, не завжди можна визначити простим підрахунком символів у видимому повідомленні.
Чи бувають токени не текстовими
Так. У мультимодальних системах поняття токена може застосовуватися не лише до тексту.
Якщо модель працює із зображенням, аудіо або іншими типами даних, цю інформацію теж потрібно перетворити на числове представлення, придатне для обробки нейронною мережею. Конкретний механізм залежить від архітектури: зображення можуть, наприклад, оброблятися через окремі області або патчі й перетворюватися на послідовність внутрішніх представлень.
У сучасних OpenAI API використання мультимодальних моделей справді може обліковуватися окремими image tokens, audio tokens і text tokens.
Тому в ширшому технічному контексті слово «токен» уже не завжди означає саме шматочок написаного слова. Але спосіб утворення таких одиниць для тексту, зображень і аудіо може бути зовсім різним, тому не варто уявляти їх як один і той самий механізм.
Токени та параметри моделі — теж не одне й те саме
Ще два поняття, які легко переплутати.
Токени — це одиниці інформації, які модель отримує або генерує.
Параметри — числові значення всередині самої нейронної мережі, сформовані в процесі навчання.
Коли кажуть, що модель навчалася на трильйонах токенів, йдеться про обсяг навчальних даних у токенізованому вигляді.
Коли говорять про модель із мільярдами параметрів, мають на увазі вже її внутрішню структуру.
Тобто параметри належать моделі, а токени проходять через неї.
Чому поняття токена взагалі важливе звичайному користувачу
Для звичайної розмови з ChatGPT знати токенізацію не обов'язково. Можна роками користуватися ШІ й жодного разу не рахувати токени вручну.
Але саме це поняття пояснює багато речей, які інакше здаються дивними.
Чому модель не може нескінченно враховувати всю історію розмови? Тому що контекст має обмежений розмір у токенах.
Чому величезний документ іноді доводиться ділити на частини? Тому що він повинен поміститися в доступний контекст.
Чому одне українське слово може займати більше «місця», ніж схоже за довжиною англійське? Тому що модель працює не зі словами, а з токенами конкретного токенізатора.
Чому використання мовної моделі через API має різну вартість для коротких і довгих завдань? Тому що обсяг обробленої та створеної інформації часто вимірюється токенами.
І навіть звична фраза «ШІ читає текст» після цього виглядає трохи інакше. Мовна модель не бачить сторінку так, як її бачимо ми. Спочатку речення розкладається на маленькі машинні одиниці, вони перетворюються на числа й числові вектори, проходять через нейронну мережу — і лише наприкінці послідовність згенерованих токенів знову стає словами, які з'являються на нашому екрані.