Галлюцинации — это явление, которое до недавнего времени было привилегией человеческого сознания. Однако, с развитием текстовых генеративных моделей, таких как GigaChat и ChatGPT, возникла возможность наблюдать подобные «иллюзии» и в мире искусственного интеллекта.
Есть случаи, когда галлюцинации генеративной модели вполне уместны. Например, если вы попросите модель сгенерировать детскую сказку, то наличие в ней выдуманных персонажей и событий будет весьма кстати и понравится малышу.
Проблема галлюцинаций генеративных моделей
Совсем по-другому дело обстоит при вопросах, например, касающихся реальных людей или событий. Тут пользователю хочется получить ответ, в первую очередь, основанный на фактах. Но, к сожалению, современные генеративные модели часто искажают или придумывают несуществующие факты в своих ответах. Причем, самое интересное, что делают они это очень искусно, и по ответу зачастую нельзя понять, придумала модель данное событие или оно действительно имело место быть.
Например, недавно ChatGPT придумала сексуальный скандал, а нарушителем указала реального профессора, сославшись на несуществующую статью в известном журнале. Все это оказалось чистейшей выдумкой, а упомянутый профессор никогда не обвинялся ни в чем подобном.
Откуда берутся галлюцинации генеративных моделей
Так почему же большие генеративные модели придумывают несуществующие факты? Все дело в том, что в общении человек основывает свои рассуждения на определенных точках в своей памяти, которые он сам может оценить на достоверность. То есть, если человек упоминает какой-то факт, в котором он не уверен или помнит неточно, он знает об этом и выскажет своему собеседнику неуверенность, используя слова «возможно», «скорее всего» или другие.
Модель же, с другой стороны, не имеет способности оценивать достоверность фактов, которые сохранились в ее весах. Каждое следующее слово генерируется статистически, как наиболее вероятное, при этом, проверять фактологичность получившегося заявления без использования внешних источников знаний ученые пока не научились.
Проблема обрезки знаний
Другой известной проблемой чат-бот моделей является неосведомленность о последних событиях в мире. В моделях GigaChat и ChatGPT, на текущий момент, знания ограничены примерно серединой — второй половиной 2023-го года. Дата ограничения знаний — это дата, когда был сделан этап предобучения моделей. Обо всем, что произошло после этой даты, модель знать не будет. Как известно, этап предобучения — очень ресурсоемкий и длительный по времени. Он может занимать несколько месяцев, при этом в нем используется большой кластер видеокарт. То есть полностью переобучать большую модель — дорого и долго, поэтому отставание по свежести информации есть у всех больших языковых моделей.
Для пользователей это означает, что модель может выдавать информацию, которая уже устарела. Например, на вопрос о последней модели iPhone, чат-бот может выдать информацию про предыдущую.
Решение с помощью RAG
Над решением проблем галлюцинаций и отставания во времени по знаниям в генеративных моделях ученые бьются довольно давно. Одним из подходов к их решению, является RAG (Retrieval-Augmented Generation), то есть генерация, дополненная поисковой выдачей.
В рамках этой статьи мы не будем сильно погружаться в детали реализации исходного подхода. Главное, что авторы предложили вместе с запросом пользователя передавать в модель еще и top-k документов из поисковой выдачи для генерации ответа уже на их основе.
Таким образом, решаются сразу две проблемы: галлюцинация и свежесть знаний. Галлюцинаций удается избежать за счет наличия достоверных фактов в поисковой выдаче, а свежесть знаний достигается за счет свежести индексов, на которых построена поисковая система. Поисковые системы, в свою очередь, научное сообщество уже давно научилось своевременно и эффективно обновлять.
Наша реализация — GigaSearch
Мы в SberDevices вдохновились этим подходом и реализовали свою версию —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)
averkij
10.11.2023 16:38+1Круто. А есть ли примеры как подготовить свою базу знаний и использовать поверх неё GigaChat?
prohor33 Автор
10.11.2023 16:38Привет! Да, есть пример в библиотеке GigaChain (библиотека пока в альфа версии).
rPman
10.11.2023 16:38Как выглядит база данных, которую может использовать гигачат для поиска в ней? Может ли это быть генерируемый на ходу контент (т.е. к примеру использование уже существующего поисковика а точнее сторонний сервис, но работающий со структурированными запросами, например реляционная БД)
Andriljo
10.11.2023 16:38+1Приветствую. Можно сделать простой retrieval с ru_sbert+faiss и выдавать оттуда по запросу/промту ближайшие соседи с банка в промт
rPman
10.11.2023 16:38Не вижу тут ничего простого. Само по себе создание запроса на основе текущего контекста беседы нетривиальная задача, я всего хотел узнать как реализован внутренний поиск у гигачат
Andriljo
10.11.2023 16:38Для меня видимо она тривиальная, потому что я на этом и специализируюсь, примерно так и реализован, даже в статье об этом написано. Концептуально по-крайней мере
rPman
10.11.2023 16:38+1можно надеяться на статью от вас как этим пользоваться, что это такое и т.п.
а то я с ходу получаю неоднозначные результаты, которые показывают что я ничего не понимаю ;)sentence transformer это для генерации векторных представлений знаний (информации, например предложений) как этим можно воспользоваться чтобы делать поиск во внешнюю базу данных, у которой нет построенной базы этих векторов.
Andriljo
10.11.2023 16:38Во внешнюю бд конечно не сделать так, но как описано в статье там внутренняя бд. Если же работаем с внешним поиском, то можно делать запросы в web или отдавать команду сгенерированную самой LLM в внешнюю бд. Команда может быть скриптом или иным другим видом взаимодействия с ней.
rPman
10.11.2023 16:38отдавать команду сгенерированную самой LLM
у вас есть специально обученная llm для генерации запросов веб? есть в доступе?
prohor33 Автор
10.11.2023 16:38+1Привет! Да, конечно, это может быть любая БД или другой источник данных. Пример работы со своим источником данных в библиотеке GigaChain (библиотека пока в альфа версии).
spiel601
10.11.2023 16:38Я так понимаю ваша модель еще не умеет генерировать код?
Просил сгенерировать простейшую функцию на powershell, нейросеть же начала упарываться в SQL и какую то БД вместо работы с AD
prohor33 Автор
10.11.2023 16:38Привет! Кажется, GigaChat предпочитает bash ;) А если серьезно, мы работаем над повышением качества генерируемого кода на разных языках, в том числе и на скриптовом языке powershell. Прошу вас оставить обратную связь, если генерация была неудачная.
tolyod
что то я так и не понял, для поиска нужен специальный промпт или нет?
prohor33 Автор
Привет! Специальный промпт нужен только если используете GigaChat через API и хотите, чтобы GigaChat использовал знания из Вашей поисковой системы.
А если Вы задаете вопрос в GigaChat через https://developers.sber.ru/gigachat/, то можно просто задать вопрос. Правильный промпт с поисковой выдачей сформируется внутри нашего сервиса автоматически, а Вы получите уже готовый ответ.
tolyod
теперь понял
dimwap
На самые невинные вопросы ГигаЧат отвечает: "Что-то в вашем вопросе меня смущает. Может, поговорим на другую тему?"
prohor33 Автор
Привет! Это срабатывает цензор. Если вопрос невинный, стоит попробовать начать новый диалог. Мы работаем над уменьшением количества false positive срабатываний цензора.