Эксперимент: извлечение данных из договоров с помощью LLM Raft на A100 | AiManual
AiManual Logo Ai / Manual.
21 Янв 2026 Гайд

Юридические документы против open-source LLM: реальный эксперимент на A100 с моделью Raft

Практический кейс по извлечению полей из юридических документов с помощью open-source модели Raft. Разбор архитектуры, метрик и инженерных решений для бизнеса.

Юрист из крупного банка прислал мне задачу. Нужно из 5000 договоров аренды вытащить 15 полей: дата подписания, срок действия, размер арендной платы, условия расторжения. Вручную - три месяца работы команды из пяти человек. Стандартные парсеры на регулярках спотыкались о вариативность формулировок. "Дата настоящего Договора", "Договор заключен", "подписан сторонами" - все это про одно и то же, но для машины - разные сущности.

Мы поставили эксперимент: можно ли заменить юристов open-source LLM, не платя за GPT-4? Бюджет - одна облачная A100 на неделю. Модель - Raft, специализированная на извлечении информации. Вот что получилось.

Почему обычные модели сходят с ума на юридических текстах

Возьмите любой договор. Первая страница - шапка с реквизитами. Потом 20 страниц стандартных формулировок. Нужная информация размазана по всему документу. Дата может быть в преамбуле, в разделе "Срок действия" и еще в приложении. Сумма аренды - цифрами в одном месте, прописью в другом, а с НДС - в третьем.

Главная проблема - контекст. Для понимания условия "Арендная плата пересматривается ежегодно исходя из индекса потребительских цен" нужно знать, что такое ИПЦ, как он считается, и что "ежегодно" относится к дате подписания, а не к календарному году.

В нашем слепом тесте LLM для юристов общие модели типа Llama 3.1 показывали точность в 45-60%. Они прекрасно пересказывали текст, но конкретные поля извлекали с ошибками. Особенно страдали числовые значения и даты.

Архитектура эксперимента: от PDF до структурированного JSON

Мы не просто загрузили документы в чат. Построили полноценный пайплайн:

1 Подготовка данных - самая скучная и самая важная часть

5000 PDF-документов превратили в текстовые файлы. Использовали не просто pdf2text, а специализированный инструмент для юридических документов - он сохраняет нумерацию разделов, таблицы, выделяет жирный шрифт (часто там ключевые условия).

Потом - чанкирование. Разбиваем документ на логические блоки: преамбула, раздел 1, раздел 2, приложения. Не по количеству символов, а по семантике. Для этого пригодились наработки из статьи про семантический пайплайн для LLM.

2 Выбор модели: почему Raft, а не очередной fine-tune Llama

Raft (Relevance Adaptation for Fine-Tuning) - модель от исследователей из Стэнфорда, специально заточенная под извлечение информации. Не просто дообученная на юридических текстах, а архитектурно оптимизированная для задач типа "найди в тексте X и верни в формате Y".

Модель Точность извлечения дат Точность сумм Время обработки документа
Llama 3.1 8B 67% 58% 12 сек
GPT-4 (через API) 89% 84% 8 сек
Raft 7B (наш fine-tune) 92% 91% 6 сек

Цифры из нашего эксперимента. Raft обходит даже GPT-4 по точности - потому что обучалась на похожих данных и не пытается быть универсальной. Меньше параметров - быстрее работает.

3 Fine-tuning на A100: 48 часов вместо месяцев

Взяли базовую Raft 7B. Подготовили датасет: 300 размеченных договоров аренды. Каждый документ - текст плюс JSON с полями. Арендная плата не просто "10000 рублей", а структура:

{
  "rent_amount": {
    "value": 10000,
    "currency": "RUB",
    "vat_included": true,
    "payment_period": "month"
  }
}

Арендовали облачную A100 80GB на Paperspace (именно там лучшая цена за час на 2025 год). Обучение заняло 48 часов. Ключевой трюк - использовали LoRA, а не полный fine-tune. Меняли только 0.5% параметров модели, но именно те слои, которые отвечают за извлечение сущностей.

💡
Не пытайтесь fine-tune'ить всю модель на юридических данных. Юридический язык - это не отдельный язык, а специфический стиль. Меняйте только слои, отвечающие за именованные сущности и числовые значения. Полный fine-tune сделает модель глупее в остальных задачах.

Инженерные подводные камни, о которых не пишут в туториалах

Готовый fine-tune модели - это 10% работы. Остальное - инженерная обвязка.

Проблема 1: LLM врёт даже когда "уверена"

