Мы с командой разрабатываем FractalGPT - проект самообучающегося ИИ на базе больших языковых моделей(LLM) и логического вывода (reasoning). В этой статье мы расскажем о разработанном нами новом подходе, который называется fractal answer synthesis. Фрактальный синтез ответа позволяет существенно уменьшить уровень «галлюционирования» LLM и, как следствие, является важным шагом к решению проблемы фактологии г енеративных нейросетей. По сути подход позволяет перейти от простого векторного представления текста(базы знаний) к его фрактальному представлению — более сложной структуре, инкапсулирующей внутри себя дополнительные «смыслы», которые содержатся в тексте. В статье мы кратко описали преимущества и недостатки подхода, показали алгоритм построения «фрактального графа», представили принципиальную схему алгоритма и результаты тестирования на нашей базе знаний — статьях и книгах.
Большие языковые модели (по-русски БЯМ, а в англоязычной литературе LLM - large language models) последнее время стали очень популярными в области обработки естественного языка. Они используются для автоматического перевода, генерации текстов и ответов на вопросы. Эти модели обучаются на больших наборах данных и способны генерировать тексты, которые сложно отличить от текстов, написанных человеком. Одними из наиболее известных LLM(БЯМ) являются ChatGPT и GPT-4 от компании OpenAI.
Но, несмотря на огромную популярность, такие модели довольно сильно страдают от т.н. «галлюцинаций» и отсутствия доступа к актуальной информации, т.к. знания модели ограничены датой ее обучения.
Галлюцинациями, в данном контексте называют ситуацию, когда LLM генерирует текст, который не соответствует реальности, т.е. текст с сильными нарушениями фактологии. Например, нейросеть может придумать детали, факты, имена или события которые не имеют отношения к реальности.
Эта проблема связана с тем, что LLM генерирует текст на основе моделирования вероятности появления следующего токена в последовательности (подробнее о способах генерации в туториале от Huggingface). Но, если контекст не содержит достаточно информации, нейросеть может придумывать несуществующие факты.
Обзор методов решения
Давайте кратко рассмотрим несколько подходов к решению проблемы, которые сейчас активно предлагаются.
Для решения данной проблемы и уменьшения вероятности галлюцинаций, исследователи предлагают несколько методов:
Использование дополнительной модели для поиска информации в документах, с последующей передачей этой информации в генеративную нейросеть.
Обучение моделей на бОльшем количестве данных, а также создание специальных (фактологических) наборов данных.
Использование обучения с подкреплением, на основе оценок поставленных людьми, как это делают в OpenAI (RLHF).
Соединение LLM с моделью мира (это наиболее сложный и перспективный подход, но в данной статье мы его не будем рассматривать из-за объемности).
Мы в нашем проекте FractalGPT используем комбинацию методов: 1-й метод, а также 3-й и 4-й методы, а в данной статье будет рассмотрен первый метод, а именно использование дополнительной поисковой модели. Сам по себе метод совмещения поисковой и генеративной моделей хорошо известен, однако именно он позволяет малыми усилиями добиваться хорошего качества.
Обычно для поиска используются поисковые движки (например Elasticsearch), которые извлекают большое число сниппетов (несколько предложений/слов подряд). После чего используется алгоритм ранжирования, как, например, в этой работе Explain Anything Like I'm Five: A Model for Open Domain Long Form Question Answering - он основан на модели RetriBert, а это по сути сиамская нейросеть основанная на архитектуре BERT. Эта нейросеть обучена так, что косинус между вектором вопроса и вектором ответа на этот вопрос больше, чем вектора этого вопроса и ответа на другой вопрос. После такого ранжирования оставляют только первые N сниппетов, и передают в генеративную сеть вместе с вопросом. В этом подробном туториале по построению ретривал QA системы Explain Anything Like I'm Five: A Model for Open Domain Long Form Question Answering в качестве генеративной сети используется BART, но можно использовать и ChatGPT, недавно утекшую в интернет LLaMA и многие другие.
Рис 1. Сниппеты из Википедии, полученные с помощью модели Retribert, содержащие внутри себя элементы правильного ответа на научный вопрос по физике (статья Explain Anything Like I'm Five: A Model for Open Domain Long Form Question Answering)
Другим популярным подходом является использование векторных баз данных, они позволяют сразу искать небольшое число сниппетов, которые позже передаются в генеративную модель. Работа с векторной базой, обычно, состоит из следующих шагов:
Предварительная обработка текста: документы преобразуются в набор векторов (вектор - сниппет) с помощью модуля векторизации, ядро такого модуля может реализовано на базе одного методов, которых на данный момент довольно много: TF-IDF, word2vec, Glove, FastText, lda2vec, doc2vec(он же paragraph2vec), LaBSE, BERT, RoBERTa, DeBERTa, SBERT и проч.. Важно отметить, что нейросеть должна быть дообучена как сиамская, так, чтобы косинус между вектором вопроса и вектором ответа на этот вопрос был больше, чем косинус вектора того же вопроса и ответа на любой другой вопрос.
Индексация документов: векторы документов индексируются в базе данных, обеспечивая быстрый доступ к ним во время поиска.
Поиск: при поступлении запроса он также преобразуется в вектор, который сравнивается с векторами документов в базе данных. Результатом является ранжированный список сниппетов, отсортированных по степени соответствия запросу.
В конечном итоге ранжированный список сниппетов передается в генеративную модель, которая и генерирует ответ на вопрос.
Одним из примеров имплементации такого подхода является проект LlamaIndex, а недавно на Хабр вышел перевод статьи Обучаем с помощью LlamaIndex и OpenAI GPT-3 отвечать по вашей базе знаний в которой описан процесс создания индекса из ваших документов и затем ответов на вопросы по нему.
Но и у этого подхода есть ряд недостатков, основными являются:
1. то, что не учитывается внутренняя структура текстового документа
2. генерация в конечном итоге производится по ограниченному числу сниппетов.
Например, в статье про обучение Лама индекс как раз и видны эти недостатки – принципиальная неполнота и несвязность в данных, и это сильно повышает вероятность галлюцинаций.
Фрактальный синтез ответа
Для решения этих проблем неполноты и несвязности мы используем новое представление текста — в виде фрактального графа.
Фрактальный граф — это обычный направленный граф, в котором вершина является другим графом, похожим на весь этот граф. В этом смысле фрактальный граф обладает свойством самоподобия, если графы изоморфны.
Графовое представление предложений может быть использовано для самого широкого спектра, множества задач, таких как классификация текстов, анализ тональности, автоматические ответы на вопросы, а также для задач машинного перевода.
Для создания графового представления теста каждый структурный элемент представляется вершиной графа, а ребра представляют связи между этими элементами. Связи при этом могут иметь разные роли: быть семантическими, структурными и т.п.
В нашей работе минимальный элемент — это предложение, предложения объединены в направленный граф (в сниппет).
Сниппеты в свою очередь объединяются в блоки сниппетов, а то есть в “документ”.
Итоговая задача заключается в том, чтобы выполнить такое преобразование над этим графом, чтобы он превратился в граф ответа на вопрос.
Функция, выполняющая данное преобразование в нашей работе называется функцией фрактального синтеза ответа (англ. fractal answer synthesis), графически работа по преобразованию текста документа в ответ показана на рисунке. (Кстати, в случае, когда сниппеты состоят из 3х элементов итоговый фрактал похож на треугольник Серпинского.
Схема алгоритма
На рисунке ниже представлена блок-схема алгоритма, создания фрактального графа и синтеза ответа. В данной статье мы не затрагиваем часть алгоритма в блоке Генерация ответа - это заслуживает отдельной статьи, ведь теперь LLM сможет генерировать намного более когерентный текст, однако она должна быть обучена делать это.
Подход |
Retrieval |
Fractal answer synthesis |
1 |
Ограниченный размер контекста для сниппетов (2048 токенов, или 32k токенов GPT-4) |
Любой размер контекста, не ограничен |
2 |
Текст в виде сниппетов, несвязный текст, ответ на вопрос “разбросан” по сниппетам |
Текст в виде фрактального графа с разными типами связей. Связный ответ уже получен. |
3 |
LLM генерирует текст из сниппетов, высокая вероятность генерации “фантазий” |
LLM решает задачу изменения стилистики ответа - а это значит намного меньшую вероятность галлюцинаций |
Таблица 1. Сравнение подходов. В Fractal answer synthesis решается принципиально другая задача, чем в стандартных подходах к генерации.
Примеры синтеза ответов
Мы протестировали алгоритм Fractal answer synthesis в ответах на вопросы по нашим же статьям на Хабре. Результат тестирования приведены ниже (в данных примерах ответы генерируются без использования LLM, вроде ChatGPT или LLaMA).
Заключение
В данной статье мы кратко рассмотрели основные принципы работы алгоритма Фрактальной генерации ответа. Мы не коснулись следующего элемента пайплайна - генерации ответа с помощью LLM, эта часть исследования находится в состоянии work in progress.
Графовое (фрактальное) представление и векторная база данных — это разные способы представления текстов. Они имеют свои преимущества и недостатки, а эффективность каждого метода зависит от конкретной задачи.
Векторная база данных использует векторы для представления структурных элементов текстовых документов. Это позволяет быстро находить схожие элементы. Однако, векторная база данных имеет ограничения в представлении семантических связей между элементами.
В то же время, с помощью графов можно лучше отображать семантические связи внутри текстовых документов, что позволяет получить более точные ответы на вопросы.
Из недостатков использования графов можно отметить то, что такой подход пока требует больших вычислительных ресурсов для синтеза структуры документа и структуры ответа. Кроме того, построение графа часто работает на правилах и его сложно автоматизировать.
Если необходимо моделировать семантические связи в тексте, то фрактальное представление может быть более эффективным методом, в то время как векторная база эффективнее для быстрого поиска схожих документов и сниппетов.
Таким образом нам представляется очень важным отметить, что для решения проблемы фактологии необходимо использовать именно фрактальное представление, поскольку оно позволяет формулировать задачу получения ответа и получения нужного “образа” ответа точнее, при этом без обучения специальной нейросети или адаптера (такого как например Lora). А при обновлении информации в документе каждый раз придется переучивать модель, и это очевидный и неустранимый недостаток.
Особенно важно это для отраслей, где документы имеют сложную связность, вложенность, зависимость одних элементов документа от других: в науке, юриспруденции, медицине.
Следить за развитием исследований можно в Телеграм
Авторы
Понимаш Захар
Руководитель проекта «FractalGPT».
Специалист в области машинного обучения и глубоких нейронных сетей. Разработчик собственного ИИ фреймворка AIFramework, а также системы логического вывода с мотивацией. Один из разработчиков: первого в РФ ИИ психолога Сабина и библиотеки для интерпретации генеративных нейросетей Transformer.
Носко Виктор
Продвижение и развитие проекта «FractalGPT».
Генеральный директор, ООО «Аватар Машина». Специалист в области генеративных нейросетей трансформер, интерпретируемого ИИ. Визионер открытого и этичного ИИ. Докладчик конференций по искусственному интеллекту: Conversations.ai, OpenTalks.ai, AGIconf, DataStart, AiMen. Активный участник сообщества AGIRussia. Один из разработчиков: первого в РФ ИИ психолога Сабина, библиотеки для интерпретации генеративных нейросетей transformer.
Комментарии (15)
ZvaroG
11.04.2023 16:09Кто ни будь пробовал обучать одни у туже сеть несколько раз на одних и тех же данных каждый раз ограничивая минимальный размет токенов? Т.е. в начале размер токена - минимум 1 буква, второй проход минимум 2 слово, 3й проход минимум 3-4 слова. т.о. сеть будет видеть не только деревья, но и лес.
Можете рассказать или дать ссылку на то как объединяют нейронные сети с блоками логического вывода? Почему в ЧатГПТ не удалось встроить простейший калькулятор, чтобы она не искала ответ сколько будет 2+2 в вычисляла - я так понимаю такие вычислительные блоки встраиваемые в нейросеть аналог программы для операционной системы. Т.е. ЧатГПТ - это операционка, а подключённый к ней Wolfram - это аналог экселовской таблицы.
Zachar_5 Автор
11.04.2023 16:09+1"Кто ни будь пробовал обучать одни у туже сеть несколько раз на одних и тех же данных каждый раз ограничивая минимальный размет токенов? Т.е. в начале размер токена - минимум 1 буква, второй проход минимум 2 слово, 3й проход минимум 3-4 слова. т.о. сеть будет видеть не только деревья, но и лес."
Это как?)
Когда учат GPT, то подают блок токенов, например 512 токенов и учат предсказывать 513-й, во время работы сеть выдает распределение вероятностей токенов продолжения в ответ на некую входящую последовательность. Из этого набора различными методами (ядерного семплирования, поиска луча и т.п.) выдается следующий токен и так продолжается или заданное число раз, либо пока не встретится спец. токен окончания генерации.
mechkladenets
11.04.2023 16:09Да, это тема очень обширная и есть как минимум 2 подхода:
а) использовать GNN (графовые нейросети) - тут в видео показан граф со ребрами-смысловыми связями и отношениями
https://www.youtube.com/watch?v=oifFhoqmWso
б) использовать CoT (chain of thought prompting)
- этот подход наиболее известный и именно его с помощью промт-инжиниринга все и хотят приспособить к решению сложных задач, изобретая все более сложные промты, но т.к. он тоже авторегрессионный модель просто не способна понять того, что от нее требуют: изучить структуру в данных, вместо того, чтобы изучить более простые статистики слов
https://ai.googleblog.com/2022/05/language-models-perform-reasoning-via.html
третий является неким расширением CoT: MM-REACT выделяет специализированных экспертов по зрению с ChatGPT для решения сложных задач визуального понимания с помощью мультимодальных рассуждений и действий.
в) https://multimodal-react.github.io/
ZvaroG
11.04.2023 16:09А есть какие либо способы сжатия нейросетей с небольшой потерей качества по аналогии с JPEG ?
mechkladenets
11.04.2023 16:09Ваш вопрос про квантование?
Вот есть статья, тут еще и другие методы описаны: https://habr.com/ru/companies/doubletapp/articles/722798/
Вообще используя квантование вы можете запустить аналог ChatGPT у себя на ПК и уже вышло несколько разных репозиториев и моделей как это сделать. Но как раз такие модели все же хуже оригинальных.
buriy
11.04.2023 16:09А сравнивали ли вы ваш подход с генерацией эмбеддингов для индекса из строк перемену длины: когда берутся предложения, абзацы, страницы, и индекс строится для каждого из них, а не просто для каждого предложения/абзаца? Основную заявленную вами проблему это должно решать, при этом вычислительно брать намного проще.
А учитывая, что эмбеддинг, порожденный моделью, и так есть для каждого токена, построить усредненный эмбеддинг по каждому 1, 2, 3, 4, 6, 8, 12, 16, ... токенов и поместить их все в единый индекс должно быть крайне просто.
И вообще, не хватает каких-то численных оценок вашего изобретения. Скажем, взять сберквад или любой другой QA датасет и прогнать по нему базовый метод (обычный индекс по абзацам), метод, предложенный мной, и ваш -- должно быть делом несложным.
Zachar_5 Автор
11.04.2023 16:09Для этого метода нужно обучить сеть, если будем так делать - напишу.
buriy
11.04.2023 16:09Не понял, какую именно сеть надо учить. Вашу? А что вообще тогда у вас есть готового? Только идея?
Zachar_5 Автор
11.04.2023 16:09+1Чтобы Ваш метод заработал, нужно обучить сиамскую сеть, для поиска соответствия вопрос - сниппет. И в выборке должны быть сниппеты разной длинны.
"А что вообще тогда у вас есть готового? Только идея?" есть готовый алгоритм синтеза ответа на вопрос по документу, в статье приведены скриншоты его работы. Сейчас работаем над его улучшением.
Предложенный Вами метод решает немного другую задачу, он решает задачу поиска сниппета, отвечающего на вопрос пользователя, у нас задача несколько сложнее, а именно, преобразование графа документа в граф ответа. Можете посмотреть на скриншоты, ответы создаются фактологические и читаемые.
По датасету, я могу проверить вхождение словосочетаний из датасета в ответ и написать сюда точность. Но это не совсем корректно, т.к. датасет, на котором Вы предложили тестировать, для другой задачи, т.е. когда текст достаточно короткий, а нужно найти ответ из нескольких слов. Это обычно решается бертом с классификатором, который классифицирует каждый токен является ли он началом или концом ответа, после чего извлекают топ n ответов.
mechkladenets
11.04.2023 16:09+1Ваш вопрос очень обширный, я бы его обобщил.
Во-первых ваш алгоритм далеко не единственный, его можно существенно видоизменять, меняя параметры. Проведение текстов может занять недели 3, достаточно большое время.
К тому же мы еще в сентябре 2021го уже выпускали Объясняющую Question-answering систему, которая отвечала на русском по Википедии.
У нас есть опыт работы с ретривал QA системами, и там несколько проблем:
1. Обучить нужно retriBERT чтобы он доставал нужные сниппеты
2. Обучить также нужно и BART что он умел потом из них составлять ответ.
3. Повторять это нужно каждый раз, когда образ ответа (стилистика, его длина и тп) меняется в зависимости от бизнес задачи.
Но проблема же также и в том, что можно модели заменить - например взять T5 и прочие, вдруг они будут лучше. Мы плавно пришли к достаточно большому рисечу, который делают топ компании.
Во-вторых это вопрос о бенчмарках: то есть в целом конечно нужно сравнивать эффективность методов, и эта работа в прогрессе сейчас. Но тут в нашем примере некорректно сравнивать ретривал систему и фрактальную тк они решают разные задачи: по сути более правильно сравнивать фрактальную систему в завершенном виде - когда по ней будет сделана генерация с помощью LLM и далее приведена статистика, что в таком сеттинге галлюцинаций в итоге меньше, чем в LLM которая генерировала по векторной базе.
В итоге вопрос сводится к продолжению разработки системы, тк мы рассматриваем по сути компонент пока что, а не полную систему.
Это мы опишем позже.
В-третьих, я соглашусь, что нужны численные бенчмарки, также они в процессе.
mechkladenets
11.04.2023 16:09Покажу пример нашей QA системы 202го года на скрине, у нее конечно же было большое число проблем: начиная от объясняющей стилистики ответа, и до невозможности сравнивать предметы, также она не могла обработать ложную посылку, неполный вопрос:
(Как работает мозг? - мы как люди предполагаем что речь о мозге человека, а модель находит в Википедии 15 кусочков про мозги животных, про человека там тоже есть, но статья скорее всего будет только одна. Это значит что 90% вероятности, что ответ будет про мозг какого-то животного, при том сборная солянка и рандом. Этот ответ точно будет засчитан человеком как нерелевантный.)
phenik
11.04.2023 16:09Эту статью видели, где пытаются прикрутить логику аналог Системы 2 в дуальной модели псих. процессов? Сами фантазии ЯМ на трансформерах следствие моделирования ассоциативного уровня мышления — Системы 1, см. статью.
mechkladenets
11.04.2023 16:09Эту статью не видел, подход интересный, веет Канеманом, посмотрю и позже отпишусь.
Пока не посмотрел могу сразу сказать, что ассоциации тоже можно графами промоделировать, например нечто похожее делается в Conceptnet - системе онтологий с разными типами связей.
dprotopopov
Похоже на галлюцинацию...