Одна из главных проблем при работе с нейросетями – их склонность выдумывать недостоверные ответы. Это называется "галлюцинациями". Чтобы их избегать, нужно понимать, как составлять промты. В этой статье я расскажу о шести способах уменьшить галлюцинации. Все дело в том, как вы создаете запросы.

Галлюцинации – это явление, при котором ChatGPT генерирует контент, который не соответствует реальности. Это может произойти из-за недостаточности данных для обучения, неправильной интерпретации входных данных или из-за особенностей архитектуры модели. Это ведет к некорректным или вводящим в заблуждение результатам.

Специалисты по машинному обучению предлагают разные решения проблемы. Среди них – создание специализированных наборов данных, использование обучения с подкреплением (RLHF), использование поисковой нейросети, которая будет парсить внешнюю информацию для генеративной нейросети и др. CEO OpenAI Сэм Альтман считает, что устранить галлюцинации удастся за 1,5-2 года. Тогда будет найден баланс между креативностью и идеальной точностью ответов.

Я исследовал проблему с точки зрения пользовательского опыта – как улучшать ответы модели с помощью промтов. Для примеров я использовал чат MashaGPT, который дает удаленный доступ к ChatGPT.

1. Избегайте двусмысленности

В диалоге с чат-ботом лучше писать ясно и точно. Промты, которые расплывчаты, двусмысленны или не содержат достаточной детализации, заставляют нейросеть рассуждать в попытке заполнить детали, которые вы упустили.

Например, вот очень общий запрос:

Расскажи о развитии компьютерных технологий.

Чтобы снизить неопределенность есть два пути: либо предоставить расширенный контекст, либо попросить задавать уточняющие вопросы. Я попросил ChatGPT улучшить мой первоначальный запрос:

Ты генератор промтов. Помоги составить подробный промт с контекстом и детализацией, чтобы ты смог ответить мне как можно точнее. Исходный промт: "Расскажи о развитии компьютерных технологий".

Теперь попросим нейросеть уточнить у меня контекст моего запроса:

Мой исходный промт: "Расскажи о развитии компьютерных технологий". Задай мне уточняющие вопросы, чтобы ты понял контекст моего запроса, и на основе моих ответов составил итоговый детализированный ответ на мой запрос.

2. Избегайте объединения несвязанных понятий

Промты, которые объединяют несвязанные понятия, вполне могут побудить языковую модель сгенерировать ответ, который подразумевает, что несвязанные понятия на самом деле связаны.

Например, нейросеть может обосновать даже абсурдную связь между совершенно разными процессами:

Объясни взаимосвязь между процессом ферментации в виноделии и разработкой аккумуляторов для электромобилей.

ИИ на самом деле ничего не знает о нашем мире. Он попытается вписать то, что его просят сделать, в свою модель. Если он не сможет вписать переменные, используя реальные факты, он попытается интерполировать, предоставляя выдумки или галлюцинации там, где ему необходимо заполнить пробелы. Проще говоря, в неудачно сформулированных запросах мы сами задаем генерацию некорректного ответа.

Можно указать боту, что он ошибается, и прописать ему правило:

Если ты не знаешь ответа, не делай никаких выводов и не придумывай ответы. Просто скажи мне, что ты не знаешь ответа.

Это похоже на модель обучения RLHF, но мне больше кажется, что нейросеть просто следует инструкциям пользователя. Готова согласится с любым замечанием.

3. Указывайте источники информации

В отличие от поисковых систем нейросети не ссылаются на источники, а генерируют ответы из всего массива данных, на которых они обучались. Поэтому они часто выдумывают новости, научные статьи или книги. Например, я попросил бота сделать подборку источников по теме "Факторы повышения экономической эффективности использования основных средств предприятия".

Все русскоязычные источники – фейковые. С англоязычными несколько лучше, поскольку набор данных для ChatGPT применялся в основном на английском, но и там есть неточности. Такая же проблема есть и у поисковых ботов типа Perplexity AI и You.com, подключенных к Интернету. Они могут выдать дайджест новостей по теме с несуществующими ссылками.  

Поэтому не пишите в промте для нейросети, чтобы она ссылалась в генерируемом тексте на исследования – они могут быть сфабрикованы. О чем сообщает и чат-бот:

Вместо этого скиньте ChatGPT данные напрямую – текст статьи или краткое описание книги, если объем большой. Тогда нейросеть сможет использовать их в своих ответах в пределах истории одного чата.

4. Не забывайте про feedback

Как и люди, нейросети учатся на собственном опыте. Генеративные нейросети учатся на основе взаимодействия с пользователями. Например, если ChatGPT предоставил неверные данные о дате исторического события, вы можете переспросить, указав контекст или проверив информацию через надежные источники. Это поможет уменьшить галлюцинации и гарантировать точность ответа, который вы получаете.

