# Биграммы и n-граммы

> Первая языковая модель в истории NLP — простая таблица счётчиков пар. Но в ней уже есть всё, что делает GPT: предсказание следующего токена, генерация через сэмплирование и перплексия как мера качества. Понять n-граммы — значит понять саму постановку задачи, которую трансформеры просто решают лучше.

Раздел: [Языковые модели: от n-грамм до трансформера](https://ml-book.com/s/language-models/) · Страница темы: https://ml-book.com/t/bigram-ngram/ · Обновлено: 2026-07-07 · Источник: ml-book.com, учебник делается сообществом

## Интуиция

Продолжите фразу: «я выпил чашку …». В голове наверняка всплыли «кофе» и «чая», а не «бетона». Это и есть языковая модель (language model, LM) — распределение вероятностей следующего слова при известном начале. Формально LM присваивает каждому возможному продолжению вероятность P(w_t | w_1…w_{t−1}).

Самый прямой способ построить такую модель — посчитать. Биграммная модель (bigram model) отвечает на вопрос «что идёт после w_1?» голой статистикой корпуса:

`P(w_2 | w_1) = count(w_1, w_2) / count(w_1)`

Если после слова «машинное» в 80 случаях из 100 шло «обучение», то P(«обучение» | «машинное») = 0.8. Никакой магии — деление двух счётчиков.

## Как это работает

Генерация текста — это цепочка сэмплирований: берём стартовый токен, сэмплируем следующий из P(· | w_1), приклеиваем к контексту, сэмплируем ещё раз — и так, пока не надоест. Именно так, токен за токеном, генерирует и GPT (подробнее о стратегиях — в теме [про сэмплирование](https://ml-book.com/t/sampling/)).

n-грамма обобщает биграмму: учитываем не одно предыдущее слово, а n−1. Здесь работает марковское предположение (Markov assumption) — будущее зависит только от короткого недавнего прошлого, а не от всей истории:

`P(w_t | w_1…w_{t−1}) ≈ P(w_t | w_{t−n+1}…w_{t−1})`

Это заведомо неправда для языка (согласование может тянуться через всё предложение), но она делает задачу счётной: таблица «контекст → счётчики продолжений» — вот и вся модель.

> **💡 Ключевая мысль**
>
> Языковое моделирование = предсказание следующего токена. Вся разница между n-граммой и GPT — в том, чем параметризовано условное распределение: таблицей счётчиков или нейросетью на миллиарды весов.

В интерактиве ниже — посимвольная n-грамная модель (токен = один символ), обученная на мини-корпусе из пяти предложений про котов, потоки и токены. Попробуйте все четыре n: при n=1 получается каша из букв, при n=2–3 проступают «почти слова», а при n=4 модель начинает дословно цитировать корпус.

> 🎛 Интерактивная визуализация — на странице темы: https://ml-book.com/t/bigram-ngram/

## Разреженность и сглаживание

Главная беда счётного подхода — таблица растёт экспоненциально. Для словаря из V токенов у n-граммы V^{n−1} возможных контекстов: при V = 50 000 триграмма имеет 2.5 миллиарда контекстов, 5-грамма — уже 6×10^{18}. Почти все осмысленные сочетания ни разу не встретятся даже в гигантском корпусе — таблица катастрофически разрежена (sparse). Именно это вы видите в интерактиве: с ростом n число контекстов взлетает, а счётчики в каждой ячейке тают.

Хуже того, невиданная пара получает P = 0, а одна нулевая вероятность обнуляет вероятность всего текста и делает перплексию бесконечной. Лечится сглаживанием (smoothing). Простейший вариант — сглаживание Лапласа (add-one): прибавляем единицу ко всем счётчикам, как будто каждую пару мы видели хотя бы раз:

`P(w_2 | w_1) = (count(w_1, w_2) + 1) / (count(w_1) + V)`

Приёмы посерьёзнее — откат (backoff) к (n−1)-грамме, когда длинный контекст не встречался, интерполяция нескольких порядков и сглаживание Кнесера–Нея (Kneser–Ney) — вершина счётной эпохи.

## Перплексия: на сколько вариантов модель колеблется

Как сравнить две языковые модели? Стандартная метрика — перплексия (perplexity) на отложенном тексте:

`PPL = exp( −(1/N) · Σ_i log P(w_i | контекст) )`

Интуиция: перплексия — это «эффективное число равновероятных вариантов», между которыми модель в среднем колеблется на каждом шаге. PPL = 1 — модель предсказывает текст без сомнений; PPL = V — гадает равномерно по всему словарю. Меньше — лучше. Униграммная модель живёт в сотнях, современные LLM на английском — в единицах.

## Прямой предок GPT

GPT решает ровно ту же задачу next token prediction, что и биграмма Шеннона 1948 года. Разница — в параметризации. Таблица требует точного совпадения контекста: «кот пил» и «кошка пила» для неё никак не связаны, статистика не переносится. Нейросеть кодирует контекст вектором, и похожие контексты автоматически делят статистическую силу: выучив продолжения одного, модель обобщает на другой. Плюс контекст может быть в тысячи токенов — без экспоненциального взрыва памяти. Первый шаг этого пути — [токенизация](https://ml-book.com/t/tokenization/) и рекуррентные сети, следующий — attention.

> **⚠️ Подводный камень**
>
> С ростом n текст выглядит всё «осмысленнее», но это иллюзия понимания: на маленьком корпусе 4-грамма почти дословно цитирует обучающие предложения. Это заучивание, а не обобщение — та же дилемма «память против генерализации» всплывает и у LLM, когда модель воспроизводит тренировочные данные.

> **🎤 На собеседовании**
>
> - «Что такое языковая модель?» — распределение вероятностей следующего токена при заданном контексте; всё остальное — детали параметризации.
> - «Почему нельзя просто увеличивать n?» — число контекстов растёт как V^{n−1}, почти все длинные контексты уникальны: таблица разрежена, счётчики ненадёжны.
> - «Что такое перплексия?» — экспонента средней кросс-энтропии; интуитивно — среднее число вариантов, между которыми модель колеблется. Сравнима только при одинаковом токенизаторе и тесте.
> - «Чем GPT отличается от n-граммы?» — задача та же, но распределение параметризовано нейросетью, которая обобщает на невиданные контексты вместо точного совпадения строк.

## Связанные темы

- [Токенизация и BPE](https://ml-book.com/t/tokenization/)
- [Сэмплирование: temperature, top-k, top-p](https://ml-book.com/t/sampling/)
- [Рекуррентные сети (RNN, LSTM)](https://ml-book.com/t/rnn/)

---

Интерактив, тест из 12 вопросов и карточки терминов — на странице темы: https://ml-book.com/t/bigram-ngram/
Весь учебник в markdown: https://ml-book.com/llms-full.txt · Оглавление для агентов: https://ml-book.com/llms.txt