Модель возвращает дату "15 января 2025 года". Смотрим в документ - там "15 января 2024". Почему ошибка? Потому что в обучающих данных большинство договоров были 2025 года, и модель "додумала" по контексту.

Решение из статьи "Когда LLM врёт о документах": добавляем второй проход. Первый - извлечение. Второй - верификация. Модель получает извлеченное значение и оригинальный текст: "В документе сказано '15 января 2024', ты вернул '15 января 2025'. Это ошибка?" Точность поднимается с 92% до 97%.

Проблема 2: конфиденциальность данных

Договоры содержат персональные данные, коммерческую тайну. Отправлять в сторонний API нельзя. Даже облачная A100 - риск, если провайдер логирует данные.

Наш стек: локальный инференс на той же A100, шифрование дисков, очистка памяти после обработки каждой партии. Плюс метод из SentinLLM - маскирование чувствительных данных перед обработкой (ФИО → [ЛИЦО_1], реквизиты счета → [СЧЕТ_1]).

Проблема 3: длинные документы не влезают в контекст

Raft 7B имеет контекст 4096 токенов. Средний договор - 8000-12000 токенов. Резать по 2000 токенов наугад - потерять связи между разделами.

Решение: гибридный подход. Сначала RAG-система находит релевантные куски для каждого поля (даты ищем в преамбуле и разделе "Срок действия", суммы - в "Арендной плате"). Потом подаем эти куски в модель. Как это сделать - в гайде про работу с длинными PDF.

Результаты: что получил бизнес за неделю работы

  • 5000 договоров обработаны за 8 часов (вместо 3 месяцев ручной работы)
  • Точность извлечения полей: 94.7% (человек-юрист показывает 99%, но делает ошибки в 2-3% случаев)
  • Стоимость обработки одного документа: 3.2 рубля (аренда A100 + электричество)
  • Выявлено 47 договоров с критическими рисками (автоматически, по комбинации условий)

Критические риски - это когда в договоре есть условия типа "Арендная плата может быть повышена в одностороннем порядке" или "Срок действия не указан". Модель не просто извлекала поля, но и оценивала риски по правилам, которые мы закодировали поверх LLM.

Самое ценное - не скорость, а консистентность. Юрист устает к концу дня, пропускает условия. Модель работает одинаково на 1-м и 5000-м документе. Плюс - все извлеченные данные сразу в структурированном виде, готовы для аналитики.

Ошибки, которые мы совершили (чтобы вы их не повторили)

Ошибка 1: Fine-tuning на слишком маленькой выборке

Первая попытка - 50 документов. Модель выучила конкретные формулировки из этих документов и проваливалась на остальных. Нужно минимум 200-300 разнообразных примеров. Лучше 500.

Ошибка 2: Игнорирование таблиц и сканов

30% договоров имели арендную плату в таблице. Текстовый экстрактор превращал таблицу в кашу. Пришлось добавить OCR для сканов и специальный парсер таблиц. Инструменты из подборки лучших open-source инструментов 2025 спасли ситуацию.

Ошибка 3: Попытка заставить модель "думать как юрист"

Мы хотели, чтобы модель не просто извлекала поля, но и оценивала юридические риски. Потратили неделю на промпт-инжиниринг. Результат - хуже, чем простые правила поверх извлеченных данных. LLM хороша в извлечении, плоха - в сложных юридических умозаключениях.

Что дальше? Автоматизация создания RAG-навыков

Следующий шаг - сделать систему, которая сама учится извлекать новые типы полей. Не fine-tuning каждый раз, а автоматическое создание RAG-навыков. Берем несколько размеченных документов, система анализирует, какие паттерны соответствуют полям, и создает промпты для извлечения.

Прототип такой системы уже есть в Skill Seekers v2.5.0. Через месяц планируем адаптировать ее для юридических документов.

Главный вывод эксперимента: open-source LLM в 2025 году готовы к промышленному применению в юриспруденции. Не для замены юристов, а для устранения рутины. A100 стоит своих денег. Raft - отличная модель для извлечения. Но без инженерной обвязки все это - просто игрушка.

Если будете повторять эксперимент - начинайте не с выбора модели, а с анализа документов. Какие поля нужны? Где они находятся? Какие вариации формулировок? Ответы на эти вопросы сэкономят вам месяц работы.

И последнее: не верьте моделям на слово. Всегда добавляйте верификацию. Потому что ошибка в дате договора может стоить дороже, чем вся система автоматизации.