Поделиться через


Этап сегментации RAG

После сбора тестовых документов и запросов и выполнения анализа документов во время этапа подготовки вы перейдете к следующему этапу, который является фрагментированием. Фрагментирование заключается в том, что вы разбиваете документы на соответствующие фрагменты, которые содержат семантически значимое содержимое. Это важно для успешной реализации дополненной генерации (RAG). Если вы пытаетесь передать целые документы или крупные фрагменты, это дорого, может перегрузить лимиты токенов модели и не дает наилучших результатов. Кроме того, если вы передаете информацию в языковую модель, которая не имеет значения для запроса, это может привести к неточным или несвязанным ответам. Для оптимизации процесса, передачи соответствующих сведений и удаления неактуальной информации необходимо использовать эффективные стратегии разбиения на фрагменты и поиска. Этот подход сводит к минимуму ложные положительные и ложные отрицательные, а также максимизирует истинные положительные и истинные отрицательные.

Блоки, которые слишком малы и не содержат достаточно контекста для решения запроса, могут привести к плохому результату. Соответствующий контекст, который существует в нескольких блоках, может не быть записан. Ключ заключается в реализации эффективных подходов к разбиению для конкретных типов документов и их конкретных структур и содержания. Существуют различные подходы к анализу фрагментов, каждый из которых имеет собственные последствия затрат и эффективность, в зависимости от типа и структуры документа, к которому они применяются.

В этой статье описываются различные подходы к фрагментации и рассматриваются способы влияния структуры документов на выбранный подход.

Эта статья является частью серии. Ознакомьтесь с введением , прежде чем продолжить.

Понимание экономики разбиения на блоки

При определении общей стратегии разбиения на части учитывайте требования к бюджету, качеству и скорости обработки для сбора документов. Существуют инженерные затраты на проектирование и реализацию каждой уникальной реализации блоков и затраты на обработку документов, которые отличаются в зависимости от подхода. Если документы содержат внедренные или связанные носители, необходимо учитывать экономику обработки этих элементов. Для фрагментирования эта обработка обычно использует языковые модели для создания описания носителя. Затем эти описания разбиваются на блоки. Альтернативный подход для некоторых медиа заключается в передаче их в неизменённом виде в многомодальную модель во время инференса. Но этот подход не влияет на экономику разбиения.

В следующих разделах рассматривается экономика фрагментирования изображений и общее решение.

Общие сведения об экономике фрагментирования изображений

Языковая модель, которая создает описание разбитого вами на части изображения, влечет за собой дополнительные затраты. Например, за облачные службы, такие как Azure OpenAI в моделях Foundry, взимается плата за каждую транзакцию или по предварительной оплате. Более крупные изображения повлечет за собой большую стоимость. С помощью анализа документов вы определяете, какие изображения важны для фрагментирования и какие изображения следует игнорировать. Оттуда необходимо понять количество и размеры изображений в решении. Затем вы оцениваете целесообразность фрагментирования описаний изображений с учетом затрат на генерацию этих описаний.

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

  • Создайте собственную модель классификатора. Если вы используете этот подход, убедитесь, что вы считаете затраты на сборку, размещение и обслуживание собственной модели.

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

Другая стратегия оптимизации затрат — кэшировать с помощью шаблонаCache-Aside. Ключ можно создать на основе хэша изображения. Сначала проверьте наличие кэшированного результата из предыдущего или ранее обработанного документа. Если так, вы можете использовать этот результат. Такой подход устраняет затраты на вызов классификатора или языковой модели. Если кэш отсутствует, при вызове классификатора или языковой модели вы кэшируете результат. Будущие вызовы этого образа используют кэш.

Следующий рабочий процесс интегрирует эти процессы оптимизации затрат:

  1. Проверьте, кэшируется ли обработка изображений. В этом случае используйте кэшированные результаты.

  2. Запустите классификатор, чтобы определить, следует ли обрабатывать образ. Кэшируйте результат классификации. Если логика классификации определяет, что изображение добавляет значение, перейдите к следующему шагу.

  3. Создайте описание изображения. Кэшируйте результат.

Рассмотрим экономику общего решения

