Itinai.com a split screen photorealistic image of two compute 3f3c3d48 14eb 458c bcf3 739369f920b8 0

Получайте JSON из PDF за секунды: модель Lift 9B от Datalab

Itinai.com a split screen photorealistic image of two compute 3f3c3d48 14eb 458c bcf3 739369f920b8 0

Что такое Datalab lift?

lift — это 9‑молчный визуальный моделъ для структурированного извлечения. На вход вы передаёте обычную JSON‑схему, а модель возвращает JSON, полностью совпадающий с этой схемой. При этом она умеет читать PDF‑файлы и изображения «как есть», без предварительного разбиения на страницы.

Модель работает в двух режимах: локальное инференс‑приложение через HuggingFace и удалённый сервис vLLM, который Datalab советует использовать в продакшене. Код открыт под Apache 2.0, а веса — под модифицированной лицензией OpenRAIL‑M.

Схема‑ограниченное декодирование: как это работает

Перед выработкой ответа lift компилирует вашу JSON‑схему в Pydantic‑модель, а затем в строгую JSON‑схему, которую передаёт серверу vLLM как response_format. На каждом шаге генерации токенов сервер маскирует недопустимые символы, поэтому модель может выбрать только те токены, которые сохраняют валидность структуры.

Это гарантирует, что полученный JSON всегда соответствует заданному типу и форме. Однако такое ограничение контролирует лишь структуру, а не семантику: поле типа number может содержать любое число, в том числе и ошибочное.

Lift автоматически разрешает null для каждого скалярного листа, что позволяет модели «отказываться» от заполнения отсутствующих полей, не разрушая структуру.

Поддерживаемые типы: string, number, integer, boolean, массивы и вложенные объекты. Операторы enum, anyOf/oneOf, $ref и additionalProperties не поддерживаются – в таком случае модель просто генерирует без ограничения.

Практический совет: держите схемы в поддерживаемом подмножестве и проверяйте полученный JSON против схемы на стороне клиента.

Абстиненция по умолчанию

Если в документе нет запрашиваемого поля, lift возвращает null вместо вымышленного значения. Поэтому помечайте обязательными только действительно необходимые поля – иначе вы получите null, что будет воспринято как «поле отсутствует», а не как ошибка.

Бенчмарк

На 225‑документальном наборе Datalab lift достиг 90,2 % точности полей и медианной задержки 9,5 сек на документ. Это лучший показатель среди самохостируемых моделей того же размера.

Полная точность документов (все поля правильны) составила 20,9 % – показатель, характерный для сложных многостраничных документов, где требуется единственный проход.

Практический рабочий процесс

  • 1. Определите схему. Добавьте description к неочевидным полям и пометьте обязательными только действительно обязательные.
  • 2. Запустите извлечение. Передайте схему и файл в lift (CLI или Python‑API).
  • 3. Обработайте результаты. Если вызов завершился ошибкой или какое‑то обязательное поле вернуло null, отправьте документ на ручную проверку.
  • 4. Проверьте JSON. Валидируйте полученный объект против исходной схемы – это поможет обнаружить случаи, когда схема не смогла компилироваться.

Самый простой пример кода

CLI (Python 3.12+)

pip install lift-pdf
lift_vllm                 # запустить сервер vLLM
lift_extract invoice.pdf schema.json --output result.json

Python‑API

from lift import extract

schema = {
    "type": "object",
    "properties": {
        "invoice_number": {"type": "string", "description": "Идентификатор счета"},
        "total": {"type": "number", "description": "Сумма к оплате"},
        "due_date": {"type": "string", "description": "Дата оплаты (ISO 8601)"},
        "line_items": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "description": {"type": "string"},
                    "amount": {"type": "number"}
                }
            }
        }
    },
    "required": ["invoice_number", "total"]
}

result = extract("invoice.pdf", schema)
if result.error or result.extraction is None:
    # отправить на проверку
    pass
else:
    data = result.extraction
    if data.get("total") is None:
        # поле отсутствует – тоже отправляем на проверку
        pass
    else:
        # сохраняем валидные данные
        save(data)

Самые полезные советы по проектированию схем

  • Добавляйте description к полям с неоднозначными именами – это основной рычаг повышения точности.
  • Сохраняйте схемы в поддерживаемом подмножестве и валидируйте вывод позже.
  • Отдавайте предпочтение «плоским», небольшим по глубине структурам.
  • Помечайте обязательными только действительно обязательные поля.
  • Для больших PDF используйте параметр page_range (CLI) или page_range (Python), чтобы ограничить диапазон страниц.
  • Переиспользуйте один InferenceManager между вызовами, чтобы уменьшить накладные расходы загрузки модели.

Самохостинг против облака

Самохостинг lift Требуется соблюдение условий лицензии OpenRAIL‑M; подходит при ограничениях резидентности данных, необходимости контроля затрат и задержек, а также при работе в офлайн‑режиме.
Облачный API Datalab Предоставляет per‑field верификацию, ссылки на источники и confidence‑оценки; удобно, если не хотите управлять инфраструктурой и объём запросов невелик.

Запуск и первые шаги

Установите CLI‑утилиту:

pip install lift-pdf
lift_vllm

Схемы можно создавать в виде JSON‑файлов или Python‑словарей. Для интерактивного тестирования существует Schema Studio – небольшое Streamlit‑приложение (pip install lift-pdf[app] && lift_app).

Заключение

lift — практичный инструмент для быстрой, однопроходной экстракции полей из PDF и изображений. Он отлично подходит для пайплайнов, где после извлечения следует ручная проверка или агрегирующая аналитика. Если нужны автоматические confidence‑оценки и верификация, стоит рассмотреть облачный сервис Datalab.

Полный набор исходных кодов и документации доступен на GitHub: chandra, marker, surya, а модель lift – под лицензией Apache 2.0 (веса – OpenRAIL‑M).

Запустите свой ИИ проект бесплатно

ИИ-агенты искусственный интеллект онлайн для бизнеса

Лучший ИИ онлайн