Таким вопросом я задался после просмотра розыгрыша от Яндекса. У ведущего был список участников [номер имя] и он просил Алису назвать случайное число от 1 до 6296. Было 15 попыток и среди ответов не было чисел меньше 100, что смутило ведущего, он даже хотел поменять диапазон, но команда поддержки ему не разрешила. Посчитаем, с какой вероятностью могло выпасть число от 1 до 99, получим 0.78%. Немного. Но вопрос о случайности чисел меня заинтересовал.
p_single = (6296 - 99) / 6296prob_all = p_single ** 15
У меня нет желания генерировать числа по 1, поэтому я попросил Алису написать сразу 1000 чисел в диапазоне от 1 до 1000. Получив ответ, что
Сгенерировать и вывести 1 000 случайных чисел от 1 до 1 000 прямо здесь технически сложно — список получится очень длинным (займёт много места в чате и будет неудобен для восприятия).
Алиса отказалась выдавать 1000 чисел, согласилась на 500 чисел от 1 до 500. Я ожидал, что чисел меньше 10 не будет.
Первый раз (ответ 1) она мне вывела 340 чисел, среди них ни одного от 1 до 9. Интересно, подумал я, отложил это все.
Вернувшись через неделю, я начал писать эту заметку и в том же чате с Алисой попросил сгенерировать еще 500 чисел. На этот раз чисел было 811 (ответ 2) и генерация остановилась на запятой, как будто сработал какой-то механизм LLM типа max_new_tokens, не берусь утверждать.
LLM генерируют ответ по токенам, и у них есть лимит (например, 4096 токенов). Когда ответ обрывается на запятой или на незаконченном числе – это почти гарантированно достижение лимита, а не «случайность».
Следующий ответ был из 812 (ответ 3) чисел и последним было число 3, то есть меньше 10. Увидев 3, я подумал, что ничего интересного из этого не выйдет и сделал еще 2 генерации. Ответ 4 оказался точно таким же, как ответ 3, только оказалось, что число 3 на самом деле было числом 356, то есть в прошлом ответе снова сработал механизм остановки, который я не заметил и который обрезал число.
Ответ 5 был из 812 чисел и снова оборвался на запятой.
Для сравнения привожу псевдослучайную последовательность для randomint в питоне.
random.seed(42) python_random = [random.randint(1, 500) for _ in range(500)]
Судя по 5 запросам, Алиса пропускает не просто первые 10-100 (в случае розыгрыша) чисел, а целые диапазоны.
Здесь и далее пробую новый промт:
выведи ровно 500 случайных чисел с равномерным распределением от 1 до 500 через запятую
Получаю 807 чисел, в конце 7, но явно снова сработал механизм остановки.
А открыв новый чат и повторив запрос, я получил все числа от 1 до 500 включительно по порядку, т.е. не случайную последовательность.
Пробую другие модели. Гигачат, режим “Гига”. Мы с ним начали торговаться, 500 чисел он не стал делать из-за ограничений ответа
Я не могу вывести ровно 500 случайных чисел в одном сообщении, так как ответ будет обрезан из-за ограничений на длину сообщения.
а на 100 числах он признался, что
Я не могу сгенерировать список из 100 случайных чисел, так как у меня нет доступа к инструменту генерации случайных чисел.
Deepseek. Режим без размышлений и поиска.
Вполне неплохо. Вот только если спросить его про генератор псевдослучайных чисел, то он ответит:
Да, у меня есть доступ к генераторам псевдослучайных чисел (ГПСЧ) через вычислительную среду, в которой я работаю.
Уточняю у Алисы и она отвечает:
Конечно, у меня есть возможность генерировать псевдослучайные последовательности чисел 🎲
Хотя технически я не храню внутреннее состояние генератора (как, например, в криптографических системах у Алисы из примера с подписью Лэмпорта), я могу создавать равномерно распределённые, случайные на вид последовательности по твоему запросу — хоть числа, хоть буквы, хоть комбинации.
Например, вот 10 случайных чисел от 1 до 100:
42, 17, 89, 3, 55, 73, 21, 96, 14, 68
Прошу сгенерировать 100 случайных чисел от 1 до 100, снова получаю все числа от 1 до 100, но уже в случайном порядке
47, 13, 89, 3, 62, 75, 28, 91, 19, 54,7, 33, 66, 84, 22, 5, 98, 41, 77, 16,59, 38, 82, 26, 71, 11, 94, 45, 63, 30,79, 1, 50, 86, 35, 68, 24, 92, 43, 57,18, 73, 39, 87, 31, 64, 9, 52, 76, 29,81, 14, 60, 37, 95, 23, 67, 48, 8, 55,70, 34, 83, 12, 78, 46, 61, 20, 90, 36,69, 27, 85, 10, 53, 72, 40, 88, 15, 65,49, 74, 25, 97, 32, 58, 44, 80, 17, 6,93, 21, 56, 42, 99, 2, 51, 96, 4, 100

GPT и другими я не пользуюсь, если кто хочет поэкспериментировать, тут оставил блокнот, нужно только вставить ответ нейросети.
Я не специалист по LLM, поэтому возможные причины такого поведения Алисы приведу со слов DeepSeek:
Почему нейросеть избегает чисел от 1 до 9?
-
Токенизация: В большинстве LLM числа 1–9 — это отдельные токены, а числа 10–500 часто разбиваются на два токена (например, “47” → [“47”] или [‘4’,‘7’] в зависимости от модели). Модель могла выучить, что «случайные числа» чаще выглядят как двузначные или трёхзначные.
-
Смещение в обучающих данных: В интернете при перечислении «случайных чисел» люди редко пишут однозначные числа (например, в примерах кода или в учебных задачах чаще фигурируют числа от 10 до 100).
-
Иллюзия случайности: Модель могла оптимизировать ответ, чтобы он казался человеку «более случайным» (однозначные числа воспринимаются как менее случайные в контексте большого диапазона).
По полученным результатам, я бы не стал использовать Алису для розыгрышей. И не стал бы просить генерировать набор чисел в одном чате.
Еще раз обращаю внимание, что эксперимент был немного изменен от того, что был в розыгрыше, в том плане, что все числа помещались в 1 ответ. Возможно, если запросы делать по 1, результат будет другим.
Пока алгоритмы те же, я бы старался оказываться не в начале списка.
ссылка на оригинал статьи https://habr.com/ru/articles/1047342/