При оценке стоимости общего решения следует учитывать следующие факторы:

  • Число уникальных реализаций разбиения на части: Каждая уникальная реализация имеет затраты на инжиниринг и обслуживание. Рассмотрим количество уникальных типов документов в коллекции и затраты и компромиссы по качеству уникальных реализаций для каждого из них.

  • Стоимость каждого документа для каждой реализации: Некоторые подходы к блокам могут привести к повышению качества блоков, но имеют более высокие финансовые и временные затраты для создания этих блоков. Например, использование предварительно созданной модели в Аналитике документов Azure, скорее всего, имеет более высокую стоимость для каждого документа, чем реализация анализа чистого текста, но может привести к улучшению фрагментов.

  • Количество исходных документов: Количество исходных документов, которые необходимо обработать для запуска решения.

  • Количество добавочных документов: Количество и скорость новых документов, которые необходимо обрабатывать для постоянного обслуживания системы.

Общие сведения о загрузке и блоке

Во время фрагментирования необходимо сначала загрузить документ в память в определенном формате. Затем код, выполняющий фрагментирование, работает с представлением документа в памяти. Вы можете объединить код загрузки с фрагментированием или разделить загрузку на собственный этап. Выберите подход на основе ограничений архитектуры и ваших предпочтений. В следующих разделах кратко рассматриваются оба варианта и предоставляются общие рекомендации.

Разделение загрузки и разбиение на части

Существует несколько причин, по которым вы могли бы предпочесть разделять этапы загрузки и разделения на части. Может потребоваться инкапсулировать логику в коде загрузки. Вы можете сохранить результат выполнения кода загрузки перед разбиением на части, особенно когда вы экспериментируете, попробуя разные варианты разбиения, чтобы сэкономить время обработки или затраты. Наконец, может потребоваться выполнить загрузку и разбиение кода в отдельных процессах по архитектурным причинам, например для сегментации процессов или безопасности, включая удаление персональных данных.

Инкапсулировать логику в коде загрузки

Вы можете инкапсулировать логику предварительной обработки на этапе загрузки. Этот подход упрощает фрагментирование кода, так как он не требует предварительной обработки. Предварительная обработка может быть такой простой, как удаление или аннотирование тех частей документа, которые вы хотите игнорировать при анализе документов. Например, может потребоваться удалить подложки, верхние и нижние колонтитулы. Или предварительная обработка может включать более сложные задачи, такие как переформатирование документа. Например, можно включить следующие задачи предварительной обработки на этапе загрузки:

  • Удалите или заметите элементы, которые вы хотите игнорировать.

  • Замените ссылки на изображения описаниями изображений. На этом этапе используется большая языковая модель для создания описания изображения и обновления документа с этим описанием. Если во время анализа документов вы найдете окружающий текст, предоставляющий ценный контекст, можно передать текст и изображение в большую языковую модель.

  • Скачайте или скопируйте изображения в хранилище файлов, например Azure Data Lake Storage, которые будут обрабатываться отдельно от текста документа. Если во время анализа документов вы найдете окружающий текст, предоставляющий ценный контекст для изображения, этот текст можно сохранить вместе с изображением в хранилище файлов.

  • Переформатируйте таблицы, чтобы их было проще обработать.

  • Определите структуру документов на основе заголовков, подзаголовок и других структурных элементов. Используйте инструменты, такие как Аналитика документов, когда это возможно, для снижения затрат на разработку. Кроме того, вы можете использовать библиотеку, например Python, если у вас есть конфиденциальные данные, которые невозможно отправить во внешнюю систему.

Сохранение результата загрузки кода

Существует несколько причин, по которым можно сохранить результат выполнения кода. Если вы хотите иметь возможность проверить документы после их загрузки и предварительной обработки, но перед выполнением логики сегментации. Или вы хотите запустить различную логику разбиения на части для одного предварительно обработанного кода во время разработки или в производственной среде. Сохранение загруженного кода ускоряет процесс.

Запуск загрузки и разбиения кода в отдельных процессах

