Одна из основных проблем при использовании больших языковых моделей это практически неустранимые галлюцинации, возникающие при ответах на вопросы по загруженным документам. Задача "поговорить со своими документами" возникает очень часто, и как правило, она решается с помощью промптинга - вы загружаете вашу статью, договор или другой документ и пишете промпт "Ответь на вопрос по тексту:". Этот способ работает, но у него есть существенные недостатки: размер документа ограничен 1-3 страницами, рандомное возникновение галлюцинаций - неправильных ответов, выглядящих правдоподобно.
В этой статье мы показываем работающие кейсы и синергию подходов, реализованных нами в рамках разработки агента вопросно ответной системы - FractalGPT QA агента. В частности, с помощью алгоритма Fractal answer synthesis и интерпретируемого ИИ нам удается существенно снизить % галлюцинаций и стабильно сильно повысить точность и полноту ответов. Если читать теорию не охота - можно сразу промотать на кейсы. FractalGPT QA агента доступен в закрытой бете, запрос на тест QA системы по базе знаний можно оставить тут.
Что такое RAG
Retrieval-augmented generation дословно переводится как "Генерация с расширенным извлечением" и по сути она частично решает главную проблему языковых моделей - использование для ответов устаревших данных из "весов", что приводит к неправильным ответам. Например, такая проблема часто возникает, когда дать ответ нужно про актуальные события, даты или по некой внешней базе знаний(корпоративной), к которой вообще у модели не могло быть доступа.
Сам по себе подход RAG не новый и существует множество его реализаций - сейчас в основном типичным хорошим решением предлагается нарезать документ на сниппеты (кусочки текста, например разделы, абзацы), добавлять их в индекс, с помощью таких библиотек как LangChain, а затем с помощью векторной базы искать сниппеты, в которых могут находиться ответы и с помощью LLM (ChatGPT, GPT-4, локальной модели) генерировать ответ. Такое решение, например предлагается во множестве обзорных роликов, например тут.
Подробнее о подходе RAG можно прочитать на странице доков HuggingFace, недавно на Хабре вышла статья о русскоязычном помощнике, построенном на базе трансформерной модели Saiga (saiga_mistral_7b_lora).
Недостатки Retrieval-Augmented Generation
Прежде, чем отметить недостатки и слабые места вопросно-ответных систем нужно сначала понять общую схему того, как подход работает. Схематично, типичное решение выглядит так:
Нарезать документ на сниппеты, каждый не более чем контекст модели минус промпт токенов
Создать индекс из сниппетов в векторной базе данных (Pinecone, chromadb)
С помощью эмбеддингов OpenAi получить вектора вопроса пользователя
Найти в векторной базе сниппеты, наиболее близкие к вектору вопроса
С помощью LLM (ChatGPT, GPT-4, Gigachat, YandexGPT, FractalGPT LLM, Mistral, Zephyr) сгенерировать конечный ответ на вопрос, используя текст сниппетов
В интернете довольно много туториалов и схемы обычно выглядят так:
![Слайд из презентации о применении Gigachat для ответов по базе знаний Слайд из презентации о применении Gigachat для ответов по базе знаний](https://habrastorage.org/getpro/habr/upload_files/f3a/621/c57/f3a621c57daa6fcd8a68975e64c887b7.jpg)
![Типовая схема ответов по БЗ, источник Типовая схема ответов по БЗ, источник](https://habrastorage.org/getpro/habr/upload_files/b6a/3e8/366/b6a3e8366b01bfc137a14337e29dafcb.png)
Давайте посмотрим что не так с этой схемой:
-
Размер контекста должен быть не более 4096 токенов (порядка 1000 слов на русском языке, 1-2 страницы А4).
Есть модели с большим контекстом: 16k и даже Claude 100k, но этого тоже часто не хватает.
В итоге, если у вам нужно проанализировать реферат, книгу, законы, конструкторскую документацию, регламенты вашей компании и построить на базе этих документов вопросно-ответную систему - этого сделать на текущих LLM не получится, контекст этих документов составляет сотни страниц.
-
Векторные базы ищут плохо.
Наши опыты показывают, что если ваш текст изобилует терминами, является техническим, содержит аббревиатуры(маркировки, номера), названия деталей, статей законов, разделов и тп - то эмбеддинги будут ошибаться и не находить участки с правильным ответом.
-
LLM галлюцинируют в рандомных местах.
Как говаривал Воланд - плохо не то, что LLM галлюцинируют, а то, что они делают это внезапно.
В нашей статье на Хабре об алгоритме Fractal answer synthesis мы разобрали основные причины галлюцинаций - ответы разбросаны по сниппетам, извлеченным из текста, связи между ними нет, сами сниппеты могут нарушать логику и очередность событий (например, если текст с хронологией) из-за разрывов при сплите. А если сниппеты недостаточно хорошо извлечены на 2м шаге - практически точно в ответе будет правдоподобная галлюцинация.
-
Промт инжиниринг нестабилен.
Мы также проверяли что будет, если с помощью промтов мы будем говорить модели "Отвечай только по тексту, не искажай термины" и другие подобные промты для снижения галлюцинаций или для управления длиной и структурой ответа.
К сожалению работают промты нестабильно - иногда они улучшают ответ и его полноту, но могут приводить и к галлюцинациям, это требует дальнейшего изучения именно в сеттинге retrieval.
Как апгрейдим RAG
Типичные, перечисленные выше проблемы Retrieval-Augmented Generation мы пытались решить еще в августовской статье с релизом QA системы с ограниченным функционалом - вопросы можно было задавать только по теме нейросетей и ML, Ai.
Нам удалось исправить и улучшить результаты у всех 3х причин плохих ответов в RAG системах: недавно мы завершили тесты своих собственных обученных моделей.
В целом, апгрейд RAG сделан следующий:
-
Внедрили Fractal answer synthesis.
Обучили несколько своих моделей решать универсальную задачу извлечения графовой структуры текста(по сути "извлечения знаний") - это позволяет находить неочевидные связи между структурными элементами статей, инструкций и различных регламентов, дисклеймеров: связи устанавливаются на разных уровнях, начиная от предложений и заканчивая темпоральными, логическими, причинно-следственными(NLI задача), онтологическими (часть-целое, common sense, отношения между сущностями, учет связей таксономии "входит в", часть множества, цели, принадлежность, вложенность)
-
Сделали собственный векторный поиск.
Сильно доработали подход Pinecone и других векторных баз - наше решение по метрикам близости гораздо лучше находит "близкие" по смыслу тексты с учетом конкретной предметной области. Работает поиск терминов, жаргона, например вы можете своими словами описать термин в вопросе и система поймет это (пример ниже с РИД - результатом интеллектуальной деятельности).
При этом модель достаточно универсальная.
Проверяем на кейсах документов
Давайте проверим как FractalGPT QA агент "прочитывает" pdf документы и действительно ли он понимает когда отвечать нужно, а когда данных для этого недостаточно.
Было проведено тестирование нашей системы на задаче ответа по вопросам лекционного материала (классическое тестирование студентов). Тест состоял из 20 вопросов на тему "Антикоррупционная деятельность". В результате наша система смогла дать правильные ответы на 20/20 вопросов, со 100% точностью, при том, что суммарный объем лекций составил 132 страницы!
Ответы были не только правильными, но и более полными.
![Высокий процент правильных ответов по лекционным материалам Высокий процент правильных ответов по лекционным материалам](https://habrastorage.org/getpro/habr/upload_files/979/691/477/9796914779dff3ac864f38eaa2cee5ea.jpg)
![Правильные ответы на вопросы с вариантами Правильные ответы на вопросы с вариантами](https://habrastorage.org/getpro/habr/upload_files/cc8/ee7/be1/cc8ee7be18ca43d9366efb2a530abbc4.png)
![Тест Тест](https://habrastorage.org/getpro/habr/upload_files/62b/5a4/217/62b5a4217c0c8fb0ff5fd46300272068.png)
Кейсы ниже с ответами по документам были сделаны на общедоступных pdf файлах, скачать их можно по ссылкам: гражданском кодексе РФ с изменениями (19 страниц, т.к. в бете есть лимит), лекции по нечеткой логике, статье о конструкторской документации на изделия машиностроения с сайта extxe.com.
Почему эти документы? - Они сложные и на них даже лучшие LLM часто галлюцинируют.
![Вопрос с термином: ноу-хау написано не совсем верно, но ответ все равно есть Вопрос с термином: ноу-хау написано не совсем верно, но ответ все равно есть](https://habrastorage.org/getpro/habr/upload_files/349/69d/23d/34969d23dd0538caaf7f47f66375e4c7.png)
На вопрос "Является ли Чатгпт автором результата интеллектуальной деятельности, если он сгенерировал некий текст" - оригинальный ChatGPT срывается и начинает отвечать не по тексту а сам(даже промт не помог), а FractalGPT дает верный ответ по тексту загруженного документа.
![Вопрос по объекту (Чатгпт) о котором в тексте нет информации Вопрос по объекту (Чатгпт) о котором в тексте нет информации](https://habrastorage.org/getpro/habr/upload_files/e4a/c3c/ffa/e4ac3cffa80b9d27030d00e3bc681f62.png)
Очень важно правильно формулировать вопрос - в кейсе ниже в вопросе "О чем гласит подпункт в редакции, введенной в действие с 1 октября 2014 г ?" нет уточнения какой именно подпункт имеется ввиду. Если такое уточнение дать, то ответ будет верным. ("О чем гласит подпункт в редакции, введенной в действие с 1 октября 2014 г, там где про РИД в сложном объекте ?")
![Уточнение к вопросу позволяет получить правильный ответ, система находит нужный раздел Уточнение к вопросу позволяет получить правильный ответ, система находит нужный раздел](https://habrastorage.org/getpro/habr/upload_files/835/d03/e03/835d03e03332cefb4f34068b0b97fba6.png)
![В тексте есть несколько одинаковых дат и не ясно какая имеется ввиду в вопросе В тексте есть несколько одинаковых дат и не ясно какая имеется ввиду в вопросе](https://habrastorage.org/getpro/habr/upload_files/8cf/c1e/714/8cfc1e714ca82485f4158d8ef452a352.png)
Теперь зададим вопрос по конструкторской документации - и здесь ответы достаточно хорошие и полные, с учетом терминов, специфичных для данной отрасли.
![Вопрос сопоставление: правильно сравниваются 2 вида чертежей Вопрос сопоставление: правильно сравниваются 2 вида чертежей](https://habrastorage.org/getpro/habr/upload_files/b24/90b/d5f/b2490bd5f36f986c1eac9358b7070f86.png)
![Вопрос на онтологию "принадлежность": перечислены шифры документов Вопрос на онтологию "принадлежность": перечислены шифры документов](https://habrastorage.org/getpro/habr/upload_files/583/a3c/740/583a3c7401257d4766ff5202e31a6b72.png)
Очень важно получать ответы без галлюцинаций и в образовательной деятельности - для студентов, преподавателей, ученых, аналитиков. Только представьте, что студенту ответ дается неверным - это вызовет не просто скандал, а подорвет весь смысл изучения и проверки своих знаний.
Наше решение RAG хорошо справляется с символьными вопросами. Обратите внимание, что первый вопрос "И или Л будет высказывание о событии до начала события?" является вопросом на обобщение и логическому выводу из знаний, содержащихся в тексте - прямого ответа на него в документе нет - поэтому корректное поведение это не делать никакого вывода(в жизни мы часто делаем такое обобщение, но это тема отдельной статьи - о тех случаях, когда это делать нужно строго по правилам той отрасли, которую мы обсуждаем). Однако, если привести конкретный пример из документа, то ответ уже можно получить вполне конкретным.
![Система старается не делать предположений, следующих из текста документа Система старается не делать предположений, следующих из текста документа](https://habrastorage.org/getpro/habr/upload_files/27a/984/b0d/27a984b0d7fcfac9d4dab388559c5752.png)
Недостатки типичного RAG ярко видны на научных вопросах - "Что такое молекулярные эффекты оксида азота" - как видим, система, использующая ChatGPT и GPT-4 выдает галлюцинацию про четырехмерное пространство(!!), а наша система дает фактический и правильный ответ.
![Неверный ответ по специальной области знаний. Ссылки на страницы не помогают сделать ответ правдивым Неверный ответ по специальной области знаний. Ссылки на страницы не помогают сделать ответ правдивым](https://habrastorage.org/getpro/habr/upload_files/6a4/3b0/4b0/6a43b04b0b2b753c16203f6924e1825f.png)
Кстати, собственный RAG на базе Fractal answer synthesis позволил нам снизить и стоимость запроса в систему в 2 раза относительно средней цены типичных LLM, равной порядка 0.5 центов - у нас она составляет 0.1 сента за 1k токенов на вход и 0.2 цента за 1k токенов на выход генерации.
![Сравнение цен за 1к токенов, данные https://tokenizer.botmind.pro можно подсчитать количество токенов по каждой модели и стоимость Сравнение цен за 1к токенов, данные https://tokenizer.botmind.pro можно подсчитать количество токенов по каждой модели и стоимость](https://habrastorage.org/getpro/habr/upload_files/c05/b2d/011/c05b2d01166c8a9abf5dc6ec66008d2c.png)
Как потестить
FractalGPT QA агент вышел в закрытую бету - вы можете оставить заявку на демо заполнив форму.
Больше новостей в нашем чате по FractalGPT: https://t.me/fractal_gpt
Подробнее о мультиагентной системе.
Комментарии (4)
vagon333
07.11.2023 01:11Тенденция - стартапы создают продукты на базе AI моделей или AI сервисов, а затем крупные поставщики AI сервисов создают аналогичный функционал, уничтожая стартапы (спасибо за идеи).
Например, OpenAI API есть Fine-tuning, в котором сделал нечто похожее на ваше решение - дообучение модели (GPT3.5/4.0) на внутренних (ваших) документах. fine-tuning
Сложно сказать, насколько удачно их реализация расширения модели, но есть.
Вы описали proprietary решение, но опасность работы с вами - вы небольшой поставщик, можете закрыть бизнес с бОльшей вероятностью чем крупный.Резюмируя: красивое решение, но бизнес завязывать на ваше решение я бы побоялся.
mechkladenets
07.11.2023 01:11Я согласен в целом с вашей аргументацией.
А сегодня OpenAi выпустил на своем DevDay еще и обновление модели и поддержку RAG официально (хотя она там была и ранее).
Но все же наше решение лучше минимум по тонкости настройки под клиента и установке в контур заказчика без утечек данных.
Можно ответить так: скорее средний бизнес будет выбирать качество и цену, а крупный - надежность. Далее, если нам удастся вырасти в клиентах, в медиа, репутации - то и крупный подтянется и перестанет бояться.
Примеров этому много, и в ИТ индустрии, и в других
k1ng
Не ожидал в конце статьи увидеть свой калькулятор :D приятная пасхалка, спасибо и успехов!
mechkladenets
Это потому, что мы сидим в Телеграм в одном чате, мы там его и увидели)