Коротко
Автор solvi представляет Python-библиотеку, где языковая модель предлагает факты и варианты ответов, а детерминированный код применяет правила и принимает решение. Библиотека проверяет цитаты и типы, умеет воздерживаться и сохраняет воспроизводимый аудит; это важно для процессов, где ответы нужно обосновывать и нельзя нарушать жёсткие правила.
Контекст
Автор описывает solvi как открытую библиотеку на Python с лицензией Apache-2.0; версия 0.5.0 вводит типизированные вопросы и ответы. Проект вырос из экспериментов автора с нейросетями и гиперкомплексными числами и из опасений по поводу моделей, которые напрямую принимают деловые решения: они могут не выполнить правило, выдумать цитату или число, а затем не дать проверяемого объяснения.
Главное
- Базовый принцип solvi: модель предлагает значения, обычный Python-код проверяет их и вычисляет итог, а действия записываются в сцеплённый хешами след.
- Каталог задач состоит из функций с декораторами @cat.fn, @cat.check, @cat.extract и @cat.rule. Сигнатуры функций задают зависимости между фактами, проверками и решениями.
- В версии 0.5.0 типы Python задают контракт ответа: доступны варианты вроде да/нет, выбор из списка, шкала, метки, «не сказано», точный фрагмент текста, ранжирование и числовой диапазон.
- Защиты проверяют, что цитата буквально совпадает с текстом по указанным смещениям, выбор входит в допустимый список, значение соответствует типу, а уверенность не ниже порога. Жёсткая проверка может определить итог независимо от модели.
- В примере с расходом на такси 48.60 EUR правило одобряет сумму ниже лимита. Если извлекатель выдумывает 488.60, grounding отклоняет ответ и срабатывает запасная регулярка; выбор категории luxury также отклоняется как отсутствующий среди вариантов.
- Повтор решения проверяет использованные входы, вычисления и отпечатки моделей. В тестах 1 000 чистых следов прошли без ложных тревог, а 500/500 простых и 500/500 согласованных по хешам подмен были обнаружены.
- Для обучения предусмотрены system.fit_fast, system.teach и system.learn_rule. В одном примере 200 меток обработаны за 109 мс с точностью 0.973; на чеках SROIE выученные правила региона дали 89.2% против 60.9% у написанного вручную правила.
- На нескольких наборах документов solvi превзошла напрямую отвечающую Laya: например, на CUAD — 94.8% против 77.5%. Однако сравнение ограничено особенностями настройки: CUAD-модель видела только первые 1024 токена, а solvi читала документ целиком и работала примерно в 10 раз медленнее.
- Решение только на правилах занимает около 0.4 мс. Планировщик каталога из 10 000 частей исполняет 2.4% из них; в примере со страховыми сервисами полный расчёт занял 463 мс против 1 122 мс у скрипта, выполнявшего всё подряд.
- Некоторые обучаемые компоненты уступили простому коду: например, кодовый планировщик нашёл точный оптимум за 9 мс, тогда как обучаемому требовалось 420 мс. Обученные решения при этом помечаются в аудите и связываются с отпечатком модели.
Как сделано
Разработчик описывает функции, которые вычисляют значения, извлекают цитаты, проверяют условия и формируют типизированные ответы. Решатель идёт от заданных вопросов к нужным данным, сначала выполняет жёсткие проверки, а независимые медленные операции, включая вызовы моделей, может запускать параллельно.
Результаты модели не принимаются автоматически. Цитаты сверяются с исходным текстом по смещениям, варианты — с закрытым списком, значения — с аннотациями типов. При отклонении факта система пробует следующий источник или воздерживается; при низкой уверенности она может показать предполагаемый ответ для передачи человеку.
Каждый шаг и его происхождение записываются в аудит. При replay вычисления сверяются повторно, а отпечатки моделей помогают обнаружить замену модели после принятия решения. Автор также описывает обучаемые головы, точечную поправку system.teach и читаемые списки правил, которые дополняют, но не отменяют жёсткие проверки.
Результаты
В документных экспериментах solvi показала 97.8% на шести вопросах по 361 чеку SROIE против 92.6% у Laya, 98.5% на CORD против 96.0%, а на CUAD — 94.8% против 77.5%. На CORD доля ответов при точности не ниже 99% составила 99.7% у solvi и 14.2% у Laya. Автор также приводит ECE 0.008 / 0.011 / 0.027 и результаты проверок воспроизводимости следов. Скорость и качество зависят от задачи; часть цифр получена на демонстрационных или ограниченных наборах.
Ограничения
В бенчмарках использован один сид на конфигурацию; метки SROIE частично выводились правилами, что выгодно вычисляемым вопросам. На CUAD сравниваемая модель получала только первые 1024 токена, тогда как solvi читала весь документ. Для новых полей извлечение без примеров может быть слабым: автор рекомендует закладывать 25–100 размеченных документов. Уверенность решателя нельзя надёжно переносить между доменами: для настройки и калибровки автор советует 30–60 примеров. Дословная цитата не обязательно действительно подтверждает вывод; на ContractNLI поддерживающие ответ цитаты получены в 62% случаев у decide-large и 46% у decide-base. int8 на CPU снижал точность на 11–12 пунктов для ряда полей; fp16 точность сохранял. След, построенный заново на другом входе, сам по себе согласован, поэтому его хеш входа нужно сверять с внешней квитанцией. В статье также признаётся, что часть сравнений — демонстрации, а не полноценные бенчмарки.
Что взять себе
- Для решений с обязательными правилами разделяйте роли: пусть модель предлагает факты, а проверяемый код применяет ограничения и считает итог.
- Проверяйте не только формат ответа, но и его связь с источником: цитаты, допустимые варианты, типы и числовые вычисления.
- Воздержание и передача человеку — полезный исход, если уверенность низкая или данные не прошли проверку; предполагаемый ответ можно сохранить как черновик.
- Для аудируемости храните входы, происхождение значений и версии моделей; для защиты от подмены входа сверяйте след с независимой записью.
- Перед переносом порогов уверенности или результатов бенчмарка на свой процесс проверьте систему на размеченных данных именно своего домена.
Читать оригинал, если…
Откройте оригинал, если хотите изучить API и примеры кода solvi, проверить таблицы экспериментов или попробовать браузерные песочницы и демонстрацию аудита.