Когда вы разделяете процессы, это помогает запускать несколько реализаций разбиения на части по одному и тому же предварительно обработанному коду. Вы также можете запускать код загрузки и разбиения на блоки в разных вычислительных средах и на разном оборудовании. Эта конструкция позволяет самостоятельно масштабировать вычислительные мощности, используемые для загрузки и дробления.

Объединение загрузки и блокирования

В большинстве случаев объединение кода загрузки и фрагментирования является более простой реализацией. Многие операции предварительной обработки, которые вы могли бы выполнять на отдельном этапе загрузки, могут выполняться во время этапа разбиения на части. Например, вместо замены URL-адресов изображений описанием на этапе загрузки, логика разбиения может обращаться к большой языковой модели, чтобы получить текстовое описание и разбивать это описание на части.

Если у вас есть форматы документов, такие как HTML, содержащие теги со ссылками на изображения, убедитесь, что средство чтения или синтаксического анализа не удаляет теги. Код фрагментирования должен иметь возможность определять ссылки на изображения.

Рассмотрим рекомендации по разбиению на части

Следует рассмотреть следующие рекомендации о том, следует ли объединять или разделять вашу логику сегментации.

  • Начните с объединения логики загрузки и разделения на блоки. Разделите их, если этого требует решение.

  • Не следует преобразовывать документы в промежуточный формат, если вы решили разделить процессы. Этот тип операции может привести к потере данных.

Ознакомьтесь с подходами к фрагментации

В этом разделе представлен обзор распространенных подходов к разделению на части. В реализации можно использовать несколько подходов, таких как объединение использования языковой модели для получения текстового представления изображения со многими перечисленными подходами.

Сводная матрица принятия решений сопровождает каждый подход. Матрица выделяет инструменты, связанные затраты и другие аспекты. Затраты на проектирование и обработку, описанные здесь, являются субъективными и включены для относительного сравнения.

Это важно

Ваш подход к разбиению на фрагменты — это полупостоянный выбор в общем дизайне решения. Тщательно сравнивайте подходы, чтобы найти оптимальный вариант использования и тип контента до выбора одного из них в рабочей среде. При изменении стратегий разбиения на части это может значительно повлиять на последующие процессы и потребовать изменения в рабочем процессе.

Синтаксический анализ фиксированного размера с перекрытием

Этот подход разбивает документ на блоки на основе фиксированного количества символов или маркеров и позволяет перекрывать символы между блоками. Этот подход имеет множество одинаковых преимуществ и недостатков, что и синтаксический анализ на основе предложений. Одним из преимуществ этого подхода по сравнению с синтаксическим анализом на основе предложений является возможность получения блоков с семантических значений, охватывающих несколько предложений.

Необходимо выбрать фиксированный размер блоков и количество перекрытий. Так как результаты зависят от разных типов документов, лучше всего использовать инструмент, такой как визуализатор фрагментов Hugging Face, для проведения исследовательского анализа. Вы можете использовать такие средства, чтобы визуализировать фрагменты документов на основе ваших решений. При использовании синтаксического анализа фиксированного размера следует использовать представления двунаправленного кодировщика из маркеров преобразователей (BERT). Маркеры BERT основаны на значимых единицах языка, поэтому они сохраняют больше семантической информации, чем число символов.

Инструменты:Рекурсивный разбиватель текста LangChain, визуализатор фрагментов Hugging Face
Инженерные усилия: Минимальные
Затраты на обработку: Низкий
Варианты использования: Неструктурированные документы, написанные на прозе или непрозе с полными или неполными предложениями. Коллекция документов содержит чрезмерное количество различных типов документов, требующих индивидуальных стратегий разбиения.
Примеры: Созданное пользователем содержимое, например открытые отзывы от опросов, публикации форума, отзывы, сообщения электронной почты, личные заметки, заметки и списки исследований

Семантическое фрагментирование

Этот подход использует внедрение для группировки концептуально аналогичного содержимого в документе для создания блоков. Семантическое разбиение может легко создавать понятные сегменты, которые тесно соответствуют темам содержимого. Логика этого подхода может искать документ или набор документов, чтобы найти повторяющиеся сведения и создать блоки, которые группируют упоминания или разделы вместе. Этот подход может быть более дорогостоящим, так как требует разработки сложной пользовательской логики.

