Что такое ТОКЕН, или почему нейросеть не знает слов

blogtest · 26.09.2026 20:32 #ai #llm #нейросети
Что такое ТОКЕН, или почему нейросеть не знает слов
Содержание

Нейросеть не читает слова — она считает числа. И мостик между миром людей и миром чисел называется токеном: маленьким кусочком текста, который модель складывает в векторы, а из векторов — в ответы. Разберёмся, почему «токен» — это не жаргон, а фундамент всего, что мы называем ИИ.

Слово — не слово

Когда вы видите в чате слово «вероятность», ваш мозг достаёт из памяти связанные образы: монетку, погоду, страховку. У нейросети такого словаря нет. У неё — таблица сопоставления фрагментов текста целым числам. Это и есть токен.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("gpt2")
text = "вероятность дождя завтра"
tokens = tokenizer.encode(text)
print(tokens)        # [38857, 16843, 21169, ...] — 25 токенов
print(tokenizer.decode(tokens))  # вероятность дождя завтра

Токен — это не слово, не буква и не слог. Это элемент словаря, который модель научилась выделять в тексте. Словарь современных языковых моделей содержит 50 000 – 200 000 токенов, и в нём есть слова, части слов, знаки препинания, пробелы — и даже эмодзи.

Как текст превращается в числа

Процесс называется токенизацией. Модель режет входной текст на токены по определённым правилам, каждому токену присваивает уникальный номер (ID), и дальше работает только с этими номерами.

flowchart LR
    A[Текст: вероятность дождя] --> B[Токенизатор]
    B --> C[38857]
    B --> D[16843]
    B --> E[21169]
    C --> F[Эмбеддинг-вектор]
    D --> F
    E --> F
    F --> G[Трансформер]
    G --> H[Ответ]

Важно: токены — это дискретные символы, а не векторы. Эмбеддинг — это отдельная таблица, которая переводит номер токена в плотный вектор чисел (обычно 768 или 4096 измерений). Токенизатор отвечает за разрезание, эмбеддинги — за смысл, трансформер — за предсказание следующего токена.

Почему «токен», а не «слово»

Потому что слово — слишком крупная и слишком неудобная единица. Представьте словарь из миллиона слов: матрица эмбеддингов стала бы гигантской, а редкие слова получали бы «пустые» представления. Токенизация решает это — разбивает редкие и длинные слова на частые куски.

Язык Пример текста Токены (GPT-2)
Английский unhappiness un + h + appiness
Русский предположительно 18 токенов
Китайский 人工智能 人工 + 智能

В английском токены часто совпадают со словами (особенно частыми), но даже там unhappiness разбивается на три токена. В русском и китайском разбиение заметнее: одно слово может стать пятью-десятью токенами. Именно поэтому стоимость запроса в API считается в токенах, а не в словах.

Стыдливость контекста

Есть забавный феномен: нейросеть «видит» только номера токенов, но не их содержание. Модель может идеально отвечать на вопросы, не понимая, что означает слово «вероятность» — она лишь выучила статистические связи между номерами. Это похоже на то, как человек может наизусть выучить текст на незнакомом языке: звучит убедительно, смысла ноль.

Поэтому и возникают эффекты «галлюцинаций»: модель умеет складывать векторы, но не обязана понимать, что конкретный вектор соответствует реальному объекту. Токены — это ярлыки, а не определения.

Сколько токенов в одном слове?

Зависит от языка и модели. Вот несколько примеров для популярных токенизаторов:

Токенизатор «вероятность» «предположительно» «artificial intelligence»
GPT-2 (BPE, 50k) 18 токенов 18 токенов 3 токена
GPT-4 (cl100k, 100k) 4 токена 7 токенов 3 токена
Mistral 7B (SentencePiece, 32k) 5 токенов 6 токенов 3 токена

Чем «ближе» язык к обучающим данным, тем меньше токенов на слово. Английский текст обычно даёт ~1.3 токена на слово, русский — ~1.5–2, а редкие технические термины могут разбиваться на 5–10 кусочков.

Как посчитать токены самостоятельно

Не нужно угадывать — у каждой модели есть свой токенизатор:

# Для открытых моделей (GPT-2, Mistral, Llama)
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1")
print(len(tokenizer.encode("Привет, мир!")))  # 7

# Для API OpenAI
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
print(len(enc.encode("Hello, world!")))  # 4

Практический вывод: если вы пишете промпт на русском для англоязычной модели, он будет стоить дороже в токенах, чем его английский эквивалент. Вот реальные цифры для cl100k_base (GPT-4):

Английский Токенов Русский Токенов
probability 1 вероятность 4
artificial intelligence 3 искусственный интеллект 11
Hello, world! 4 Привет, мир! 7

Не потому что русский «хуже», а потому что токенизатор менее эффективен для незнакомых языков. Для коротких промптов разница копеечная, но для длинных контекстов — заметная.

Что дальше

Токены — это только первый уровень. Дальше эмбеддинги переводят их в векторы, трансформер строит из векторов смысл, а декодер превращает следующий предсказанный вектор обратно в токен. Но именно токенизация задаёт границы всего процесса: что модель может знать, сколько будет стоить запрос, и где начинается её «понимание».

Пока нейросети считают числа, мы можем хотя бы понимать, что именно они считают.

Комментарии

Пока нет комментариев.

Войдите, чтобы комментировать.