Как это работает
Метод предложен в работе о деградации нейронной генерации текста и позволяет получать разнообразный текст, отсекая ненадёжный хвост распределения [1]. В отличие от top-k, где набор фиксированного размера, размер ядра здесь динамический.
Пример: вероятности токенов 0,50, 0,30, 0,15 и 0,05, p = 0,9. Первые два дают 0,80 (мало), три дают 0,95 (достаточно), значит выбор идёт из первых трёх токенов, четвёртый отбрасывается.
ядро = минимальный набор токенов, для которого Σ P(токен) ≥ p
Пример
1def nucleus(probs: list[float], p: float) -> list[int]:
2 order = sorted(range(len(probs)), key=lambda i: probs[i], reverse=True)
3 chosen, total = [], 0.0
4 for i in order:
5 chosen.append(i)
6 total += probs[i]
7 if total >= p:
8 break
9 return chosen
10
11nucleus([0.50, 0.30, 0.15, 0.05], p=0.9) # -> [0, 1, 2]Как применять в тестировании ИИ
Фиксируйте top-p в конфиге прогона вместе с temperature. Значения по умолчанию и рекомендации зависят от провайдера, поэтому сверяйтесь с документацией и не меняйте оба параметра одновременно.
Типичные ошибки
- Менять top-p и temperature одновременно и не понимать, что повлияло.
- Путать top-p с top-k: первый берёт набор по суммарной вероятности, второй — фиксированное число токенов.
- Тестировать на одних параметрах и выпускать с другими.
Частые вопросы
Чем top-p отличается от top-k?
Top-k оставляет фиксированное число самых вероятных токенов, а top-p — переменное количество, суммарная вероятность которых не меньше p. Поэтому top-p подстраивается под уверенность модели.
Что означает top-p = 0,9?
Выбор следующего токена идёт только из самых вероятных токенов, вместе покрывающих не менее 90% вероятности. Остальные, маловероятные, отбрасываются.
Источники
- The Curious Case of Neural Text Degeneration — Holtzman A., Buys J., Du L., Forbes M., Choi Y., ICLR 2020 (arXiv:1904.09751)