Top-k и top-p — параметры, ограничивающие, из скольких вариантов модель выбирает следующий токен. Они работают до применения температуры: сначала отсекается хвост маловероятных вариантов, потом среди оставшихся делается случайный выбор. Словарь модели — десятки и сотни тысяч токенов, и эти параметры определяют, какая его часть реально участвует в выборе на каждом шаге.
Чем они отличаются
Top-k оставляет фиксированное число вариантов: например, сорок самых вероятных. Просто и предсказуемо, но не учитывает ситуацию: иногда очевидный вариант один, а иногда их правда сорок.
Top-p (nucleus sampling) оставляет столько вариантов, сколько нужно, чтобы их суммарная вероятность достигла заданной доли — скажем, 0,9. Набор получается плавающим: там, где модель уверена, остаётся один-два варианта; где сомневается — десятки.
Именно из-за адаптивности top-p на практике применяется чаще, а top-k нередко оставляют выключенным.
Если заданы оба. Многие интерфейсы принимают оба параметра сразу, и тогда они применяются последовательно: обычно сначала top-k отрезает фиксированное число кандидатов, затем top-p срезает по накопленной вероятности среди оставшихся. Итог — пересечение двух условий, то есть более узкий из наборов. Задавать оба имеет смысл в одном случае: нужно жёстко ограничить максимум кандидатов независимо от того, насколько плоское распределение выдала модель.
Как выглядит хвост. На каждом шаге модель оценивает весь словарь: несколько первых вариантов набирают основную массу вероятности, а хвост из тысяч токенов делит оставшиеся единицы процентов. Отсечение убирает именно этот хвост — top-k режет по счёту кандидатов, top-p по накопленной вероятности. Большинство диких ошибок генерации — неуместное слово, обрывок другого языка — приходит как раз из хвоста.
Как настраивать
Менять стоит что-то одно: температуру или top-p. Одновременная правка обоих даёт эффекты, которые трудно разделить, и в результате никто не понимает, что на что повлияло.
Связь с температурой — одной фразой. Отбор решает, кто участвует в выборе, а температура — с каким весом; подробности — в отдельной статье.
Рабочий подход: зафиксировать top-p около 0,9 и управлять температурой. Снижать top-p до 0,5–0,7 имеет смысл, когда нужна строгая фактичность и заметны выдумки при уже низкой температуре.
Эти параметры трогают в последнюю очередь. Порядок рычагов по силе эффекта: промпт и примеры, затем выбор модели, затем температура, и только потом top-p и top-k. Значения по умолчанию у провайдеров подобраны на больших объёмах текста и для большинства задач адекватны; выигрыш от тонкой правки отбора обычно меньше, чем эффект одного дополнительного примера в промпте.
При нулевой температуре эти параметры значения не имеют: выбирается самый вероятный вариант независимо от размера набора.
Где это проявляется
Слишком узкий отбор делает текст однообразным: модель повторяет одни и те же обороты, а на длинной генерации может зацикливаться — частично это лечится штрафом за повторы. Механизм зацикливания: когда альтернативы отсечены, самый вероятный токен после самого вероятного контекста — повтор уже написанного, и круг замыкается.
Слишком широкий — открывает дорогу редким и неуместным словам, что особенно заметно на русском тексте: появляются странные формы и заимствования.
При работе с документами и структурированным выводом узкий отбор обычно предпочтительнее: нужна точность, а не разнообразие.
Как подбирать на практике
Порядок такой: зафиксировать температуру на рабочем значении, взять top-p 0,9 и прогнать набор типичных запросов. Затем менять top-p шагами по 0,1 и смотреть, где начинается либо однообразие, либо неуместные слова.
Оценивать надо на своих текстах: на русском языке граница, за которой появляются странные формы, наступает раньше, чем на английском.
Замер — с фиксированным зерном. Выбор случаен: один и тот же запрос при одном и том же отборе даёт разные ответы от запуска к запуску. Чтобы сравнивать значения параметров честно, фиксируют зерно генерации либо прогоняют каждый вариант несколько раз и усредняют. Оценка по одному запуску на значение — это измерение шума, а не параметра.
Типовые пресеты. Извлечение данных, классификация, структурированный вывод: температура 0–0,2, top-p 0,8–0,9 или значение по умолчанию — результатом здесь управляют промпт и схема, а не отбор. Генерация текста: температура 0,7–1,0 при top-p 0,9–0,95. Это стартовые точки, а не оптимумы: граница качества проверяется на своих данных.
Что происходит на краях диапазона
При top-p около 0,3 модель почти детерминирована: текст точный, но шаблонный, и на длинной генерации возможно зацикливание.
При top-p выше 0,95 в набор попадают редкие токены, и на русском это заметно: появляются необычные словоформы, заимствования, иногда обрывки других языков.
Типичные ошибки
Одновременная правка температуры и top-p — эффекты не разделяются.
Настройка на паре примеров вместо проверочного набора.
Перенос значений между моделями: у разных моделей распределения вероятностей различаются, и то же число даёт другой эффект.
Кручение отбора вместо правки промпта. Если модель выбирает не то содержание, причина почти всегда в промпте или данных: отбор управляет формой токенов, а не знанием фактов. Правка промпта сильнее и дешевле.
Ожидание эффекта на коротких ответах. На ответе в одно предложение разница между top-p 0,8 и 0,95 почти незаметна; она проявляется на длинных генерациях, где мелкие ошибки накапливаются. Замерять надо там, где параметр виден.
Частые вопросы
Что менять — температуру или top-p?
Что-то одно. Обычно фиксируют top-p около 0,9 и управляют температурой: так проще понять, что на что повлияло. Одновременная правка обоих параметров даёт неразделимые эффекты.
Имеют ли они значение при нулевой температуре?
Нет. При нулевой температуре выбирается самый вероятный вариант независимо от того, сколько кандидатов осталось после отбора. Настраивать их в этом режиме бессмысленно.
Почему модель повторяет одни и те же фразы?
Одна из причин — слишком узкий отбор: маловероятные, но уместные варианты отсечены, и модель ходит по кругу. Помогает расширение top-p или штраф за повторы, но сначала стоит проверить, не задана ли слишком низкая температура вместе с узким отбором.
Какие значения ставить, если не хочется разбираться?
Оставить top-p по умолчанию у провайдера (обычно в диапазоне 0,9–1,0), top-k не задавать и управлять только температурой: низкой для точных задач, около 0,7–0,9 для генерации. Правка отбора даёт меньший эффект, чем промпт, примеры и выбор модели, — поэтому и трогается последней.
Влияет ли top-p на стоимость и скорость ответа?
Почти нет: отбор происходит внутри одного шага генерации и не добавляет обращений к модели. Косвенный эффект возникает только на длинных генерациях: узкий отбор ведёт к зацикливанию, ответ удлиняется — и вот это уже лишние оплаченные токены.
Почему на маленьких локальных моделях отбор влияет сильнее?
У малых моделей распределение вероятностей более плоское: разница между кандидатами меньше, и в отбор чаще попадают сомнительные варианты. Поэтому неуместный токен у маленькой модели чаще лечится сужением top-p, чем у большой. Проверяется замером на своих текстах.