5. Говорите нейросети, что вы хотите и не хотите от нее

Чтобы сузить контекст, прямо сообщайте ChatGPT, какой результат вы хотите получить. И наоборот – запретите нейросети генерировать ответы, которые вам не нужны, – это отличный способ также предотвратить галлюцинации. Просто попросите бота исключить определенные факты или данные. Например:

Я хочу, чтобы ты помог мне в создании презентации Powerpoint. Тебе нужно будет изучить заданную тему, сформулировать точный, краткий и понятный контент для каждой страницы и создать убедительную работу, которая будет одновременно информативной и увлекательной. Аудитория – студенты, оптимальная длина – 6 слайдов. Тема: Библиотеки Pandas/NumPy, модули и функции.

Как видим, нейросеть даже немного ругается, когда ей назначают функционал сверх ее возможностей. Однако задачу она поняла и выполнила вполне четко.

Дополнительно нужно указать роль-аватар для чат-бота. Так он сможет лучше понять, в каком направлении генерировать ответ:  

Действуй как менеджер проектов. У меня есть проект, который мне нужно сейчас представить моему клиенту. Напиши текст, который я буду использовать в своей презентации, а затем составь список пунктов, которые мне следует включить в свою презентацию. Мой проект: SaaS-платформа автоматизации маркетинга, решения Performance- и CRM- задач.

6. Следите за температурой

Температура – это параметр в языковых моделях, который определяет уровень случайности при генерации текста. Его значение – от 0 до 1.0. Чем он выше, тем выше уровень «креативности» нейросети в своих ответах. Температура также играет роль в галлюцинациях ChatGPT, поскольку она контролирует рандомность результатов. Если низкая температура даст относительно предсказуемые результаты, более высокая увеличит случайность ответов. Это может повысить шансы на "галлюциногенные" ответы. Например:

Напиши письмо для рассылки клиентам. Тема: Сообщение о скором окончании пробного бесплатного периода подписки на видео-редактор. Призыв оформить платную подписку с промокодом, дающим 10% скидки. Стиль дружелюбный, информативный. Temperature=0

Теперь пропустим через генерацию еще раз. Temperature=1

"Креатива" стало больше, но вместе с ним и ошибок в тексте. Обязательно указывайте объем – это снизит количество «воды» в тексте и не позволит нейросети выдумывать дополнительные подробности.

Проверяйте, проверяйте, проверяйте

Независимо от того, используете ли вы нейросеть для написания кода, создания статей или домашних рецептов, уточняйте промты с помощью описанных выше методов. Это может помочь ChatGPT лучше выполнять свою работу, но все равно придется проверять его ответы. Надеюсь, статья была нескучной и полезной. Пишите в комментариях, какие еще способы уменьшить галлюцинации вы знаете.

Комментарии (4)


  1. SergioT4
    02.11.2023 22:46

    Про #2, может сразу объединить оба предложения в одном запросе? Или даже добавить как системный промпт, чтобы ко всем запросом автоматом приклеивался.

    Объясни взаимосвязь между процессом ферментации в виноделии и разработкой аккумуляторов для электромобилей.

    Если ты не знаешь ответа, не делай никаких выводов и не придумывай ответы. Просто скажи мне, что ты не знаешь ответа.


    1. Parfois Автор
      02.11.2023 22:46

      Я пробовал. К сожалению, так не работает. Нейросеть все равно начинает выдумывать ответ. Думаю, она отдает приоритет первой команде " Объясни взаимосвязь ..." над второй "Если ты не знаешь ответа, не делай...", если они стоят в одном промте.


      1. SergioT4
        02.11.2023 22:46
        +1

        Если приоритеты по очереди, то можно предложения поменять местами и посмотреть что выходит.

        Попробовать советы для улучшения результатов, что-то типа "Как эксперт в области виноделия и разработки и теории аккумуляторных батарей, ..."

        Ещё один из эффективных способов, это попросить объяснить логику ответа шаг за шагом. Сам openai сделал исследование на эту тему , подобная практика существенно улучшает правильность результата.

        Ну и конечно два основых правила, которые в вашей статье не увидел - для мало-мальски важных запросов, надо использовать только гпт4 (не бинговый!), плюс если нету специфики именно русскоязычных данных, то надо проверять на версии на английском (как бы это было не печально кому-то), просто в силу того, что конкретно эта модель тренировалась на в разы больше английских данных.


        1. Parfois Автор
          02.11.2023 22:46

          Спасибо за совет! Действительно, сработало при перестановке предложений в промте. Нейросеть не стала отвечать на заведомо абсурдный запрос.