Комментарии 10
В llama.cpp есть возможность заставить следовать модель заданной грамматике на этапе сэмплирования. Только это не гарантирует, что результат будет осмысленный, если в промте не рассказать нейронке про правила языка. Если все сделать правильно, то можно даже слабые модели, которые плохо следуют инструкциям по формату ответа, заставить давать осмысленный результат.
Цель данного исследования была для того, чтобы модель не шла по заданной грамматике, а то чтобы модель должна следовать логической последовательности
В моём примере cases‑V2E01 явно указан, что модели сложно перенести логическое утверждение, как раз таки гарантия проверяется внутри детерминированного ядра(hilbert system), который проверяет не семантику, а формулы выведения и проверяет ответ, в вашем предложении вы только исправляете текст нейронной сети, но то как она последовательно логически придёт к выводу вы не решите, за вас это должна сделать детерминированная строгая математическая модель, а внутри github исследования есть данные, что чем больше вы загружаете логических цепочек тем сильнее ваша LLM модель будет путаться в логических переходах.
Ваш аргумент "заставить давать осмысленный результат" вашим способом вы получите, только формальность, ответ который будет устраивать вас визуально и семантически в этом и заключается это иллюзия правдоподобности, а не создание логически верного ответа, таким образом можно замаскировать проблему, а не её решать (а решают её только детерминированные строгие системы).
P.S. Вы сколько угодно можете чинить своими сложными промтами, внешними инструментами, добавлять туда RAG, делать LLM-as-judge и т.д. на эти LLM модели, но вы не почините их логику работы, повторюсь из исследования природа LLM моделей вероятностная, в начале статьи прямо написано даже при безошибочных обучающих данных данных приведет к языковой модели, генерирующей ошибки.
природа LLM моделей вероятностная
Так в этом и их сила, что они позволяют решать задачи, где входные данные недетерминированы. В остальных вопросах классические алгоритмические системы будут лучше, быстрее и точнее. Принудительное следование грамматике лишь позволяет более корректно преобразовать входные данные в что-то более определенное для последующей формальной обработки. При данном преобразовании всегда будет какой-то процент ошибок, т.к. ни обучающие, ни входные данные на 100% не будут корректны. Во многих задачах решение “на глаз” вполне ок, с чем LLM идеально справляются. Просто потому что нельзя добиться детерминизма там, где его просто нет. А построение формальной логики в данной среде создаст иллюзию. Максимум можно построить огород из конкретных условий, где на этой модели уже можно решить задачу уже формально, но не всегда это будет работать в реальном мире, где условия будут меняться на ходу.
Вы снова спорите не с тем, что написано у меня, а с более удобной для вас версией тезиса.
Я нигде не утверждаю, что можно “формализовать весь реальный мир”; в статье прямо сказано обратное: я беру маленький логический язык и строю намеренно узкий проверяемый слой.
Мой тезис не в том, что LLM надо запретить быть LLM(тавтология здесь уместна :) ), а в том, что её ответ нельзя принимать на доверии там, где нужна корректность.
Поэтому система у меня не говорит “наверное правильно”, а говорит: “прошло проверку / не прошло / недостаточно данных”. Меняющийся бизнес-контекст — это проблема обновления входных данных и правил, а не аргумент против самой верификации.
Вы, переносите инженерные проблемы на математическую логику и объявляете это её недостатком.
Перечитайте статью: вы сейчас возражаете не моей статье, а своему пересказу статьи.
Как по мне, то ты пошел +- правильным путем (в плане экстракции нужных переменных и верификации метода)... но вышел не туда. Ты хочешь все решать "вовне" (инструментами). Таким образом ты может быть выловишь часть галлюцинаций, Но никак не уменьшаешь их количество и не контролируешь их.
---
https://github.com/RealEgor/re-think_protocol
посмотри на мой протокол, я все эти же проблемы решаю внутри ЛЛМ, внутри контекстного окна.
Сейчас заканчиваю следующую версию, готовлю Haiku, чтобы она "побила" Sonnet и Opus на топовом бенчмарке HLE. Так вот, для того, чтобы Хайку начала догонять топовые модели мне, по сути, пришлось убрать галлюцинации на 99%, так как даже "маленькое допущение" в логике рассуждения - это фиаско на задачах уровня доктора наук.
(залью вторую часть в репозиторий, думаю, через неделю. Сначала нужно пройти тесты и подготовить переводы на разные языки + описание ридми)
мое личное мнение. Модель можно почти полностью отучить от галлюцинаций, хоть это сделать и не просто. Но! делать это нужно только ВНУТРИ контекстного окна. Со стороны можно фиксировать глюки, не больше.
Общая рекомендация
Если хочешь победить врага - сначала пойми его.
Если хочешь победить галлюцинации - категоризируй их и разбери причины их возникновения.
Модель можно почти полностью отучить от галлюцинаций
Это как? Модель не знает все ответы, ей приходится их интерполировать на основе знаний, которые в неё заложены (в которых точно есть ошибки).
По-моему это тоже самое, как по двум точкам попытаться найти всю функцию (в простейшем случае будет работать :)).
Со стороны можно фиксировать глюки, не больше.
Чтобы их фиксировать нужно знать правильны ответ, а мы же его как раз на практике и не знаем.
Возможно, вы просто смогли подогнать результаты под конкретные бенчмарки.
Дано: Хайку и Опус и Соннет обучены на одинаковых датасетах - это факт. Они обучены на одной и той же выборке "всего интернета", который отфильтровал Атропик (я не беру в расчет RLHF - это уже тонкая настройка. я про именно научные дата-сеты и материалы)
Об остальном пока не скажу, дай закончить эксперимент и выложить результаты прохождения бенчмарка. Но я совсем не подгоняю результат. Я "обучаю модель правильно и логично размышлять", "сомневаться в своих выводах", "копаться и разбираться в своей уверенности", "внимательно составлять план и аккуратно ему следовать". Это в целом универсальные механики, которые человеку свойственны, и которые противоречат "регрессивной природе ЛЛМ".
re!solve протокол у меня вышел большой, около 600 строк и 8500 токенов, однако с ним младшие модели уже ощущают себя вполне увереннее. На случайной выборке в 5 задач gemini flash смогла найти все нужные для решения формулы и факты внутри своих весов, хотя при первичном анализе задачи она помнила это все очень смутно и хотела генерировать галлюцинацию.
Следи за репо -) там будет обновление. Ну и статью я выложу на хабр и на хаккер-ньюс
Я специально не вношу это внутрь LLM потому, что внешняя детерминированная система не должна смешиваться с вероятностной LLM, она говорит ей “да/нет/не знаю” вот только от этого можно прямо сказать корректный вывод или нет.
А когда вы смешиваете определенный ответ с вероятностным у вас получится всё равно вероятностный ответ, таким образом вы маскируете проблему, а не явно её отслеживаете.
тут все сложнее...
Во-первых, когда вы выносите оценку во внешнюю среду, как я и говорил, вы работаете с фактом случившейся галлюцинации. Но не предупреждаете ее. Как вы сможете оценить, сгаллюцинировала ли модель?
Во-вторых, я не заставляю ее "просто оценить уверенность" (для того же Опуса... это как спросить Эншейна, уверен ли он в себе? да Опус знает про нашу науку больше, чем кто бы то ни было в этом мире... конечно он скажет "уверен")... Я ставлю модель в такие условия, когда ей "сгаллюцинировать" будет дороже, чем дать выверенный ответ. Это может звучать сложно, но это и есть ключик к ответу... Модель ищет всегда самый легкий и дешевый путь - самый "вероятный токен". Так сделай так, чтобы "самым вероятным" стал "самый корректный", а ложь и халтура для модели стали "когнитивно затратными".

Модели LLM их проблема правдоподобных ответов