Как компьютер представляет слова (токены)
ChatGPT не читает буквы, как ты читаешь эту строку. Он работает с пронумерованными кусочками текста — токенами. Разберёмся, что это и зачем.
Главная мысль урока: модель не видит ни букв, ни слов в привычном смысле. Текст сначала режут на кусочки-токены, а каждому токену выдают номер. Дальше внутри ИИ движутся только числа — слов там уже нет.
Зачем тебе это знать
Представь, что ты пишешь другу в мессенджере «прив», и телефон сам предлагает «привет». Или ищешь песню по паре слов, а сервис достаёт нужный трек. Везде здесь компьютер как-то работает с текстом. Но есть загвоздка: компьютер вообще не умеет работать с текстом. Он умеет только с числами.
Любая буква, эмодзи или пробел внутри устройства — это число. Картинка — это числа. Звук — числа. И когда мы хотим, чтобы ИИ разобрался с фразой, первым делом нужно превратить эту фразу в числа так, чтобы было удобно. Способ, которым это делают современные языковые модели, называется разбиением на токены.
К концу урока ты будешь понимать, что происходит с твоим сообщением в первую миллисекунду после того, как ты нажал «Отправить» в чате с ИИ: как текст рубится на кусочки и почему в окошке «осталось N токенов» считают именно их, а не буквы или слова.
Это не сухая формальность. От того, как текст порезан на токены, зависит очень многое: сколько твоего сообщения «влезет» в модель за один раз, почему длинные диалоги вдруг начинают «забывать» начало разговора, и даже почему ИИ иногда странно ошибается в простых на вид вещах вроде подсчёта букв. Все эти штуки станут понятны, как только ты увидишь, что модель смотрит не на текст, а на цепочку номеров. Так что давай по порядку.
Токен — кусочек текста (слово или его часть), которым модель оперирует вместо целых предложений.
В уроке про то, что значит «модель учится на данных» мы говорили, что модель — это система, которая после обучения делает предсказания. Языковая модель предсказывает следующий кусочек текста. Но чтобы что-то предсказывать, ей нужно сначала договориться, из каких «кирпичиков» вообще состоит текст. Вот эти кирпичики и есть токены.
Метафора: текст как конструктор LEGO
Вспомни конструктор LEGO. У тебя нет детальки «целый космический корабль» — есть набор стандартных кирпичиков, из которых можно собрать что угодно: корабль, дом, машину. Если нужна новая модель, ты не изобретаешь новые детали, а по-новому соединяешь те же самые кубики.
Текст для модели устроен так же. Есть фиксированный набор кусочков — словарь токенов (обычно несколько десятков тысяч штук). Любое предложение, даже которое модель видит впервые, собирается из этих готовых кусочков. Слово «привет» может быть одним токеном. А редкое слово «гиппопотамыч» модель соберёт из нескольких: гиппо + пота + мыч, как корабль из кубиков.
Почему не резать просто по словам? Тогда словарь пришлось бы делать бесконечным: люди постоянно придумывают новые слова, опечатываются, пишут «прееееевет» с десятью буквами «е». Подумай про чат любой онлайн-игры или комменты под роликом — там и сленг, и ники, и слова, которых нет ни в одном словаре. Если каждое такое слово требовало бы своей детальки, набор кубиков разросся бы до бесконечности и всё равно не покрыл бы завтрашние мемы. А по отдельным буквам резать слишком мелко — фразы становятся очень длинными, и модели тяжело уловить смысл, как тебе тяжело понять предложение, если читать его строго по одной букве в секунду. Токены — золотая середина: частые слова остаются целыми, а редкие и странные разбираются на знакомые части.
И ещё один плюс такого подхода: даже совсем новое для модели слово не ставит её в тупик. «Гиппопотамыч» она никогда не встречала, но кусочки гиппо, пота, мыч ей знакомы по другим словам. Это как собрать незнакомую фигурку из привычных деталей LEGO — инструкции нет, но детали те же, и что-то осмысленное собрать получится.
| Способ резать текст | Проблема |
| По буквам | Слишком мелко, фразы длинные, смысл размазан |
| По целым словам | Словарь бесконечный, опечатки ломают всё |
| По токенам (кусочкам) | Золотая середина — этим и пользуются |
А зачем нужны номера
Допустим, текст порезали на кусочки. Но кусочки — это всё ещё буквы, а модель умеет только в числа. Поэтому каждому токену из словаря заранее выдают порядковый номер, как место в раздевалке: токену кошка — номер 4021, токену пьёт — номер 8530, и так далее.
Дальше происходит самое важное для понимания: внутри модели нет ни слов, ни букв. Там бегают только эти номера. Модель смотрит на последовательность чисел вроде [4021, 8530, ...] и предсказывает, какое число должно идти следующим. И только в самом конце номера переводят обратно в кусочки текста, склеивают — и ты видишь читаемый ответ.
Сравни это с раздевалкой в спортзале. Ты сдаёшь куртку, тебе дают номерок — скажем, 17. Гардеробщик не запоминает, что у тебя синяя куртка с капюшоном; он просто вешает её на крючок 17. Когда ты вернёшься с номерком 17, он отдаст ровно твою куртку. Номер сам по себе ничего не говорит о куртке — это просто способ её быстро найти. Точно так же номер токена ничего не говорит о смысле слова, он лишь указывает, где этот кусочек лежит в словаре. Эта мысль нам ещё пригодится в разделе про подводные камни.
Возвращаемся к нашему сквозному примеру: «Кошка пьёт ...»
Через весь курс с нами идёт фраза, которую модель должна продолжить: «Кошка пьёт ...». Раньше мы говорили про неё на пальцах. Теперь посмотрим, что с ней реально происходит на входе в модель.
Шаг за шагом:
- Режем на токены. Фраза «Кошка пьёт» превращается в кусочки. Допустим, получилось три токена:
Кош,ка,пьёт. (Где именно пройдут границы — решает обученный разбивщик; нам сейчас важна сама идея.) - Заменяем на номера. Каждый кусочек ищется в словаре и заменяется своим номером: например
Кош→ 712,ка→ 19,пьёт→ 8530. - Модель работает с числами. На вход уходит последовательность
[712, 19, 8530]. Модель предсказывает следующий номер — скажем, 4115. - Переводим обратно. Номер 4115 в словаре — это токен
молоко. Его дописывают к фразе, и ты видишь: «Кошка пьёт молоко».
Заметь главное: слово «молоко» модель не «придумала из головы» и не «поняла». Она предсказала номер следующего токена, опираясь на то, что в миллионах текстов после «кошка пьёт» чаще всего шло именно «молоко». Подробно, как именно она это предсказывает, мы разберём в следующих уроках. Сейчас фиксируем только: на входе и выходе — текст, а внутри — числа-номера токенов.
Кстати, вот почему ответ ИИ часто «печатается» по кусочкам, слово за слово, а не появляется целиком. Модель и впрямь выдаёт по одному токену за раз: предсказала номер, перевела в кусочек, показала тебе, дописала его к фразе и снова предсказывает следующий. Та самая «печатная машинка», которую ты видишь в чате, — это и есть токены, вылетающие один за другим. Так что в следующий раз, наблюдая, как ответ набирается на глазах, ты будешь точно знать: это не для красоты, это реальный ритм работы модели.
А что с кошками и собаками
Второй сквозной пример курса — задача отличить кошку от собаки по картинке. Там тоже всё сводится к числам, только режут не текст, а изображение: картинку разбивают на пиксели, и каждый пиксель — это числа яркости и цвета. Идея одна и та же: любые данные на входе ИИ сначала становятся числами. Текст превращается в номера токенов, картинка — в числа пикселей. С этого момента модель не различает, текст перед ней или фото — для неё это просто наборы чисел.
Посмотрим на разбиение «вживую»
Этот урок концептуальный, но один небольшой пример поможет прочувствовать идею руками. Сделаем игрушечный разбивщик: он знает несколько частых слов целиком, а всё незнакомое режет на пары букв. Это сильно упрощённая версия того, что делают настоящие модели, но логика та же.
// Игрушечный словарь: частые слова знаем целиком,
// у каждого свой номер.
const vocab = {
"кошка": 4021,
"пьёт": 8530,
"молоко": 4115,
" ": 1 // пробел тоже токен!
};
// Режем текст: известные слова берём целиком,
// незнакомые — по 2 буквы.
function tokenize(text) {
const words = text.split(/( )/); // сохраняем пробелы
const tokens = [];
for (const w of words) {
if (w === "") continue;
if (vocab[w] !== undefined) {
tokens.push(w);
} else {
for (let i = 0; i < w.length; i += 2) {
tokens.push(w.slice(i, i + 2));
}
}
}
return tokens;
}
const frase = "кошка пьёт сок";
const tokens = tokenize(frase);
console.log("токены:", tokens);
console.log("сколько токенов:", tokens.length);
// Меняем токены на номера (незнакомым дадим 0)
const ids = tokens.map(t => vocab[t] === undefined ? 0 : vocab[t]);
console.log("номера:", ids);Вывод:
токены: [ 'кошка', ' ', 'пьёт', ' ', 'со', 'к' ] сколько токенов: 6 номера: [ 4021, 1, 8530, 1, 0, 0 ]
Разберём, что произошло. Слова кошка и пьёт модель знает целиком — они стали одним токеном каждое и получили свои номера. Пробел — тоже отдельный токен (это часто удивляет новичков!). А вот слово «сок» нашему игрушечному словарю незнакомо, поэтому оно разрезалось на со и к, и обоим достался номер 0 («незнакомый»). Видишь: фраза из трёх слов превратилась в шесть токенов. Буквы исчезли — остались номера.
Настоящий токенизатор устроен умнее: он не режет вслепую по две буквы, а заранее обучается на огромных текстах находить самые удобные кусочки. Но суть, которую ты только что увидел в коде, ровно та же: текст → кусочки → номера.
Частые ошибки и подводные камни
Вокруг токенов крутится много путаницы. Разберём самое частое, чтобы ты не попался.
1. «Один токен — это одно слово»
Самое популярное заблуждение. Иногда токен — это целое слово, иногда — его часть, иногда — всего лишь пробел или знак препинания. Длинное или редкое слово легко разваливается на 3–4 токена. Грубое житейское правило для русского текста: токенов обычно больше, чем слов. Поэтому, если в ИИ-сервисе написано «лимит 1000 токенов», это не «1000 слов» — реально влезет заметно меньше.
Этот же предел объясняет, почему в очень долгой переписке ИИ будто бы «забывает», о чём вы говорили в начале. У модели есть окно — сколько токенов она может держать перед глазами за раз. Когда диалог разрастается и токенов набирается слишком много, самые старые перестают помещаться в окно и выпадают из поля зрения. Это не склероз и не каприз — просто старые токены физически не влезли. Знание про токены помогает это предсказывать: если разговор стал длинным, важное иногда стоит повторить.
2. Путать токены с буквами
Токен — это не буква. Из-за этого модели бывает трудно с задачами, где важны именно буквы: например, посчитать, сколько раз буква «р» встречается в слове, или написать слово задом наперёд. Модель видит слово как пару готовых кусочков, а не как цепочку отдельных букв, поэтому «по буквам» ей думать неудобно. Если ИИ ошибся в подсчёте букв — часто причина именно в этом.
3. Думать, что номер токена несёт смысл
Номер 4021 у токена кошка — это просто адрес в словаре, как номер дома на улице. Он не означает, что кошка «больше» собаки с номером 318 или «похожа» на токен 4022. Номер нужен только чтобы найти кусочек в таблице. Смысл слова прячется совсем в другом месте — мы доберёмся до него в уроке про эмбеддинги.
4. Считать, что у всех моделей токены одинаковые
У каждой модели свой словарь токенов, собранный при обучении. Одна и та же фраза у разных моделей порежется по-разному и даст разное число токенов. Поэтому нельзя взять номера из одной модели и скормить другой — для неё это будет бессмыслица, как читать чужую раздевалку по своим номеркам.
5. Забывать про пробелы и регистр
Пробел, перенос строки, заглавная буква — всё это часть токенов. Слова кошка и Кошка вполне могут оказаться разными токенами с разными номерами. Поэтому лишние пробелы и странное оформление в запросе реально меняют то, что увидит модель.
Мини-практика: посчитай токены сам
Теперь твоя очередь. Возьми за основу игрушечный разбивщик выше и поэкспериментируй:
- Добавь в
vocabсловомолокос номером 4115 (оно там уже есть) и проверь фразу «кошка пьёт молоко». Сколько вышло токенов? Совпало с числом слов? - Прогони фразу «Кошка пьёт молоко» с заглавной «К». Что изменилось и почему? (Подсказка: загляни в пункт про регистр.)
- Возьми любое своё длинное или редкое слово — например, имя любимого персонажа из игры — и посмотри, на сколько кусочков его разрежет разбивщик.
- Прикинь на глаз: возьми одно своё сообщение в мессенджере и грубо посчитай, токенов в нём окажется больше или меньше, чем слов. Почему?
Лучший способ понять токены — не прочитать про них, а скормить разбивщику пару своих фраз и удивиться, где прошли границы.
Итоги
Сегодня ты заглянул в самую первую дверь, через которую любой текст входит в ИИ.
- Токен — это кусочек текста: целое слово, его часть, пробел или знак. Модель оперирует токенами, а не буквами и не предложениями.
- Компьютер умеет работать только с числами, поэтому каждому токену выдают номер. Внутри модели бегают только эти номера — слов и букв там нет.
- Текст проходит путь: фраза → кусочки-токены → номера → модель → номера → склейка обратно в текст. Наша «Кошка пьёт ...» именно так превращается в «Кошка пьёт молоко».
- Любые данные на входе ИИ становятся числами: текст — номерами токенов, картинка с кошкой или собакой — числами пикселей. Дальше модели всё равно, что перед ней.
- Токенов обычно больше, чем слов; номер токена — это адрес, а не смысл; у каждой модели свой словарь.
Теперь у тебя есть фундамент: ты знаешь, в каком виде текст вообще попадает в модель. Но мы пока обошли главную загадку. Номер 4021 — это просто адрес, в нём нет ни капли смысла. Откуда же модель «знает», что кошка ближе к собаке, чем к табуретке? В следующем уроке мы разберём эмбеддинги — хитрый способ превратить номер токена в точку в пространстве смыслов, где похожие слова и правда лежат рядом. Там наша «Кошка пьёт ...» заиграет новыми красками.