Комментарии 8
Вы смешали два понятия: бред и галлюцинации. Оба связаны с ограничениями LLM, но имеют разные причины и результат.
Бред: это вроде Ёлка идёт на вокзал
Галлюцинации: Для получения раствора Йода, налейте воды и добавьте раствор Кальция.
В одном случае, нарушена логическая структура (смещены разные контексты), а во втором логическая структура верная, но "придумана" своя (контекст сохраняется, но связь не верная).
То что вы описали не решит этих двух проблем. Но их можно уменьшить, если ввести вторую LLM или даже эту же но с другим seed, где вторая выступает арбитром первой и оценивает точность. В идеале если арбитра два, например вы можете два раза уточнить у самой же модели и на основе суммарной оценки решить, верный ответ или нет.
Но конечно наиболее верный вариант, это когда у вас две модели делают ответ и затем каждая оценивает ответ другой верный или нет. Это конечно больше, но практически исключает галлюцинации.
Данный подход проверял и предлагал свое время в чате Сбера, но вижу народ продолжает есть кактус. При том что описывал этот подход с арбитрами в качестве LLM (ка moe, только сами llm арбитры). Это позволило вытаскивать из них даже очень спорные данные.
А просто промты ничего не гарантируют, как и до обучение. Так как вероятность все равно будет присутствовать. В случае арбитров вы уменьшает вероятность очень сильно. Полностью избавляя от галлюцинаций, но возможен бред (его степень зависит от модели)
В комментариях там выкладывал пример кода, где 10 llm были арбитрами друг друга.
Спасибо за комментарий. Оценка ответа LLM со стороны другой LLM - это, безусловно, один из известных методов улучшения генеративных пайплайнов. Для других задач мы его тоже используем, но здесь я не стал его упоминать, потому что он довольно затратен по времени работы, тем более для пайплайнов поиска/RAG.
Мне, однако, непонятно, почему подход с несколькими LLM у вас исключает вероятность, а при дообучении "вероятность все равно будет присутствовать". Мне кажется, вероятность останется в обоих случаях. Это же LLM. Тем более, что вы там в одном месте сами рекомендуете выставить другой seed модели. Seed - это исключительно про вероятность. Если бы не было вероятности, не пришлось бы учитывать seed.
Кроме того, во втором примере, который вы привели, если я правильно понял ваши рассуждения, логическая структура не верная так же, как и в первом примере. Йод не может получиться из калия точно так же, как ёлка не может идти на вокзал (последнее, кстати, в вашем случае неверно, потому что вы написали Ёлку с большой буквы, то есть это может быть певица Ёлка, а певица вполне может идти на вокзал). Буду рад, если вы раскроете эту мысль подробнее.
И ещё было бы очень здорово получить статистику по вашему методу на каком-нибудь датасете: как часто были ошибки в baseline (одна модель), и как ошибки стали уменьшаться по мере увеличения числа моделей, контролирующих друг друга? И на сколько при этом возрастает время обработки одной задачи?
Спасибо.
Оценка ответа LLM со стороны другой LLM - это, безусловно, один из известных методов улучшения генеративных пайплайнов.
Для других задач мы его тоже используем, но здесь я не стал его упоминать, потому что он довольно затратен по времени работы, тем более для пайплайнов поиска/RAG.
А где прочитать про это? До этого не встречал сколько не искал использования аналога MoE, где в качестве арбитра не какая-то сущность, а несколько LLM которые участвуют в процессе.
Если вы про Chain-of-Thought (CoT), то это совсем другое. И к описанному варианту арбитров отношения не имеет.
Насчет примеров, возможно они не очень удачные в наглядном плане.
При различных психических заболеваниях: шизофрении и Альцгеймера например, есть два вида проявления.
Бред - "словесная окрошка".
Пример: пациент перескакивает с темы на тему, не завершая мысли.
Более понятный пример.
«Зеленые часы летают над морем, потому что электричество ест треугольники, а вчера я видел Бога в холодильнике».
Отдельные слова грамматически правильны, но их сочетание абсурдно.
Нет четкой темы, причинно-следственных связей или контекста.Галлюцинации. Это как раз тот пример с хим. реакцией, которая выдумана.
Это связано с отсутствием регуляции входного сигнала.
Получаем избыток «шумовых» сигналов → мозг интерпретирует внутреннюю активность как внешние стимулы (галлюцинации)
Это как раз приводит, к тому что кажется что если я добавлю калий в воду, то получу раствор йода.
Так как причина-следственные связи, которые должны быть выделены "размазаны" с шумовыми.
Оба этих явления часто присутствуют вместе, поэтому подобное в LLM народ не разделяя, называет все галлюцинациями. Хотя в нейробиологии эти понятия различаются как по проявлению, так и по причинам возникновения.
Как это проявляется у LLM.
Бред:
Когда FFN в трансформерах не справляется или недообучен, то мы получаем бред. Это аналогично проблемам слоя V в ассоциативных зонах, которые так же обобщают данные в небольших областях. Причин там много, низкая плотность нейронов (аналог слабой модели), дофаминовые проблемы (недообучена) и так далее.
Тут если единственный вариант либо увеличивать размер FFN, либо до обучать модель.
Поэтому при до обучении от бреда мы можем избавиться (если объем информации влезает в модель).
Галлюцинации:
Их причины в том, что в слое V или других местах нарушается фильтрация данных. Например, при выборе слова должен прийти сигнал от моторной зоны, чтобы выделить слово "идти", а он не приходит (ослаблен контроль фильтрации сигнал/шум) и на фоне этого получаем другое слое "плыть". И фраза Я иду по улице, превращается в фразу Я плыву по улице. Это галлюцинация.
Но в LLM этого механизма усиления сигнал/шум нет вообще. Вместо этого мы прогнозируем множество вероятных следующих слов, где с помощью температуры выбираем случайное в диапазоне вероятностей указанном температурой.
Таким образом у нас возникают галлюцинации, так как выбор происходит оторванных от контекста (в мозге сигнал на нужный контекст направила бы какая-нибудь зона мозга, которая окажет модулирующее влияние и усилит его - время, моторика, зрение, слух, ассоциативная зона, сигнал от тела, лимбическая и так далее).
Иногда это галлюцинация явно не подходит ни под один возможный контекст, и тогда это плохая галлюцинация.
Хорошая галлюцинация - это та, которая может быть полезной. Когда связь была не очевидной, более слабой, но в итоге привела нас к правильному решению другими маршрутами.
Так как у LLM нет такого механизма фильтрации, то мы должны как-то самостоятельно его реализовать.
Чтобы по итогу убрать плохие галлюцинации и оставить полезные.
Вот это и делает предложенный вариант арбитров с несколькими LLM (или даже одной но с разной температурой и Seed)
Почему несколько арбитров снижают галлюцинации?
Тут все зависит от выставленной температуры. Если бы вы перешли по ссылке, то в комментариях я описывал, что важен подбор настроек "команды" арбитров LLM. Если много "шизофреников" с высокой температурой, то будут галлюцинации.
Но если допустим из 10 только 1 шизофреник, большая часть умеренные, и небольшая часть с 0 температурой, то система получается устойчивая. Где шизофреник иногда может придумать и хорошую галлюцинацию, которую остальные модели оценят положительно. А вот плохую галлюцинацию откинут.
Второй момент связан с вероятностями.
Допустим у нас 6 ответов
4 ответа - одинаковые
1 ответ - отличается
1 ответ - отличается
В этом случае, вероятность ответа 4 гораздо выше, вероятности остальных вариантов.
Так вот суть подхода с арбитрами, в том, чтобы оставить ответ с самой высокой вероятностью.
Даже для 3-ех одинаковых моделей он уже даст сильный результат. Seed тут меняется, чтобы сделать их более разными в рамках одной LLM.
Кроме того, если опять же посмотрите, то там не просто ответ. Там главное в другом. LLM указывает, почему она так ответила и этому дается оценка, которая прежде всего и играет роль с учетом всего, что описано выше.
Таким образом мы оцениваем ни только ответ, но и почему был выбран такой ответ. И так до победителя.
На самом деле до победителя в случае RAG делать не стоит, достаточно только один проход.
До победителя я рекомендую использовать, когда нужно получить глубоко продуманный ответ, который не даст ни одна рассуждающая модель, хотя они и близки к подходу.
Когда я придумал и приложил его и опробовал, не было еще рассуждающих моделей. Были только Chain-of-Thought (CoT) и MoE.
В комментарии у себя я там приводил время, проблемы роста ресурсов. Но это касалось 10 llm, которые последовательно работали по-моему (мне в тот момент главное было проверить подход).
Сейчас я все пытаюсь доделать на его базе заполнения аналога Википедии, чтобы LLM сами заполняли данные по принципу арбитров. Чтобы потом использовать эти данные в обучении.
Ок, пример: директор сменился вчера. Теперь у фирмы о.и. с другими ФИО. Переобучать всю модель?
А разве от галлюцинаций можно избавиться? Ведь ИИ по сути галлюцинирует всегда, но так случается что их галлюцинация сходится с реальностью
Мой метод борьбы с галлюцинациями в LLM:
"Трехуровневая система верификации с обратной связью"
Предварительная оценка уверенности:
Заставить модель оценить свою уверенность в ответе по шкале 1-10
Для ответов с низкой уверенностью (1-4) автоматически запускать проверку фактов
Самопроверка с обоснованием:
Модель должна привести конкретные доказательства для каждого утверждения
Использовать технику "цепочка рассуждений" для пошагового объяснения логики
Применить внутреннее противоречие: заставить модель попытаться опровергнуть собственный ответ
Внешняя валидация:
Создать отдельную "модель-критик", специально обученную находить несоответствия
Использовать векторный поиск для проверки ключевых фактов по надежным источникам
Внедрить механизм "красных флагов" для автоматического выявления типичных паттернов галлюцинаций
Итеративное улучшение:
Сохранять примеры галлюцинаций для дальнейшего дообучения
Внедрить систему обратной связи от пользователей для маркировки неточных ответов
Регулярно обновлять базу знаний о распространенных заблуждениях в конкретной предметной области
Ключевое отличие моего подхода - активное использование самокритики и многоуровневой проверки с обратной связью вместо простого отказа от ответа при неуверенности.
А разве суть RAG не в том чтобы сначала найти в векторной базе данных подходящие ответы, а потом уже на их основе LLM будет давать ответ?
То есть если найденных результатов 0 - можно сразу же отловить это как обычный null
У мну более-менее прилично получается в три запроса к модели + RAG
Вообще иногда поведение llm с ума сводит
Причем на английском, в среднем лучше. Думаю, потому, что сам язык по-проще.
Но все равно.
«Ошибка на миллиард» в ИИ: боремся с галлюцинациями в LLM по аналогии с NullPointerException