К вопросу о надежности искусственного интеллекта в бизнесе
Занимаюсь практическим применением больших языковых моделей в бизнесе. При этом, постоянно приходится слышать, что искусственный интеллект нельзя использовать в бизнесе, потому что «галлюцинации». Откуда взялось это расхожее мнение, что на самом деле и какие есть простые и эффективные способы повышения надежности, обо всем этом попробую сейчас рассказать.
Ох уж эти галлюцинации! Кто только не попался на эту удочку. От рядовых пользователей до целых коллективов с академическим статусом, публикующихся на arxiv. Наиболее яркий пример тому: Alice in Wonderland: Simple Tasks Showing Complete Reasoning Breakdown in State-Of-the-Art Large Language Models Эта же статья не так давно обсуждалась на Хабре Ахиллесова пята ИИ: простая задача, обнажившая слабости всех языковых моделей
Если хотите разобраться с этим, забудьте на время это слово галлюцинации и обратите внимание на другое слово семплирование. Что это такое. Большая языковая модель выдает вам ответ на ваш вопрос по частям, которые называются токенами. Это не слово и не буква, а нечто среднее между ними. На каждом шаге модель выбирает из нескольких возможных вариантов продолжения. Варианты не равны между собой. Какие-то считаются более подходящими, какие-то менее. Например, у вас может быть вариант 1 с рейтингом 70%, вариант 2 с рейтингом 29% и вариант 3 с рейтингом 1%. Это будет означать, что в 70 случаях из 100 для продолжения будет выбран вариант 1, в 29 случаях вариант 2 и в 1 случае вариант 3. На практике это может означать, что вы получите пресловутую галлюцинацию в 30 случаях из 100. Более того, в 1 случае из 100 вы получите такую галлюцинацию, о которой будете долго рассказывать всем, кто только будет вас слушать.
Самое важное здесь в том, что семплирование не является органической частью модели. Семплирование это нечто «прикрученное» сбоку. Зачем так сделали, и почему не стали просто выбирать всегда наилучший вариант? Представьте себе, что семплирование отключено и на каждом шаге выбирается наилучший вариант. Вы просите модель рассказать сказку. Она расскажет вам сказку. Возможно даже неплохую. Но она расскажет ее и вам, и Васе, и Пете… И сегодня, и завтра, и послезавтра. Каждый раз одну и ту же сказку. Если речь идет о сказке, то это никуда не годится. С другой стороны, если вам надо решать задачу на логику или математику (а бизнес-задачи чаще всего именно такие), тогда одна «сказка» для всех и всегда, это именно то, что вам нужно.
Провайдеры больших языковых моделей предусмотрели возможность управлять семплированием. Есть две управляющие опции при вызове через API, а у некоторых провайдеров есть еще третья. Вот они:
temperature
top_p
top_k
Самая простая из них top_k. С ее помощью мы можем установить количество рассматриваемых на каждом шагу результатов. Понятно, что если задать top_k=1, то это и будет полным отключением семплирования. Но это слишком просто. В OpenAI, например, считают, что не по пацански просто, поэтому у них такой опции нет. Опция top_p работает сложнее. На каждом шаге из всех возможных кандидатов выбираются самые лучшие один за другим до тех пор пока их суммарный «рейтинг» (или суммарная вероятность, как это чаще называют) не станет больше либо равен установленного порога. Если установить top_p=0.1, то это тоже будет равносильно отключению семплирования, за исключением экзотических случаев, когда у вас будет много кандидатов с низким рейтингом (вероятностью). Например: 0.05, 0.04, 0.03, 0.03… Но это и будет означать, что выбор на этом конкретном шаге почти не играет значения.
Самая замудренная опция temperature. Тут используется логарифмическая функция для изменения изначальных рейтингов. При значении temperature=1 распределение рейтингов (вероятностей) остается неизменным. При значениях выше 1, разница между рейтингами сглаживается, при значениях ниже 1, разница обостряется. Допустим, изначально у вас было два кандидата с рейтингами 60% и 40% (0.6 и 0.4). Вы задаете низкую температуру и разница обостряется, превращается, условно говоря, в 98% и 2% (0.98 и 0.02). Чтобы отключить семплирование, надо установить как можно более низкую температуру. Некоторые провайдеры разрешают указывать temperature=0, другие занимаются буквоедством и не разрешают этого делать (ну да, на значении 0 эта функция не определена). Приходится указывать что-то типа temperature=0.01
Несмотря на свою сложность, опция temperature пользуется наибольшей популярностью. Видимо, в силу прозрачности ассоциации. Высокая температура — бред. Низкая — холодный расчет.
Как видите, в этом смысле управлять моделью не сложнее чем, краном на кухне. Холодное-горячее. Тем удивительнее то, что так много людей обожглось и продолжает обжигаться горячими. Видимо, здесь нет ничей вины. Большие языковые модели были явлены широкой публике в виде чата. Для поболтать-поразвлекаться. Температура в чате была установлена в значение 1. Регулировка температуры отсутствовала (она и сейчас чаще всего отсутствует), дабы не смущать публику логарифмами. Для решения задач на логику это никуда не годилось, но сказочки получались знатные. А если какой-нибудь Вася пробовал чат на логику, то получалось еще лучше! Вася с некоторой, довольно высокой вероятностью получал очень странный результат и него тут же возникало желание поведать об этом всему свету. На его крики приходили Петя и Коля. Проверяли у себя решение задачи на логику. Получали нормальный результат и разгорался жаркий спор, привлекающий все новых и новых участников, из которых кто-то потом становился подписчиком. Business as usual.
Можно сказать, что все мы, кто сейчас занимается внедрением искусственного интеллекта в бизнес, отчасти стали жертвой первоначального маркетингового успеха больших языковых моделей. Спутником этого успеха стал миф о галлюцинациях, с которым теперь приходится бороться.
В истории с галлюцинациями больших языковых моделей большая часть это миф. Но это все же часть. Отключив семплирование, мы получим … Но прежде, чем перейти к тому, что мы получим, хочу обратить ваше внимание на Debate: Sparks versus embers. Здесь два математика обсуждают тему: «Текущие подходы масштабирования LLM достаточны для создания новых методов, необходимых для разрешения основных открытых математических гипотез…» В дебатах есть примечательный момент. Когда условный ИИ-скептик говорит, что в длинных цепочках рассуждений обязательно будут галлюцинации, оппонент ему возражает так: «Послушай, ну мы-то с тобой знаем, что если человеком написана статья в 50+ страниц, то там будут галлюцинации 100%. И что? И ничего, показываем ревьюверам, исправляем. Все это запросто воспроизводится и в искусственном интеллекте. Одна модель проверяет другую…»
Отключив семплирование мы конечно же не получим абсолютного отсутствия галлюцинаций. Оно в принципе недостижимо. Но мы получим уровень галлюцинаций не выше, а скорее всего значительно ниже, чем у человека.
Но и это еще не все. С этим можно еще поработать. В особо ответственных случаях, да, можно будет организовать ревью на нескольких других моделях. Но для основной массы бизнес-задач, я думаю, это будет излишним. Есть более простой и достаточно эффективный метод.
Допустим, мы знаем, что на наших задачах уровень галлюцинаций составляет 1 к 1000 на запрос. Это означает, что на 1 запрос из 1000 будет выдан неверный результат. Если мы делаем около 1000 запросов в год, тогда примерно раз в год модель нам будет подкидывать неприятности. Будем тогда дублировать каждый запрос, т.е. отправлять один и тот же запрос к большой языковой модели дважды. Всякий раз мы будем получать один и тот же ответ, но раз в год ответы будут разными. Тогда мы отправим запрос в третий раз и воспользуемся тем результатом, который встретился в двух случаях из трех. Таким нехитрым приемом, мы хоть и не достигнем абсолюта, но теперь неприятности нас будут ожидать не раз в год, а раз в тысячу лет.
Этот метод хорош тем, что его можно очень просто масштабировать. Если нас не устраивает тысяча лет, можно превратить ее в миллион или миллиард простым повторением запросов. Это, конечно, увеличивает затраты, но тут хочу напомнить, что бизнес-задачи стоят существенно дешевле, чем развлечения. У вас может быть миллион записей о продажах. Но практически любой запрос на получение статистики даст вам на выходе текст SQL запроса, который уложится в 100 токенов. Текущая цена 100 выходных токенов у модели gpt-4o-mini всего лишь 0.00006 долларов. Т.е. 1000 запросов вам обойдутся в 6 центов, ну, а две тысячи в целых 12. Есть, конечно, еще входные токены, но они стоят в разы меньше. Gpt-4o-mini прекрасно справляется с бизнес-задачами. Но есть, например китайская Deepseek coder v3, которая по утверждениям некоторых работает еще лучше. Так она стоит еще дешевле.
Подведем итоги. Миф о невозможности использования искусственного интеллекта в бизнесе возник на базе маркетингового успеха развлекательного направления. Отключение семплирования дает уровень галлюцинаций не выше, а скорее ниже, чем у людей. И есть простые методы получения любого желаемого уровня надежности при использовании больших языковых моделей в бизнесе.