Помните, в детстве были такие книжки-игры: нужно соединить точки по порядку, и постепенно проступает рисунок. Сначала точки 1, 2, 3 — ничего не понятно, просто хаос. А потом, когда соединяешь последнюю, вдруг видишь очертания корабля или зверя и испытываешь восторг
Примерно так же работает и чтение текста для нейросети. Только точек там миллиарды, и соединяет их не ребёнок с карандашом, а сложная математика. Но суть та же: из разрозненных кусочков постепенно складывается смысл.
Мы, люди, читаем и сразу видим "корабль". Нам не нужно объяснять, что "кот" и "котами" — это вариации одного существа. Мы чувствуем язык. У нас есть детство, книги, разговоры за ужином — целая жизнь, которая научила нас понимать слова.
А у ИИ нет жизни. У него нет детства, нет запаха бабушкиных пирожков и воспоминаний о том, как впервые погладил кота. У него есть только числа. Миллиарды чисел. И чтобы эти числа хоть что-то значили, текст нужно сначала разобрать на кусочки — такие, чтобы машина могла их проглотить и переварить. Как именно это делается — вопрос, от которого зависит всё: насколько хорошо нейросеть понимает ваш запрос, почему иногда отвечает так складно, а иногда несёт такую чушь, что хочется ударить клавиатурой.
Давайте заглянем на кухню. Там, где текст превращается в цифры.
Что видит ИИ, когда вы печатаете "кот"
Когда вы пишете сообщение нейросети, она не получает аккуратные буквы. Она получает поток байтов — последовательность нулей и единиц, в которой закодированы символы. Работать с этим потоком напрямую нельзя: слишком мелко, слишком много шума.
Представьте, что вы решили описать другу фильм, перечисляя каждый кадр покадрово. Вы утонете в деталях, и друг ничего не поймёт. Нужно выделить главное: сцены, диалоги, повороты сюжета.
Так же и нейросеть. Ей нужны не отдельные символы, а осмысленные блоки — токены.
Токен — это минимальная единица, с которой работает модель. Это может быть целое слово, часть слова или даже одна буква — в зависимости от того, как настроена токенизация.
Задача токенизатора — разрезать текст на такие кусочки, чтобы их было удобно обрабатывать и чтобы они сохраняли смысл.
Почему нельзя просто взять слова
Казалось бы, проще всего нарезать текст словами. Взял словарь, каждому слову присвоил номер — и готово.
Но в русском языке слова имеют кучу форм. "Кот", "кота", "коту", "котом", "коты", "котов", "котам" — это семь разных токенов для одного животного. А если добавить уменьшительно-ласкательные ("котик", "котёнок"), число вырастет ещё. А если учесть, что в языке сотни тысяч слов, да ещё и новые появляются каждый день (кто придумал "кринж"?), — словарь разрастается до неприличных размеров.
Модель с огромным словарём будет медленной и прожорливой. К тому же она не сможет обработать слово, которого не видела в словаре. А это случается постоянно.
Другой крайний вариант — резать по буквам. Словарь маленький (33 буквы), проблем с новыми словами нет. Но буквы сами по себе не несут смысла. Из букв "к", "о", "т" ещё нужно собрать образ кота. Модели придётся каждый раз заново учиться соединять буквы в осмысленные комбинации. Это долго и неэффективно.
Золотая середина: режем с умом
Поэтому придумали компромисс — субсловную токенизацию.
Современные нейросети используют алгоритмы вроде BPE (Byte-Pair Encoding). Они анализируют огромное количество текстов и ищут самые частотные сочетания символов.
Сначала токенизатор смотрит на отдельные буквы. Потом находит пары букв, которые часто встречаются вместе (например, "ст" в начале слов). Склеивает их в один токен. Потом ищет пары токенов, которые часто идут подряд, и снова склеивает. И так до тех пор, пока словарь не достигнет нужного размера (обычно 30–50 тысяч токенов).
В результате слова "кот", "кота", "котами" могут быть собраны из общих кусочков: "кот" + окончание. Модель не учит каждую форму отдельно, а понимает, что "кот" — это основа, а "а", "у", "ом" — это падежи. Это экономит память и помогает улавливать грамматику.
Кроме того, такой подход позволяет обрабатывать незнакомые слова. Если слово редкое, токенизатор просто разобьёт его на более мелкие части, которые уже есть в словаре. Например, "антидизэстэблишментаризм" — страшное слово, но оно состоит из знакомых кусочков "анти", "диз", "эст", "блиш", "мент", "аризм". Модель соберёт значение из этих частей, даже если раньше не встречала слово целиком.
Почему это важно для вас
Казалось бы, какая разница, как там внутри режутся слова? Главное, чтобы работало.
Но разница есть. От качества токенизации зависит, насколько хорошо нейросеть понимает ваш запрос, особенно на сложных или редких темах. Плохой токенизатор может разорвать важные смысловые связи, и модель начнёт нести чушь.
Например, в английском токенизаторы часто режут слово "iPhone" как "I" + "Phone", потому что "I" — это отдельное слово. Модель может подумать, что речь идёт о "я" и "телефоне", а не о бренде. Поэтому токенизаторы постоянно совершенствуют, добавляют специальные правила для имён собственных.
В русском свои сложности. Из-за обилия окончаний и суффиксов субсловная токенизация особенно важна. Хороший токенизатор должен понимать, что "бежать", "бегу", "бежим" — это один корень, а не три разных слова.
Так почему же для ИИ "кот" и "котами" — это разные вселенные?
А потому что для нейросети не существует понятия "слово". Для неё существуют только токены — числовые идентификаторы кусочков текста. И если эти кусочки нарезаны неудачно, "кот" и "котами" окажутся совершенно разными наборами чисел, никак не связанными между собой. Модели придётся заново учить, что эти наборы относятся к одному и тому же смыслу.
Но благодаря субсловной токенизации мы можем сделать так, чтобы "кот" и "котами" делили общий корень — токен "кот". Тогда для ИИ это уже не две разные вселенные, а одна вселенная с разными окончаниями. Он видит связь, понимает грамматику и не тратит лишнюю память на запоминание всех форм по отдельности.
Так что в следующий раз, когда нейросеть правильно отреагирует на ваш корявый запрос, знайте: где-то глубоко внутри неё трудится токенизатор, собирающий точки в рисунок. Как в той самой детской книжке-игре. Только вместо точек — числа, а вместо рисунка — смысл, который мы вложили в слова.
И теперь главный вопрос: а кто в этой аналогии вы?
Тот, кто просто соединяет точки, проживая день за днём по инструкции, заложенной воспитанием, школой, обществом? Или тот, кто способен увидеть в случайном наборе чисел смысл, которого там не закладывали?
Если хотите чаще заглядывать за кулисы технологий и собственного сознания — поставьте лайк. 👍Это лучший способ сказать: «Я здесь, я думаю об этом, мне это важно».
И напишите в комментариях: какое слово нейросеть когда-то поняла «не так», но это сработало лучше правильного ответа? 💬 У каждого был такой момент. Делитесь — будет интересно почитать.