Ты когда-нибудь пробовал создавать приложение RAG (Retrieval-Augmented Generation)? Ты, вероятно, знаком с проблемами, которые создают таблицы и изображения. В этой статье рассматривается, как справиться с этими форматами с помощью моделей языка зрения, в частности с моделью ColPali.
Но сначала, что такое RAG — и почему таблицы и изображения так усложняют задачу?
RAG и синтаксический анализ
Представь, что ты столкнулся с таким вопросом:
Какова политика нашей компании в отношении возврата средств?
Базовая большая языковая модель (LLM, Large Language Model), вероятно, не сможет ответить на этот вопрос, поскольку такая информация специфична для компании и обычно не включена в обучающие данные модели.
Поэтому распространённым подходом является подключение LLM к базе знаний — например, к папке SharePoint, содержащей различные внутренние документы. Это позволяет модели извлекать и включать соответствующий контекст, что позволяет ей отвечать на вопросы, требующие специальных знаний. Этот метод известен как Retrieval-Augmented Generation (RAG), и он часто включает работу с документами в формате PDF.
Однако извлечение нужной информации из большой и разнообразной базы знаний требует тщательной предварительной обработки документов. Общие шаги включают:
- Синтаксический анализ: преобразование документов в текст и изображения, часто с помощью инструментов оптического распознавания символов (OCR), таких как Tesseract. Таблицы чаще всего преобразуются в текст.
- Сохранение структуры: сохранение структуры документа, включая заголовки, абзацы, путём преобразования извлечённого текста в формат, сохраняющий контекст, например, в Markdown.
- Разбиение на фрагменты: разделение или объединение текстовых фрагментов, чтобы контексты можно было загрузить в контекстное окно без того, чтобы фрагменты выглядели разрозненными.
- Обогащение: предоставление дополнительных метаданных, например, извлечение ключевых слов или предоставление сводки фрагментов для облегчения поиска. Дополнительно можно снабдить изображения описательными текстами с помощью мультимодальных LLM, чтобы сделать изображения доступными для поиска.
- Встраивание: встраивание текстов (и, возможно, изображений с помощью мультимодального встраивания) и хранение их в векторной базе данных.
Как ты можешь себе представить, этот процесс очень сложен, включает в себя множество экспериментов и очень хрупок. Более того, даже если бы мы попытались сделать это как можно лучше, этот синтаксический анализ может оказаться неэффективным.
Почему синтаксический анализ часто оказывается недостаточным
Таблицы и изображения часто существуют в PDF-файлах. На изображении ниже показано, как они обычно анализируются для использования в LLM:
- Тексты разбиваются на фрагменты.
- Таблицы превращаются в текст, всё, что содержится внутри, копируется без сохранения границ таблицы.
- Изображения подаются в мультимодальную LLM для генерации текстового резюме, или, как альтернатива, исходное изображение подаётся в мультимодальную модель встраивания без необходимости генерировать текстовое резюме.
Однако у такого традиционного подхода есть две существенные проблемы.
#1. Сложные таблицы не могут быть просто интерпретированы как тексты
Взяв эту таблицу в качестве примера, мы, как люди, интерпретировали бы, что изменение температуры на > 2˚C до 2,5˚C влияет на здоровье следующим образом: «Повышение температуры на 2,3˚C к 2080 году ставит под угрозу до 270 миллионов человек от малярии».
Однако, если мы преобразуем эту таблицу в текст, она будет выглядеть так:
Изменение температуры В пределах целевого показателя ЕС <(2˚C) >2˚C до 2,5˚C >3C Здоровье В глобальном масштабе оценивается, что повышение температуры на 2,3°C к 2080 году ставит до 270 миллионов человек под угрозу…
Результат — беспорядочный блок текста без какого-либо различимого смысла. Даже для человека-читателя невозможно извлечь из него какую-либо осмысленную информацию. Когда такой текст подаётся в большую языковую модель (LLM), она также не может дать точную интерпретацию.
#2. Диссоциация между текстами и изображениями
Описание изображения часто включено в тексты, и они неотделимы друг от друга. Например, мы знаем, что диаграмма представляет собой «Моделируемые затраты на изменение климата с различной чистой ставкой временного предпочтения и схемами снижения ставки дисконтирования (без учёта весовых коэффициентов по справедливости)».
Однако при таком анализе описание изображения (анализируемый текст) будет отделено от изображения (анализируемая диаграмма). Таким образом, мы можем ожидать, что во время RAG изображение не будет извлечено в качестве входных данных, когда мы зададим вопрос типа: «Какова стоимость изменения климата?»
Так что, даже если мы попытаемся разработать решения, которые максимально сохранят информацию во время синтаксического анализа, они часто оказываются неэффективными при столкновении с реальными сценариями.
Учитывая, насколько критичен синтаксический анализ в приложениях RAG, означает ли это, что агенты RAG обречены на провал при работе со сложными документами? Конечно, нет. С ColPali у нас есть более усовершенствованный и эффективный подход к работе с ними.
Что такое ColPali?
Основная предпосылка ColPali проста: люди читают PDF-файлы как страницы, а не как «фрагменты», поэтому имеет смысл относиться к PDF-файлам именно так. Вместо того чтобы проходить через сложный процесс синтаксического анализа, мы просто превращаем страницы PDF в изображения и используем их в качестве контекста для LLM, чтобы предоставить ответ.
Теперь идея встраивания изображений с помощью мультимодальных моделей не нова — это распространённый метод. Так что же отличает ColPali? Ключ кроется в его вдохновении ColBERT, моделью, которая встраивает входные данные в мультивекторы, обеспечивая более точный и эффективный поиск.
ColBERT: детальное, контекстуально-ориентированное встраивание текстов
ColBERT — это метод встраивания текстов и их переранжирования, который использует мультивекторы для повышения точности поиска текстов.
Давайте рассмотрим этот случай: у нас есть вопрос: «Пол веган?», нам нужно определить, какой текстовый фрагмент содержит соответствующую информацию.
Жёлтым выделены тексты, которые содержат информацию о Поле.
В идеале мы должны идентифицировать Text Chunk A как наиболее релевантный. Но если мы используем одновекторную модель встраивания (text-ada-002), она вернёт Text Chunk B вместо этого.
Причина кроется в том, как работают одновекторные биэнкодеры — такие как text-ada-002. Они пытаются сжать целое предложение в один вектор, не кодируя отдельные слова контекстуально. В отличие от этого, ColBERT встраивает каждое слово с учётом контекста, что приводит к более богатому мультивекторному представлению, которое захватывает более тонкую информацию.
ColPali: брат ColBERT для работы с документами в виде изображений
ColPali следует аналогичной философии, но применяет её к документам в виде изображений. Так же, как ColBERT разбивает текст и встраивает каждое слово по отдельности, ColPali делит изображение на фрагменты и генерирует вложения для каждого фрагмента. Этот подход сохраняет больше контекстуальных деталей изображения, что позволяет более точно и осмысленно интерпретировать его.
Помимо более высокой точности поиска, преимущества ColPali включают:
- Объяснимость: ColPali позволяет сравнивать слова между запросом и отдельными фрагментами изображения документа. Это позволяет нам чётко понимать и обосновывать, почему конкретный документ считается более релевантным.
- Снижение усилий по разработке и повышение надёжности: устраняя необходимость в сложных конвейерах предварительной обработки — таких как разбиение на фрагменты, OCR и синтаксический анализ макета — ColPali значительно сокращает время разработки и минимизирует потенциальные точки отказа.
- Повышение производительности: процессы встраивания и поиска выполняются быстрее, что приводит к повышению общей отзывчивости системы.
Теперь, когда вы знаете, что такое ColPali, давайте углубимся в код и посмотрим, сможет ли ColPali решить проблемы, о которых мы говорили ранее!