Инструменты: Настраиваемая реализация. Средства обработки естественного языка (NLP), такие как spaCy, могут помочь в синтаксическом анализе на основе предложений.
Инженерные усилия: Высокие
Затраты на обработку: Высокий
Варианты использования: Документы, которые имеют тематическое пересечение в разделах
Примеры: Документация, ориентированная на финансовые или медицинские услуги

Пользовательский код

Этот подход анализирует документы с помощью пользовательского кода для создания блоков. Подход к пользовательскому коду лучше подходит для текстовых документов, в которых структура известна или может быть выведена. Для подхода с использованием пользовательского кода требуется высокий уровень контроля над созданием сегментов. Вы можете использовать методы синтаксического анализа текста, такие как регулярные выражения, для создания блоков на основе шаблонов в структуре документа. Цель — создать блоки, имеющие аналогичный размер и блоки с разным содержимым. Многие языки программирования обеспечивают поддержку регулярных выражений, а некоторые имеют библиотеки или пакеты, обеспечивающие более элегантные функции обработки строк.

Сервис:Python (re, regex, BeautifulSoup, lxml, html5lib, marko), R (stringr, xml2), Джулия (Gumbo.jl)
Инженерные усилия: Средняя
Затраты на обработку: низкая
Варианты использования: Полуструктурированные документы, в которых можно вывести структуру
Примеры: Заявки на патенты, исследовательские документы, страховые политики, сценарии и сцены

Расширение языковой модели

Для создания блоков можно использовать языковые модели. Например, используйте большую языковую модель, например GPT-4, для создания текстовых представлений изображений или сводок таблиц, которые становятся блоками. Расширение языковой модели часто используется с другими подходами к разбиению на части, таким как пользовательский код.

Если анализ документов определяет, что текст до или после изображения помогает ответить на некоторые вопросы о требованиях, передайте этот дополнительный контекст в языковую модель. Важно поэкспериментировать, чтобы определить, улучшает ли этот дополнительный контекст производительность решения.

Если логика фрагментирования разбивает описание изображения на несколько блоков, добавьте URL-адрес изображения в каждый блок, чтобы убедиться, что метаданные возвращаются для всех запросов, которые служит изображение. Этот шаг имеет решающее значение для сценариев, когда пользователю необходимо получить доступ к исходному изображению через этот URL-адрес или использовать необработанные изображения во время вывода.

Сервис:Azure OpenAI, OpenAI
Инженерные усилия: Средняя
Затраты на обработку: Высокий
Варианты использования: Изображения, таблицы
Примеры: Создание текстовых представлений таблиц и изображений, обобщение расшифровок из собраний, речевых выступлений, интервью или подкастов

Анализ макета документа

Библиотеки и службы анализа макета документов объединяют возможности оптического распознавания символов (OCR) с моделями глубокого обучения для извлечения структуры и текста документов. Структурные элементы могут включать верхние колонтитулы, заголовки, заголовки разделов, таблицы и цифры. Цель заключается в том, чтобы обеспечить более семантический смысл содержимого, содержащегося в документах.

Библиотеки и службы анализа макета документов предоставляют модель, представляющую структурное и текстовое содержимое документа. Вам по-прежнему нужно написать код, взаимодействующий с моделью.

Замечание

Аналитика документов — это облачная служба, требующая отправки документа. Необходимо убедиться, что правила безопасности и соответствия позволяют отправлять документы в такие службы.

Модели анализа документовTools:Document Intelligence, Donut, Layout Parser
Инженерные усилия: Средняя
Затраты на обработку: Средние
Варианты использования: Полуструктурированные документы
Примеры: Новости, веб-страницы и резюме

Разбиение на части на основе графа

Блоки на основе графов — это итеративный подход, который включает использование языковой модели для поиска сущностей, таких как ключевые слова, в документах и построения графа на основе их связей. Вы можете начать с более простой стратегии разбиения (chunking), например с использованием структур, основанных на абзацах, чтобы сделать процесс построения графа более эффективным. После создания начальных блоков можно проанализировать каждый из них, чтобы найти сущности и связи и построить глобальную структуру графа. Вы можете добавить граф, итерируя через блоки.

