Пример фактологически точного ответа GigaSearch
Пример фактологически точного ответа GigaSearch

Галлюцинации — это явление, которое до недавнего времени было привилегией человеческого сознания. Однако, с развитием текстовых генеративных моделей, таких как GigaChat и ChatGPT, возникла возможность наблюдать подобные «иллюзии» и в мире искусственного интеллекта.

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

Проблема галлюцинаций генеративных моделей

Совсем по-другому дело обстоит при вопросах, например, касающихся реальных людей или событий. Тут пользователю хочется получить ответ, в первую очередь, основанный на фактах. Но, к сожалению, современные генеративные модели часто искажают или придумывают несуществующие факты в своих ответах. Причем, самое интересное, что делают они это очень искусно, и по ответу зачастую нельзя понять, придумала модель данное событие или оно действительно имело место быть.

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

Заголовок статьи The Washington Post о галлюцинации ChatGPT
Заголовок статьи The Washington Post о галлюцинации ChatGPT

Откуда берутся галлюцинации генеративных моделей

Так почему же большие генеративные модели придумывают несуществующие факты? Все дело в том, что в общении человек  основывает свои рассуждения на определенных точках в своей памяти, которые он сам может оценить на достоверность. То есть, если человек упоминает какой-то факт, в котором он не уверен или помнит неточно, он знает об этом и выскажет своему собеседнику неуверенность, используя слова «возможно», «скорее всего» или другие.

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

Проблема обрезки знаний

Другой известной проблемой чат-бот моделей является неосведомленность о последних событиях в мире. В моделях GigaChat и ChatGPT, на текущий момент, знания ограничены примерно серединой — второй половиной 2023-го года. Дата ограничения знаний — это дата, когда был сделан этап предобучения моделей. Обо всем, что произошло после этой даты, модель знать не будет. Как известно, этап предобучения — очень ресурсоемкий и длительный по времени. Он может занимать несколько месяцев, при этом в нем используется большой кластер видеокарт. То есть полностью переобучать большую модель — дорого и долго, поэтому отставание по свежести информации есть у всех больших языковых моделей.

Для пользователей это означает, что модель может выдавать информацию, которая уже устарела. Например, на вопрос о последней модели iPhone, чат-бот может выдать информацию про предыдущую.

Решение с помощью RAG

Над решением проблем галлюцинаций и отставания во времени по знаниям в генеративных моделях ученые бьются довольно давно. Одним из подходов к их решению, является RAG (Retrieval-Augmented Generation), то есть генерация, дополненная поисковой выдачей.

Схема работы RAG. MIPS — Maximum Inner Product Search, то есть поиск максимального скалярного произведения векторов.
Схема работы RAG. MIPS — Maximum Inner Product Search, то есть поиск максимального скалярного произведения векторов.

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

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

Наша реализация — GigaSearch

Мы в SberDevices вдохновились этим подходом и реализовали свою версию —GigaSearch.

Схема работы GigaSearch
Схема работы GigaSearch

Работает эта система следующим образом. Опционально, в зависимости от того, к какой системе подключается GigaSearch, запрос пользователя может проходить через классификатор, обученный выявлять фактологические вопросы. В этом случае, мы используем GigaSearch только для них. На остальные, не фактологические запросы, можно отвечать напрямую GigaChat-ом без использования поиска.

Классификатор основан на кодировщике ruElectra, который недавно обучили наши коллеги из RnD. Кстати, эта модель опубликована и доступна публично.

Далее мы подкладываем в промпт GigaChat-а топ-3 документа из нашей поисковой системы. Поиск построен поверх закрытой базы знаний.

Схема добавления результатов поисковой выдачи в промпт
Схема добавления результатов поисковой выдачи в промпт

Таким образом, GigaChat «видит» не только диалог с пользователем, но и релевантные документы с фактами, которые помогают ответить фактологически точно и учесть последние события в мире.

GigaSearch уже встроен в GigaChat Web, поэтому каждый желающий может «пощупать» систему своими руками, для этого нужно перейти по ссылке https://developers.sber.ru/gigachat/ и зайти в свой аккаунт (при первом входе необходимо зарегистрироваться).

Также GigaSearch скоро появится в ботах в телеграме: @gigachat_bot и в ВК: vk.me/gigachat. Им можно написать напрямую или добавить в ваш чат с друзьями и коллегами.

Как мы уже упоминали, GigaSearch включается при ответе на открытые фактологические вопросы.

Например:

GigaSearch в Салюте

GigaSearch с недавнего времени также отвечает на фактологические вопросы в нашем ассистенте Салют, поспрашивать его уже можно на всех умных устройствах Sber. 

Что дальше?

Качество ответов GigaSearch складывается из качества работы нескольких компонентов:

  • Качество поисковой системы;

  • Количество, корректность и актуальность данных в базе знаний;

  • Умение GigaChat использовать релевантный материал;

  • Умение GigaChat отвечать из параметрической памяти в случае нерелевантной выдачи.

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

Благодарности

Хочу сказать большое спасибо коллегам, которые участвовали в этом проекте. Все получилось только благодаря вашему позитивному заряду и нескончаемой энергии!

На связи с вами

Также приглашаю вас в наш Telegram-канал Salute AI, в котором мы с коллегами начали делиться наработками в области машинного обучения и другими рабочими моментами. А в соответствующем чатике Salute AI Community можно напрямую поспрашивать про всё это и просто пообщаться.

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


  1. tolyod
    10.11.2023 16:38

    что то я так и не понял, для поиска нужен специальный промпт или нет?


    1. prohor33 Автор
      10.11.2023 16:38
      +2

      Привет! Специальный промпт нужен только если используете GigaChat через API и хотите, чтобы GigaChat использовал знания из Вашей поисковой системы.
      А если Вы задаете вопрос в GigaChat через https://developers.sber.ru/gigachat/, то можно просто задать вопрос. Правильный промпт с поисковой выдачей сформируется внутри нашего сервиса автоматически, а Вы получите уже готовый ответ.


      1. tolyod
        10.11.2023 16:38
        +1

        теперь понял


      1. dimwap
        10.11.2023 16:38

        На самые невинные вопросы ГигаЧат отвечает: "Что-то в вашем вопросе меня смущает. Может, поговорим на другую тему?"


        1. prohor33 Автор
          10.11.2023 16:38

          Привет! Это срабатывает цензор. Если вопрос невинный, стоит попробовать начать новый диалог. Мы работаем над уменьшением количества false positive срабатываний цензора.


  1. averkij
    10.11.2023 16:38
    +1

    Круто. А есть ли примеры как подготовить свою базу знаний и использовать поверх неё GigaChat?


    1. prohor33 Автор
      10.11.2023 16:38

      Привет! Да, есть пример в библиотеке GigaChain (библиотека пока в альфа версии).


  1. rPman
    10.11.2023 16:38

    Как выглядит база данных, которую может использовать гигачат для поиска в ней? Может ли это быть генерируемый на ходу контент (т.е. к примеру использование уже существующего поисковика а точнее сторонний сервис, но работающий со структурированными запросами, например реляционная БД)


    1. Andriljo
      10.11.2023 16:38
      +1

      Приветствую. Можно сделать простой retrieval с ru_sbert+faiss и выдавать оттуда по запросу/промту ближайшие соседи с банка в промт


      1. rPman
        10.11.2023 16:38

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


        1. Andriljo
          10.11.2023 16:38

          Для меня видимо она тривиальная, потому что я на этом и специализируюсь, примерно так и реализован, даже в статье об этом написано. Концептуально по-крайней мере


          1. rPman
            10.11.2023 16:38
            +1

            можно надеяться на статью от вас как этим пользоваться, что это такое и т.п.
            а то я с ходу получаю неоднозначные результаты, которые показывают что я ничего не понимаю ;)

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


            1. Andriljo
              10.11.2023 16:38

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


              1. rPman
                10.11.2023 16:38

                отдавать команду сгенерированную самой LLM

                у вас есть специально обученная llm для генерации запросов веб? есть в доступе?


    1. prohor33 Автор
      10.11.2023 16:38
      +1

      Привет! Да, конечно, это может быть любая БД или другой источник данных. Пример работы со своим источником данных в библиотеке GigaChain (библиотека пока в альфа версии).


  1. spiel601
    10.11.2023 16:38

    Я так понимаю ваша модель еще не умеет генерировать код?

    Просил сгенерировать простейшую функцию на powershell, нейросеть же начала упарываться в SQL и какую то БД вместо работы с AD


    1. prohor33 Автор
      10.11.2023 16:38

      Привет! Кажется, GigaChat предпочитает bash ;) А если серьезно, мы работаем над повышением качества генерируемого кода на разных языках, в том числе и на скриптовом языке powershell. Прошу вас оставить обратную связь, если генерация была неудачная.