---
title: "Top-k"
source: "https://systems-analysis.info/wiki/Top-k"
wiki: "systems-analysis.info/wiki"
article: "Top-k"
language: "ru"
categories:
  - "Категория:Russian"
  - "Категория:Базовые понятия LLM"
  - "Категория:Большие языковые модели"
  - "Категория:Машинное обучение"
revision_id: 197
wiki_created_at: 2026-09-06T22:05:15Z
wiki_modified_at: 2026-09-06T22:05:15Z
downloaded_at: 2026-09-07T22:18:15Z
---

# Top-k

**Top-k сэмплирование** — это стохастический метод декодирования, используемый в автогрегрессионных языковых моделях, включая [большие языковые модели](https://systems-analysis.info/wiki/%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8 "Большие языковые модели") (LLM), для генерации текста. Его основная цель — ограничить выборку следующего [токена](https://systems-analysis.info/wiki/%D0%A2%D0%BE%D0%BA%D0%B5%D0%BD "Токен") фиксированным числом ($k$) наиболее вероятных кандидатов, что позволяет избежать генерации маловероятных и часто неуместных слов. Этот метод был одним из первых усовершенствований простого случайного сэмплирования и долгое время являлся популярным способом улучшения когерентности генерируемого текста.

## Простое объяснение

Top-k сэмплирование можно представить как выбор следующего слова не из **всех** возможных вариантов, а только из **ограниченного списка самых вероятных**.

Например, модель дописывает фразу «Сегодня на улице шёл сильный…». В её словаре тысячи продолжений: «дождь», «ветер», «снег», «ливень» — и где-то далеко «квантовый» или случайный символ. Без ограничений генерация текста подвержена различным формам **деградации** (text degeneration). Максимизационные методы (жадное декодирование, beam search) порождают скучный, повторяющийся текст, тогда как чистый сэмплинг без усечения рискует уйти в бессвязность из-за выбора маловероятных токенов из «ненадёжного хвоста» распределения. Top-k в первую очередь борется именно со второй проблемой — отсекая хвост, он снижает риск бессмысленных продолжений, хотя сам по себе не устраняет повторяемость. Top-k говорит: «Возьми только $k$ самых вероятных слов, забудь про остальное, пересчитай вероятности среди них и выбери одно случайно».

Проще говоря:

- модель составляет список наиболее вероятных продолжений;
- берёт только первые $k$ вариантов;
- случайно выбирает один из них.

Чем меньше $k$, тем осторожнее и предсказуемее результат. Чем больше $k$, тем свободнее и разнообразнее генерация.

**Аналогии:**

- **Ресторанное меню:** вместо случайного выбора из 5 000 позиций (риск получить несъедобное) или всегда одного самого популярного блюда (скучно) официант приносит только топ-40 рекомендуемых — выбирайте из разумного списка. Правда, иногда в отсечённой части меню могло оказаться именно то необычное блюдо, которое бы вам понравилось — это цена за предсказуемость.
- **Короткий список финалистов:** из 1 000 кандидатов на работу оставляют 40 лучших резюме, а потом уже проводят собеседования.

## Концепция и математика

На каждом шаге генерации текста стандартная языковая модель выдаёт вероятностное распределение $P(x|x_{1:i - 1})$ по всему словарю $V$. Top-k сэмплирование модифицирует этот процесс следующим образом:

- **Отбор кандидатов:** Из всего словаря выбирается подмножество $V^{(k)}$, состоящее из $k$ токенов с наивысшими вероятностями.
- **Отсечение:** Логитам (сырым предсказаниям модели до применения Softmax) всех токенов, не вошедших в $V^{(k)}$, присваивается значение $- \infty$, что после нормализации даёт вероятность строго равную 0.
- **Перераспределение (нормализация):** Вероятности оставшихся $k$ токенов масштабируются так, чтобы их новая сумма была равна 1.
- **Выборка:** Следующий токен случайным образом выбирается из этого нового, усечённого распределения.

Таким образом, Top-k вводит **жёсткий порог** по количеству кандидатов: слова с рангом вероятности ниже $k$ никогда не будут выбраны.

### Влияние параметра $k$

- **Маленькое $k$ (например, $k = 5$ – $10$):** Делает генерацию более **консервативной** и **предсказуемой**. Модель выбирает только из очень ограниченного набора наиболее вероятных слов. Это повышает когерентность, но может привести к повторяющемуся и скучному тексту.
- **Большое $k$ (например, $k = 50$ – $100$):** Увеличивает **разнообразие** и **креативность** текста, так как в выборку попадает больше вариантов. Однако это также повышает риск включения менее релевантных или неуместных токенов.
- **Граничные случаи:**
  - **$k = 1$:** Эквивалентно **жадному декодированию (greedy decoding)**. Модель всегда выбирает самый вероятный токен.
  - **$k$ = размер словаря:** Эквивалентно стандартному сэмплированию из полного распределения, без отсечения.

## Историческое значение

Top-k сэмплирование как метод декодирования было одним из ранних успешных применений в работе Ангелы Фан и её коллег (2018) «Hierarchical Neural Story Generation», где авторы использовали top-k random sampling (с $k = 10$) в системе иерархической генерации историй и показали, что такая стратегия существенно эффективнее beam search и полного случайного сэмплирования, которое рискует вносить маловероятные слова.

Однако ключевой работой, которая систематически проанализировала проблему **деградации текста** и показала, что truncation-методы, включая top-k, существенно улучшают качество генерации, стала статья Holtzman et al. (2019) «The Curious Case of Neural Text Degeneration». При этом авторы предложили **top-p (nucleus sampling)** как более адаптивную альтернативу top-k, показав по своей HUSE-метрике, что nucleus sampling даёт лучшие результаты среди сравниваемых стратегий.

Например, в ранних демонстрациях и рекомендациях для [GPT-2](https://systems-analysis.info/wiki/GPT "GPT") широко использовалось значение \`top_k=40\` (оно упоминается в коде OpenAI как «generally a good value»), что помогало генерировать длинные и когерентные тексты.

## Сравнение с другими методами декодирования

### Top-k vs. Top-p

Top-k был во многом дополнен, а в ряде задач заменён более продвинутым методом — **[Top-p](https://systems-analysis.info/wiki/Top-p "Top-p") (nucleus) сэмплированием**.

- **Главный недостаток Top-k — его неадаптивность.** Фиксированное значение $k$ не учитывает форму вероятностного распределения:
  - Когда распределение **острое** (модель уверена в нескольких токенах), Top-k может искусственно расширить выборку, включив в неё маловероятные кандидаты.
  - Когда распределение **плоское** (модель не уверена и множество токенов имеют схожую вероятность), Top-k может преждевременно отсечь много подходящих вариантов.
  - Кроме того, Top-k жёстко отсекает «хвост» распределения (tail truncation), из-за чего контекстно уместные, но редкие токены могут быть потеряны — метод жертвует потенциальной креативностью ради связности.
- **Top-p**, напротив, **динамически адаптирует** размер выборки, отбирая токены на основе их совокупной вероятности. Это делает его более гибким и надёжным.
- На практике оба метода нередко используются **совместно** как последовательные фильтры: один грубо ограничивает число кандидатов, другой динамически сужает выборку по уверенности модели. Точный порядок их применения зависит от реализации конкретного фреймворка.

### Top-k vs. Температура

- **[Температура](https://systems-analysis.info/wiki/%D0%A2%D0%B5%D0%BC%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D0%B0_(LLM) "Температура (LLM)")** изменяет форму всего вероятностного распределения, но не отсекает токены. Она влияет на относительные вероятности всех кандидатов.
- **Top-k** вводит **жёсткое отсечение**, полностью исключая токены за пределами топ-$k$.

На практике Top-k может использоваться совместно с температурой и Top-p. Точный порядок применения фильтров зависит от фреймворка: например, в Hugging Face Transformers конвейер выглядит как **Температура → Top-k → Top-p**, то есть температура сначала масштабирует логиты ($l^{\prime} = l/\tau$), затем Top-k отсекает длинный «хвост» мусорных токенов, и уже после этого Top-p динамически сужает выборку в зависимости от уверенности модели. При этом отдельные шаги могут пропускаться в зависимости от настроек: если $top\_ k = 0$, шаг Top-k не применяется; если $top\_ p = 1.0$, шаг Top-p не применяется.

## Практическое применение

Несмотря на то что Top-p является более адаптивным методом и часто используется как базовый для открытой генерации текста, универсально лучшего метода декодирования не существует — оптимальный выбор зависит от задачи, модели и приоритетов (качество, скорость, устойчивость). Top-k остаётся широко поддерживаемым параметром во всех основных фреймворках (Hugging Face Transformers, vLLM и др.) и активно применяется как самостоятельно, так и в комбинации с другими методами.

- **Типичные значения:** На практике часто используются значения $k$ порядка десятков токенов (например, 10, 40, 50), но оптимум зависит от модели и задачи.
- **Рекомендации:** Для открытой генерации текста часто предпочитают Top-p. Если используется Top-k, его следует сочетать с умеренной температурой и тщательно подбирать значение $k$ под конкретную задачу. Top-k также удобен как дополнительный «предохранитель» при высокой температуре.
- **Примечание:** Во фреймворках Top-k может сочетаться с **Repetition Penalty** (штрафом за повторы) и параметром `no_repeat_ngram_size`, чтобы предотвратить зацикливание модели на одних и тех же словах из топ-$k$ списка.

## См. также

- [Большие языковые модели](https://systems-analysis.info/wiki/%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8 "Большие языковые модели")

## Литература

### Основополагающие работы

- Fan, A. et al. (2018). *Hierarchical Neural Story Generation*. <a href="https://aclanthology.org/P18-1082/" class="external text" rel="nofollow">ACL Anthology</a>. <a href="https://arxiv.org/abs/1805.04833" class="external text" rel="nofollow">arXiv:1805.04833</a>.
- Holtzman, A. et al. (2019). *The Curious Case of Neural Text Degeneration*. <a href="https://arxiv.org/abs/1904.09751" class="external text" rel="nofollow">arXiv:1904.09751</a> (ICLR 2020).
- Finlayson, M. et al. (2024). *Closing the Curious Case of Neural Text Degeneration*. <a href="https://openreview.net/pdf?id=dONpC9GL1o" class="external text" rel="nofollow">OpenReview:dONpC9GL1o</a> (ICLR 2024).

### Дополнительное чтение

- Meister, C. et al. (2022). *Locally Typical Sampling*. <a href="https://arxiv.org/abs/2202.00666" class="external text" rel="nofollow">arXiv:2202.00666</a> (TACL 2023).
- Su, Y.; Lan, T.; Wang, Y.; Yogatama, D.; Kong, L.; Collier, N. (2022). *A Contrastive Framework for Neural Text Generation*. <a href="https://arxiv.org/abs/2202.06417" class="external text" rel="nofollow">arXiv:2202.06417</a> (NeurIPS 2022).
- O'Brien, S.; Lewis, M. (2023). *Contrastive Decoding Improves Reasoning in Large Language Models*. <a href="https://arxiv.org/abs/2309.09117" class="external text" rel="nofollow">arXiv:2309.09117</a>.
- Shi, C. et al. (2024). *A Thorough Examination of Decoding Methods in the Era of Large Language Models*. <a href="https://aclanthology.org/2024.emnlp-main.489/" class="external text" rel="nofollow">ACL Anthology</a>. <a href="https://arxiv.org/abs/2402.06925" class="external text" rel="nofollow">arXiv:2402.06925</a>.
- Ravfogel, S.; Goldberg, Y.; Goldberger, J. (2023). *Conformal Nucleus Sampling*. <a href="https://arxiv.org/abs/2305.02633" class="external text" rel="nofollow">arXiv:2305.02633</a>.
- Chen, S. J. et al. (2024). *Decoding Game: On Minimax Optimality of Heuristic Text Generation Strategies*. <a href="https://arxiv.org/abs/2410.03968" class="external text" rel="nofollow">arXiv:2410.03968</a> (ICLR 2025).
- Sen, J. et al. (2025). *Advancing Decoding Strategies: Enhancements in Locally Typical Sampling for LLMs*. <a href="https://arxiv.org/abs/2506.05387" class="external text" rel="nofollow">arXiv:2506.05387</a>.