Сервис:Microsoft GraphRAG, Neo4J
Инженерные усилия: Высокие
Затраты на обработку: Высокий
Варианты использования: Разнообразные статистические данные
Примеры: Спортивная аналитика, исторические данные и любой домен, требующий незапланированных количественных запросов в документах

Предварительно созданная модель

Такие службы, как аналитика документов, предоставляют предварительно созданные модели, которые можно использовать для различных типов документов. Некоторые модели обучены для определенных типов документов, таких как налоговая форма США W-2, а другие предназначены для более широкого жанра типов документов, таких как счета.

Средства:предварительно созданные модели Аналитики документов, интеллектуальная обработка документов Power Automate, LayoutLMv3
Инженерные усилия: Минимальные
Затраты на обработку: Средний или высокий
Варианты использования: Структурированные документы, в которых существует предварительно созданная модель
Примеры: Счета, квитанции, карты медицинского страхования и формы W-2

Настраиваемая модель

Для высокоструктурированных документов, в которых не существует предварительно созданной модели, может потребоваться создать пользовательскую модель. Этот подход может быть эффективным для изображений или документов с высокой структурой, что делает использование методов синтаксического анализа текста трудным.

Tools:Document Intelligence custom models, Tesseract
Инженерные усилия: Высокие
Затраты на обработку: Средний или высокий
Варианты использования: Структурированные документы, в которых предварительно созданная модель не существует
Примеры: Расписания ремонта и обслуживания автомобилей, академические расшифровки, записи, технические руководства, операционные процедуры и рекомендации по обслуживанию

Синтаксический анализ на основе предложений

Синтаксический анализ на основе предложений — это простой подход, который разбивает текстовые документы на блоки, которые состоят из полных предложений. Используйте этот подход в качестве резервного решения, если ни один из других подходов, описанных здесь, соответствует вашему варианту использования. Преимущества этого подхода включают низкие затраты на реализацию и обработку и его применимость к любому текстовому документу, который содержит прозе или полные предложения. Одним из недостатков этого подхода является то, что каждый блок может не захватывать полный контекст идеи или смысла. Для записи семантического значения часто необходимо объединить несколько предложений.

Инструменты:токенизатор предложений spaCy, LangChain рекурсивный разделитель текста, токенизатор предложений NLTK
Инженерные усилия: Минимальные
Затраты на обработку: Низкий
Варианты использования: Неструктурированные документы, написанные в прозе или полные предложения. Коллекция документов содержит чрезмерное количество различных типов документов, для которых требуются отдельные стратегии разделения.
Примеры: Созданное пользователем содержимое, например открытые отзывы от опросов, публикации форумов, отзывы, сообщения электронной почты, романы или эссе

Структура документа

Документы зависят от типа структуры. Некоторые документы, такие как формы правительства, имеют сложную и хорошо известную структуру, например налоговую форму США W-2. На противоположном конце спектра находятся неструктурированные документы, например заметки в свободной форме. Степень структуры в типе документа является хорошей отправной точкой для определения эффективного подхода к фрагментации. Несмотря на отсутствие конкретных правил, в этом разделе приведены некоторые рекомендации.

Схема, показывающая подходы к разбиению на части по структуре документа.

На схеме показана структура документа с высокой до низкой на оси X. Диапазон варьируется от (высокоструктурированного), полуструктурированного, выводимого и неструктурированного (низкого). В следующей строке показаны примеры с W-2 между высоким и структурированным. В нем показан счёт между структурированными и полуструктурированными данными. Показана веб-страница между полуструктурированной и выведенной. В нем показаны правила Европейского союза (ЕС) между инферированными и неструктурированными данными, а в заключение — заметками о поле между неструктурированными данными и данными с низким уровнем. По оси X расположены шесть подходов к разбиению на части. Каждый подход указывает, где это наиболее эффективно. Предварительно созданные модели наиболее эффективны для структурированных документов. Пользовательские модели наиболее эффективны для полуструктурированных документов. Модели анализа документов наиболее эффективны для полуструктурированных и документов с предполагаемыми данными. Пользовательский программный код наиболее эффективен для полуструктурированных до подразумеваемых документов. Подходы на основе границ наиболее эффективны для вывода неструктурированных документов. Подходы, основанные на предложениях, наиболее эффективны для обработки неструктурированных документов.

