1/114
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai | Chat |
|---|
No analytics yet
Send a link to your students to track their progress
Почему LLM не может работать с текстом напрямую?
Модель работает с числами: текст нужно представить как последовательность id из конечного словаря токенизатора.
Путь текста в модель (схема)
текст → токены → id → векторные представления (эмбеддинги) → модель
Токен
Единица, с которой работает модель: целое слово, часть слова, число, знак пунктуации, эмодзи или кусок кода.
Токенизация
Разбиение текста на токены.
Токенизатор (токенайзер)
Алгоритм и набор правил/словарь, который выполняет разбиение текста на токены.
Корпус
Набор текстов, собранных для обучения или анализа модели.
Почему не использовать словарь из целых слов?
Он получается огромным и всё равно неполным: словоформы, редкие фамилии, опечатки, URL, код, новые термины.
Почему не токенизировать посимвольно?
Последовательности становятся слишком длинными: больше вычислений, раздутый контекст, лишние деньги.
Подсловная токенизация — зачем?
Компромисс между словарём слов и символами: частые фрагменты кодируются целиком, редкие собираются из мелких известных кусков.
Верно ли, что 1 слово = 1 токен?
Нет. Токен — далеко не всегда целое слово; разбиение зависит от словаря и правил токенизатора.
Символ ▁ в начале токена
Служебная пометка: перед токеном был пробел или начинается новое слово (SentencePiece: xlm-roberta, LLaMA).
Символ ## в начале токена
Служебная пометка WordPiece (BERT): токен продолжает предыдущий фрагмент слова.
[UNK] /
Специальный токен неизвестного фрагмента, который токенизатор не смог представить своим словарём.
Почему bert-base-uncased плохо разбивает «Студенты любят практику❤️»?
Он обучен в основном на английском: русские слова разваливаются почти на буквы, а слово с эмодзи превращается в [UNK].
На каких текстах нужно обучать токенизатор?
На текстах, похожих на те, с которыми модель будет работать дальше (например, для LLM по коду — корпус с большим количеством кода).
Понимает ли токенизатор смысл текста?
Нет. Он применяет словарь и правила разбиения; качество разбиения зависит от покрытия языка и символов словарём.
Сколько токенов занимает эмодзи?
Зависит от токенизатора: один токен, несколько токенов или специальный токен неизвестного фрагмента.
BPE (Byte Pair Encoding)
Алгоритм токенизации: начинает с маленьких единиц и постепенно склеивает самые частые соседние пары в новые токены.
Шаги обучения BPE (по порядку)
1) взять корпус; 2) начать с маленьких единиц (символы/байты); 3) посчитать частоты соседних пар; 4) склеить самую частую пару; 5) повторять до нужного размера словаря; 6) запомнить словарь и порядок слияний.
Почему BPE запоминает порядок слияний?
На инференсе токенизатор не придумывает новые токены, а применяет те же слияния в том же порядке, что и при обучении.
Учитывает ли BPE корни, приставки, суффиксы?
Нет. BPE не понимает язык — он лишь ищет куски текста, которые часто стоят рядом.
Как число слияний BPE влияет на словарь и разбиение?
Больше слияний → больше словарь, популярные фрагменты кодируются компактнее. Меньше слияний → словарь меньше, текст дробится сильнее.
Главный практический плюс BPE
Частые слова и их части кодируются компактно, а редкие слова собираются из более мелких известных кусочков.
Byte-level BPE
Вариант BPE, где базовые единицы — байты UTF-8, а не символы Unicode. Любой текст представим, проблема [UNK] практически исчезает.
Сколько базовых единиц в byte-level BPE?
Ровно 256 — все возможные значения байта.
Почему в токенах GPT встречаются символы Ġ, Ã, Ģ?
Это не поломка: в byte-level BPE байты отображаются в печатаемые Unicode-символы, чтобы с токенами было удобно работать как со строками.
WordPiece
Подсловная токенизация, похожая на BPE (тоже собирает словарь постепенно), но с другим критерием слияния пар. Используется в BERT.
Критерий слияния в BPE
score(t1, t2) ∝ freq(t1, t2) — чем чаще пара встречается рядом, тем выше оценка.
Критерий слияния в WordPiece
score(t1, t2) ∝ freq(t1, t2) / (freq(t1) · freq(t2)) — учитывает и частоту каждого токена по отдельности.
Какой вопрос задаёт BPE, а какой WordPiece при слиянии?
BPE: «часто ли эти токены стоят рядом?». WordPiece: «насколько характерно для них быть рядом именно друг с другом?»
Контекстное окно (длина контекста)
Ограничение на число токенов, которые модель может обработать за один запрос.
Что входит в контекстное окно?
Системные инструкции, история диалога, документы из RAG, код, примеры, запрос пользователя и уже сгенерированная часть ответа — всё делит один лимит.
От чего зависит число токенов в тексте?
Не от числа символов, а от того, как текст разобьёт токенизатор конкретной модели.
Базовая формула стоимости запроса
cost = N_in · p_in + N_out · p_out (входные и выходные токены оплачиваются отдельно).
Влияют ли на стоимость запроса веса модели или размер базы знаний?
Нет. Веса не передаются в запросе, база знаний не отправляется целиком — влияет только текст, реально попавший в запрос.
Запросы подорожали и упираются в контекст. Что проверить?
Токены системных инструкций, документов RAG в запросе, истории диалога и длину ответа модели.
Чем правильно считать токены заранее?
Токенизатором конкретной модели — не по словам и не по символам.
Какие вопросы помогает решить подсчёт токенов до отправки?
Поместится ли запрос в контекст, сколько места останется для ответа, сколько стоит один запрос и тысяча, изменится ли цена при смене модели.
Формула стоимости при ценах за 1 млн токенов
cost = N_in / 1 000 000 · p_in + N_out / 1 000 000 · p_out
Пример: 12 000 вх. + 1 500 вых. токенов, $0.75 / $4.50 за 1M. Стоимость?
0.009 + 0.00675 = $0.01575 за запрос; при 10 000 запросов/день ≈ $157.5 в день, ≈ $4 725 в месяц.
Главная инженерная мысль про стоимость LLM-сервиса
Копеечная стоимость одного запроса при большом трафике превращается в ощутимую статью бюджета.
Кешированный ввод
Повторяющийся начальный фрагмент промпта не обрабатывается заново каждый раз и оплачивается по сниженной ставке (есть не у всех провайдеров).
Что может попасть в кеш промпта?
Системная инструкция, правила ответа, описание инструментов, схема JSON-ответа, длинный общий контекст задачи.
Условие, при котором часть промпта может кешироваться
Она стоит в начале промпта и повторяется без изменений.
Формула стоимости с кешированным вводом
cost = (N_in − N_cached)/1M · p_in + N_cached/1M · p_cached + N_out/1M · p_out
Пример: из 12 000 вх. токенов 8 000 в кеше ($0.075/1M). Стоимость?
0.003 + 0.0006 + 0.00675 = $0.01035 вместо $0.01575; при 10 000 запросов/день ≈ $103.5 вместо $157.5.
Когда становится известно точное число кешированных токенов?
Обычно после запроса — из статистики использования (usage) API.
Как оценивать стоимость, если кеш заранее неизвестен?
Считать несколько сценариев — без кеша, с частичным кешем, с хорошим кешем — и получить реалистичный диапазон.
tiktoken
Библиотека для токенизации GPT-подобных моделей OpenAI; работает на byte-level BPE.
Как получить токенизатор модели в tiktoken и посчитать токены?
encoding = tiktoken.encoding_for_model("gpt-5"); token_ids = encoding.encode(text); len(token_ids)
Что делать, если tiktoken.encoding_for_model() выдаёт KeyError?
Явно указать кодировку: tiktoken.get_encoding("o200k_base").
o200k_base
Кодировка tiktoken, которую используют современные GPT-модели.
Как увидеть сами токены в tiktoken?
Декодировать каждый id отдельно: [encoding.decode([i]) for i in token_ids].
Что важно в списке token_ids для инженера?
Не сами числа (это ссылки на словарь), а их количество — сколько места текст займёт во входе модели.
Какие строки оказались самыми «плотными» по токенам в примере с GPT-токенизатором?
Числа/идентификаторы (50 символов → 21 токен) и эмодзи (12 символов → 15 токенов); английский — наоборот компактный (70 → 12).
Почему короткая строка с эмодзи занимает много токенов?
Эмодзи для человека выглядит одним символом, но внутри может быть сложной Unicode-последовательностью, которая раскладывается на несколько токенов.
AutoTokenizer
Класс из transformers (HuggingFace), который сам подбирает нужный класс токенизатора по названию модели.
Что скачивает AutoTokenizer.from_pretrained(…)?
Только токенизатор, не саму модель — он весит намного меньше и удобен для оценки числа токенов.
Как посчитать токены HF-токенизатором?
ids = tokenizer(text, add_special_tokens=False)["input_ids"]; len(ids)
input_ids
Числовые id токенов в выводе HF-токенизатора.
convert_ids_to_tokens()
Метод HF-токенизатора, превращающий id в читаемые токены.
Byte fallback
Если фрагмент нельзя представить обычным токеном словаря, токенизатор кодирует его байтами UTF-8 (
Что означают токены вида
Байтовые фрагменты символа, разложенного через byte fallback (например, часть эмодзи ❤️).
Важное свойство токенизатора (проверка через decode)
Обратимость: tokenizer.decode(ids) должен восстанавливать исходный текст.
add_special_tokens
Флаг HF-токенизатора: добавлять ли специальные токены по стандартному шаблону подготовки входа модели.
Специальные токены
Отдельные токены со своими id в словаре, которые задают структуру входа: начало, конец, разделитель, выравнивание, роли в чате. Нового смысла не добавляют.
bos_token
Токен начала последовательности (у LLaMA — ).
eos_token
Токен конца последовательности (у LLaMA — ).
unk_token
Токен неизвестного фрагмента (
pad_token
Токен для выравнивания последовательностей до одной длины в батче.
Добавляет ли LLaMA-токенизатор eos при add_special_tokens=True для одной строки?
Нет, обычно только bos (). eos используется в чат-шаблоне, при подготовке обучающих данных или генерации.
Как правильно понимать add_special_tokens=True?
Не «добавить все токены из special_tokens_map», а «применить стандартный шаблон подготовки входа для этой модели».
tokenizer.special_tokens_map
Словарь специальных токенов, которые знает токенизатор (bos_token, eos_token, unk_token, pad_token …).
[CLS]
Специальный токен начала входа в BERT-подобных моделях.
[SEP]
Специальный токен-разделитель в BERT: ставится в конце последовательности; при паре текстов — после каждого.
Специальные токены vs служебные обозначения
Специальные токены — отдельные id в словаре (, , [CLS], [SEP],
LLaMA-токенизатор дал больше токенов, чем GPT, почти на всех примерах. Верный вывод?
Только: на этих текстах этот токенизатор дал больше токенов. Для другой модели и данных результат может отличаться — проверять на своих данных.
Определяет ли число токенов качество ответа модели?
Нет. Оно влияет на контекст и стоимость, а качество нужно проверять отдельно.
Почему разные токенизаторы дают разное число токенов?
Они обучались на разных данных и имеют разные словари: частые в обучении фрагменты кодируются компактно, редкие — дробятся.
Порядок сравнения моделей по стоимости
1) взять типичные тексты задачи; 2) посчитать токены разными токенизаторами; 3) подставить цены моделей; 4) оценить стоимость одного запроса и ожидаемого объёма.
Почему цены за 1M токенов недостаточно для выбора модели?
Это только половина расчёта; вторая — сколько токенов получится из ваших данных этим токенизатором.
token_id — адрес или смысл?
Адрес: номер строки в таблице эмбеддингов. Из самих номеров нельзя понять близость токенов по смыслу.
Эмбеддинг
Векторное представление объекта (токена, текста, пользователя, товара …) — набор вещественных чисел фиксированной длины.
Embedding layer (слой эмбеддингов)
Слой модели, который по token_id достаёт вектор токена из обучаемой таблицы.
Input embedding
Вектор одного токена до учёта контекста; получается сразу после слоя эмбеддингов и не зависит от соседних токенов.
Hidden state
Представление токена с учётом контекста, после слоёв трансформера; для одного токена разное в разных фразах.
Sentence embedding
Вектор целого текста (фразы, вопроса, абзаца, документа); для сравнения текстов, семантического поиска и RAG.
Какие эмбеддинги использовать для семантического поиска и RAG?
Sentence / text embedding из специальных embedding-моделей, а не input embedding языковой модели.
Метафора: input embedding vs hidden state
«Сотрудник сам по себе — ещё не совещание»: input embedding — токен сам по себе, hidden state — токен с учётом окружения.
Форма таблицы эмбеддингов
embedding_matrix.shape = [vocab_size, d_model] — строка на каждый токен словаря, в строке вектор длины d_model.
vocab_size
Размер словаря токенизатора — число строк в таблице эмбеддингов.
d_model
Длина вектора одного токена — число столбцов в таблице эмбеддингов.
Как слой эмбеддингов обрабатывает текст (шаги)
1) токенизатор даёт token_id; 2) id = номер строки в таблице; 3) из строки берётся вектор; 4) вектор передаётся дальше в модель.
Обучаемый ли слой эмбеддингов?
Да: инициализируется почти случайно и обновляется вместе с остальными весами модели.
Учебная задача BERT-подобных моделей
Восстанавливать пропущенные токены: «Кошка [MASK] на окне.»
Учебная задача GPT-подобных моделей
Предсказывать следующий токен: «Кошка сидит на …»
Назначение BERT- vs GPT-подобных моделей
BERT-подобные — обычно анализ текста; GPT-подобные — генерация текста.
Функция потерь (упрощённо)
loss = −log P(правильный токен): высокая вероятность правильного токена → маленький loss, низкая → loss растёт.
Обратное распространение ошибки
Вычисляет, какие параметры сильнее всего повлияли на ошибку, и корректирует их — включая таблицу эмбеддингов.
Порядок шага обучения эмбеддингов
1) текст → token_id; 2) достать векторы по id; 3) прогнать через слои и получить предсказание; 4) сравнить с ответом, посчитать loss; 5) обновить таблицу через backprop.