структурированные документы.

Структурированные документы, иногда называемые документами фиксированного формата, содержат определенные макеты. Данные в этих документах находятся в фиксированных расположениях. Например, дата или имя семьи клиента находится в одном расположении каждого документа с одинаковым фиксированным форматом.

Документы фиксированного формата могут быть сканированными изображениями оригинальных документов, заполненных вручную или имеющих сложные макетные структуры. Этот формат затрудняет обработку с помощью базового подхода синтаксического анализа текста. Типичный подход к обработке сложных структур документов заключается в использовании моделей машинного обучения для извлечения данных и применения семантического значения к этим данным, когда это возможно.

Примеры: Форма W-2 и страховая карта
Типичные подходы: Предварительно созданные модели и пользовательские модели

Полуструктурированные документы

Полуструктурированные документы не имеют фиксированного формата или схемы, например формы W-2, но обеспечивают согласованность в отношении формата или схемы. Например, счета различаются в макете, но обычно они имеют согласованную схему. Вы можете ожидать, что в счете будет номер счета, а также указаны имя и адрес в качестве адреса для выставления счета и адреса доставки, среди других данных. Веб-страница может не иметь согласованности схем, но они имеют аналогичные структурные или макетные элементы, такие как текст, название, H1 и p , которые могут добавить семантический смысл в окружающий текст.

Как и структурированные документы, полуструктурированные документы с сложными структурами макетов трудно обрабатывать с помощью анализа текста. Для этих типов документов модели машинного обучения являются хорошим подходом. Существуют предварительно созданные модели для определенных доменов с согласованными схемами, такими как счета, контракты или документы медицинского страхования. Рассмотрите возможность создания пользовательских моделей для сложных структур, в которых не существует предварительно созданной модели.

Примеры: Счета, квитанции, веб-страницы и файлы Markdown
Типичные подходы: Модели анализа документов

Структура на основе предположений

Некоторые документы имеют структуру, но не написаны в разметке. Для этих документов структура должна быть определена. Хорошим примером является следующий документ о регулировании ЕС.

Схема, показывающая регулирование ЕС в качестве примера документа с выводной структурой.

Так как вы можете четко понять структуру документа, и для нее нет известных моделей, необходимо написать пользовательский код. Этот формат документа может не гарантировать создание пользовательской модели в зависимости от количества различных документов этого типа, с которыми вы работаете. Например, если ваша коллекция содержит все нормативные акты ЕС или законы штата США, пользовательская модель может быть хорошим подходом. Если вы работаете с одним документом, например регулированием ЕС в примере, пользовательский код может оказаться более экономичным.

Примеры: Юридические документы, скрипты и спецификации производства
Типичные подходы: Пользовательский код и пользовательские модели

Неструктурированные документы

Хороший подход к документам, у которых мало или совсем нет структуры, включает использование методов, основанных на предложениях, или фиксированных размеров с перекрытием.

Примеры: Созданное пользователем содержимое, например открытые отзывы от опросов, публикации форумов, отзывы, сообщения электронной почты, личные заметки и заметки о исследованиях
Типичные подходы: на основе предложений или границ с перекрытием.

Экспериментирование

В этой статье описываются наиболее подходящие подходы к разбиению на части для каждого типа документа, но на практике любой из подходов может быть уместным для всех типов документов. Например, синтаксический анализ на основе предложений может быть подходящим для высокоструктурированных документов, или пользовательская модель может быть подходящей для неструктурированных документов. Часть оптимизации вашего решения RAG заключается в экспериментировании с различными подходами к сегментированию. Учитывая количество ваших ресурсов, технический профессионализм ваших сотрудников и объем документов, требующих обработки. Чтобы достичь оптимальной стратегии разделения на фрагменты, протестируйте каждый подход и оцените преимущества и компромиссы, чтобы убедиться, что вы выбрали оптимальный подход для вашего применения.

Следующий шаг

Этап обогащения блока