Теперь, когда вы собрали тестовые документы и запросы и выполнили анализ документов на этапе подготовки, следующий этап — фрагментирование. Разбиение документов в коллекцию блоков правого размера, каждая из которых содержит семантическое содержимое, является ключевым фактором в успешном выполнении реализации извлечения дополненного поколения (RAG). Передача целых документов или переполненных блоков является дорогой, может перегружены ограничения маркеров модели и не дает наилучших результатов. Передача информации в большую языковую модель, которая не имеет значения для запроса, может привести к галлюцинации. Необходимо оптимизировать процесс передачи соответствующих сведений и удаления неуместных сведений. Вы делаете эту оптимизацию с помощью эффективных стратегий блокирования и поиска, чтобы свести к минимуму ложные срабатывания и ложные отрицательные значения, а также максимизировать истинные положительные и истинные отрицательные.
Передача блоков, которые слишком малы и не содержат достаточно контекста для решения запроса, также приводит к плохим результатам. Соответствующий контекст, который существует в нескольких блоках, может не быть записан. Искусство реализует эффективные подходы к блокировкам для конкретных типов документов и их структур и содержимого. Существуют различные подходы к анализу фрагментов, каждый из которых имеет свои собственные последствия и эффективность, в зависимости от типа и структуры документа, к которым они применяются.
В этой статье описываются различные подходы к фрагментации и рассматриваются способы влияния структуры документов на выбранный подход.
Этот материал входит в цикл статей. Ознакомьтесь с введением.
Блокирование экономики
При определении общей стратегии блокирования необходимо учитывать бюджет вместе с требованиями к качеству и пропускной способности для корпусов документов. Существуют инженерные затраты на проектирование и реализацию каждой уникальной реализации блока и затраты на обработку документов, которые отличаются в зависимости от подхода. Если документы имеют внедренные или связанные носители, необходимо учитывать экономику обработки этих элементов. Для фрагментирования эта обработка обычно использует языковые модели для создания описания носителя, а затем эти описания блокируются. Альтернативный подход с некоторыми средствами массовой информации заключается в том, чтобы передать их как есть в многофакторную модель при выводе времени, но этот подход не повлияет на блоки экономики.
В этом разделе рассматривается экономика как фрагментирования изображений, так и общего решения.
Экономика фрагментирования изображений
Существует стоимость использования языковой модели для создания описания изображения, который затем блокируется. Например, облачные службы, такие как Azure OpenAI, взимается за базовую транзакцию или на основе предоплаченной подготовки. Более крупные изображения повлечет за собой большую стоимость. С помощью анализа документов необходимо определить, какие изображения важны для фрагментирования и какие изображения следует игнорировать. Оттуда необходимо понять количество и размеры изображений в решении, и следует взвесить значение фрагментирования описаний изображений по стоимости создания этих описаний.
Один из способов определить, какие изображения следует обрабатывать, — использовать службу, например Azure AI Vision для классификации изображений, тегов изображений или обнаружения логотипов. Затем можно использовать индикаторы результатов и достоверности, чтобы определить, добавляет ли изображение значимые, контекстные значения и должна ли обрабатываться. Вызовы Azure AI Vision могут быть менее дорогими, чем вызовы языковых моделей, поэтому этот подход может привести к экономии затрат. Необходимо поэкспериментировать, чтобы определить, какие уровни достоверности и какие классификации или теги обеспечивают наилучшие результаты для данных. Другим вариантом является создание собственной модели классификатора. Необходимо учитывать затраты на строительство, размещение и обслуживание собственной модели классификатора.
Другая оптимизация затрат — кэширование с помощью шаблона кэширования в сторону кэша. Ключ можно создать на основе хэша изображения. На первом шаге можно проверить наличие кэшированного результата из предыдущего или ранее обработанного документа. В этом случае можно использовать этот результат. Такой подход позволяет вам от затрат на вызов классификатора или языковой модели. Если кэш не существует, при вызове классификатора или языковой модели вы кэшируете результат. Будущие вызовы этого образа будут использовать кэш.
Простой рабочий процесс, интегрирующий все эти процессы оптимизации затрат, будет следующим:
- Проверьте, кэширована ли обработка изображений. В этом случае используйте кэшированные результаты.
- Запустите классификатор, чтобы определить, следует ли обрабатывать изображение. Кэшируйте результат классификации. Только если логика классификации сообщает вам об этом.
- Создайте описание изображения. Кэшируйте результат.
Экономика общего решения
Ниже приведены факторы, которые следует учитывать при просмотре стоимости общего решения.
- Количество уникальных реализаций блокирования. Каждая уникальная реализация имеет как затраты на проектирование, так и на обслуживание. Необходимо учитывать количество уникальных типов документов в корпусе и затратах и компромиссах по качеству уникальных реализаций для каждого.
- Затраты на документ для каждой реализации . Некоторые подходы к блокам могут привести к повышению качества блоков, но имеют более высокие финансовые и временные затраты для создания этих блоков. Например, использование предварительно созданной модели в Azure AI Document Intelligence, скорее всего, имеет более высокую стоимость для каждого документа, чем реализация анализа чистого текста, но может привести к улучшению фрагментов.
- Количество первоначальных документов — количество исходных документов , которые необходимо обработать для запуска решения.
- Количество добавочных документов — количество и скорость новых документов, которые необходимо обрабатывать для текущего обслуживания системы.
Загрузка и блокирование
Логически во время блокирования необходимо сначала загрузить документ в память в определенном формате. Затем код фрагментирования работает с представлением документа в памяти. Вы можете объединить код загрузки с блоками или разделить загрузку на свой собственный этап. Выбранный подход должен в значительной степени зависеть от архитектурных ограничений и ваших предпочтений. В этом разделе кратко рассматриваются оба варианта, а затем приведены некоторые общие рекомендации.
Разделение загрузки и блокирования
Существует несколько причин, по которым можно разделить этапы загрузки и блокирования. Может потребоваться инкапсулировать логику в коде загрузки. Вы можете сохранить результат загрузки кода перед блокированием, особенно при эксперименте с различными перемыканиями, чтобы сэкономить время обработки или затраты. Наконец, может потребоваться запустить код загрузки и блокирования в отдельных процессах по архитектурным причинам, таким как сегментация процессов или сегментация безопасности с удалением ПИН-кода.
Инкапсулировать логику в коде загрузки
Вы можете инкапсулировать логику предварительной обработки на этапе загрузки. Это упрощает фрагментирование кода, так как не требуется выполнять предварительную обработку. Предварительная обработка может быть как простой, так как удаление или нонотирование частей документа, которые вы определили, что вы хотите игнорировать в анализе документов, таких как подложки, верхние и нижние колонтитулы или как сложные, как переформатирование документа. Ниже приведены некоторые примеры предварительной обработки, которые можно инкапсулировать на этапе загрузки:
- Удалите или заметите элементы, которые вы хотите игнорировать.
- Замените ссылки на изображения описаниями изображений. На этом этапе вы используете LLM для создания описания изображения и обновления документа с этим описанием. Если вы определили в анализе документа, который содержит окружающий текст, который предоставляет ценный контекст для изображения, передайте его вместе с изображением в LLM.
- Скачайте или скопируйте изображения в хранилище файлов, например Azure Data Lake, которые будут обрабатываться отдельно от текста документа. Если вы определили в анализе документа, который содержит окружающий текст, который предоставляет ценный контекст для изображения, необходимо сохранить этот текст вместе с изображением в хранилище файлов.
- Переформатировать таблицы, чтобы их было проще обработать.
Сохранение результата загрузки кода
Существует несколько причин, по которым можно сохранить результат загрузки кода. Одной из причин является возможность проверки документов после их загрузки и предварительной обработки, но перед выполнением логики блокирования. Другая причина заключается в том, что может потребоваться выполнить другую логику блокирования для одного предварительно обработанного кода во время разработки или в рабочей среде. Сохранение загруженного кода ускоряет этот процесс.
Выполнение загрузки и блокирования кода в отдельных процессах
Разделение кода загрузки и блокирования на отдельные процессы позволяет запускать несколько реализаций блокирования в одном и том же предварительно обработанном коде. Это разделение также позволяет выполнять загрузку и блокирование кода в разных вычислительных средах и на другом оборудовании. Кроме того, эта конструкция позволяет независимо масштабировать вычислительные ресурсы, используемые для загрузки и блокирования.
Объединение загрузки и блокирования
Объединение кода загрузки и блока является более простой реализацией в большинстве случаев. Многие операции, которые можно рассмотреть при предварительной обработке в отдельном этапе загрузки, можно выполнить на этапе блокирования. Например, вместо замены URL-адресов изображений описанием на этапе загрузки логика блокирования может вызывать LLM, чтобы получить текстовое описание и фрагментировать описание.
Если у вас есть форматы документов, такие как HTML с тегами со ссылками на изображения, необходимо убедиться, что средство чтения или синтаксического анализа использует код фрагментирования, не удаляет теги. Код фрагментирования должен иметь возможность определять ссылки на изображения.
Рекомендации
Ниже приведены некоторые рекомендации, которые следует учитывать при определении того, объединяете ли вы или отделяете логику блокирования.
- Начните с объединения логики загрузки и фрагментирования. Разделите их, если решение требует его.
- Не следует преобразовывать документы в промежуточный формат, если вы решили разделить процессы. Такие операции могут быть потеряны.
Подходы к фрагментации
В этом разделе представлен обзор некоторых распространенных подходов к блокированиям. Этот список не является исчерпывающим, скорее, некоторые распространенные подходы к репрезентативным подходам. В реализации можно использовать несколько подходов, таких как объединение использования крупной языковой модели для получения текстового представления изображения со многими перечисленными подходами.
Каждый подход сопровождается сводной матрицей принятия решений, которая выделяет инструменты, связанные затраты и многое другое. Затраты на проектирование и обработку являются субъективными и включаются для относительного сравнения.
Синтаксический анализ на основе предложений
Этот простой подход разбивает текстовые документы на блоки, состоящие из полных предложений. Преимущества этого подхода включают в себя то, что оно недорого реализовать, оно имеет низкую стоимость обработки, и его можно применять к любому текстовому документу, написанному в прозе или полных предложениях. Проблема с этим подходом заключается в том, что каждый блок может не захватывать полный контекст мысли или смысла. Часто для захвата семантического значения необходимо объединить несколько предложений.
Средства: токенизатор предложений SpaCy, рекурсивный разделитель текста LangChain, токенизатор предложения NLTK
Инженерные усилия: низкая
Затраты на обработку: низкая
Варианты использования: неструктурированные документы, написанные в прозе, или полные предложения, и корпус документов содержит запретительное количество различных типов документов для создания отдельных стратегий блокирования для
Примеры: созданное пользователем содержимое, например открытые отзывы от опросов, публикации форума, отзывы, сообщения электронной почты, роман или эссе
Синтаксический анализ фиксированного размера (с перекрытием)
Этот подход разбивает документ на блоки на основе фиксированного количества символов или маркеров и позволяет перекрывать некоторые символы между блоками. Этот подход имеет множество одинаковых преимуществ и недостатков, что и синтаксический анализ на основе предложений. Преимуществом этого подхода является синтаксический анализ на основе предложений, что можно получить блоки с семантическим значением, охватывающим несколько предложений.
Необходимо выбрать фиксированный размер блоков и количество перекрытий. Так как результаты отличаются для разных типов документов, лучше всего использовать инструмент, такой как блок-визуализатор HuggingFace для выполнения анализа. Такие инструменты позволяют визуализировать фрагменты документов, учитывая ваши решения. Рекомендуется использовать маркеры BERT по счетчикам символов при использовании синтаксического анализа фиксированного размера. Маркеры BERT основаны на значимых единицах языка, поэтому они сохраняют больше семантической информации, чем число символов.
Инструменты: рекурсивный разделитель текста LangChain, визуализатор фрагментов распознавания лиц
Инженерные усилия: низкая
Затраты на обработку: низкая
Варианты использования: неструктурированные документы, написанные в прозе или непрозе с полными или неполными предложениями. Корпус документов содержит запретительное количество различных типов документов для создания отдельных стратегий блокирования для
Примеры: созданное пользователем содержимое, например открытые отзывы от опросов, публикации форума, отзывы, сообщения электронной почты, личные или исследовательские заметки или списки
Пользовательский код
Этот подход анализирует документы с помощью пользовательского кода для создания блоков. Этот подход является наиболее успешным для текстовых документов, где структура известна или может быть выведена, и требуется высокий уровень контроля над созданием блока. Вы можете использовать методы синтаксического анализа текста, такие как регулярные выражения, для создания блоков на основе шаблонов в структуре документа. Цель — создать блоки, имеющие аналогичный размер и блоки с разным содержимым. Многие языки программирования обеспечивают поддержку регулярных выражений, а некоторые имеют библиотеки или пакеты, которые предлагают более элегантные функции обработки строк.
Инструменты: Python (re, regex, BeautifulSoup, lxml, html5lib, marko), R (stringr, xml2), Джулия (Gumbo.jl)
Инженерные усилия: средний
Затраты на обработку: низкая
Варианты использования: полуструктурированные документы, в которых можно вывести структуру
Примеры: заявки на патенты, исследовательские документы, страховые политики, сценарии и сцены
Расширение крупной языковой модели
Большие языковые модели можно использовать для создания блоков. Распространенные варианты использования — использовать большую языковую модель, например GPT-4, для создания текстовых представлений изображений или сводок таблиц, которые можно использовать в качестве блоков. Расширение крупной языковой модели используется с другими подходами к блокировке, такими как пользовательский код.
Если вы определили в части раздела анализа документов, текст до или после этого изображения требуется для ответа на некоторые вопросы, необходимо передать этот дополнительный контекст в большую языковую модель. Важно поэкспериментировать, чтобы определить, выполняет ли этот дополнительный контекст или не улучшает производительность решения.
Если логика фрагментирования разбивает описание изображения на несколько блоков, убедитесь, что url-адрес изображения включен в каждый блок. Включая URL-адрес изображения в каждом блоке, гарантирует, что метаданные возвращаются для всех запросов, которые служит образ, особенно для сценариев, когда конечный пользователь должен получить доступ к исходному изображению через этот URL-адрес или хочет использовать необработанные изображения во время вывода.
Средства: Azure OpenAI, OpenAI
Инженерные усилия: средний
Стоимость обработки: высокая
Варианты использования: изображения, таблицы
Примеры. Создание текстовых представлений таблиц и изображений, суммирование транскрибирования из собраний, речевых выступлений, интервью или подкастов
Анализ макета документа
Библиотеки и службы анализа макета документов объединяют возможности оптического распознавания символов (OCR) с моделями глубокого обучения для извлечения структуры документов и текста. Структурные элементы могут включать верхние колонтитулы, заголовки, заголовки разделов, таблицы и цифры. Цель заключается в том, чтобы обеспечить лучшее семантический смысл содержимого, содержащегося в документах.
Библиотеки и службы анализа макета документов предоставляют модель, представляющую содержимое, как структурное, так и текстовое. Вам по-прежнему нужно написать код, взаимодействующий с моделью.
Примечание.
Azure AI Document Intelligence — это облачная служба, требующая отправки документа в службу. Необходимо убедиться, что правила безопасности и соответствия позволяют отправлять документы в такие службы, как это.
Средства: модели анализа документов аналитики документов Azure AI, Дончик, синтаксический анализ макета
Инженерные усилия: средний
Стоимость обработки: средняя
Варианты использования: полуструктурированные документы
Примеры: новости, веб-страницы, резюме
Предварительно созданная модель
Существуют службы, такие как Azure AI Document Intelligence, которые предлагают предварительно созданные модели, которые можно использовать для различных типов документов. Некоторые модели обучены для определенных типов документов, таких как форма "Налог США W-2", а другие предназначены для более широкого жанра типов документов, таких как счет.
Средства: предварительно созданные модели аналитики документов Azure AI, Интеллектуальная обработка документов Power Automate, LayoutLMv3
Инженерные усилия: низкая
Стоимость обработки: средняя/высокая
Варианты использования: структурированные документы, в которых существует предварительно созданная модель
Конкретные примеры: счета, квитанции, карточка медицинского страхования, форма W-2
Настраиваемая модель
Для высокоструктурированных документов, в которых не существует предварительно созданной модели, может потребоваться создать пользовательскую модель. Этот подход может быть эффективным для изображений или документов с высокой структурой, что затрудняет их использование методов анализа текста.
Средства: пользовательские модели Аналитики документов Azure, Tesseract
Инженерные усилия: высокий
Стоимость обработки: средняя/высокая
Варианты использования: структурированные документы, в которых не существует предварительно созданная модель
Примеры: расписания ремонта и обслуживания автомобильной промышленности, академические расшифровки и записи, технические руководства, операционные процедуры, рекомендации по обслуживанию
Структура документа
Документы зависят от объема структуры, которую они имеют. Некоторые документы, такие как государственные формы, имеют сложную и хорошо известную структуру, например налоговый документ W-2 США. В другом конце спектра неструктурированные документы, такие как заметки о свободной форме. Степень структуры типа документа является хорошей отправной точкой для определения эффективного подхода к блоку. Хотя нет жестких и быстрых правил, в этом разделе приведены некоторые рекомендации.
Рисунок 1. Подход к фрагментации соответствует структуре документа
структурированные документы.
Структурированные документы, иногда называемые документами фиксированного формата, имеют определенные макеты. Данные в этих документах находятся в фиксированных расположениях. Например, дата или имя семьи клиента находится в одном расположении в каждом документе одного и того же фиксированного формата. Примерами документов фиксированного формата являются налоговый документ W-2 США.
Исправленные документы формата могут быть сканированы изображения исходных документов, которые были заполнены вручную или имеют сложные структуры макета, что затрудняет их обработку с помощью базового подхода синтаксического анализа текста. Распространенный подход к обработке сложных структур документов заключается в использовании моделей машинного обучения для извлечения данных и применения семантического значения к этим данным, где это возможно.
Примеры: форма W-2, страховая карта
Распространенные подходы: предварительно созданные модели, пользовательские модели
Полуструктурированные документы
Полуструктурированные документы не имеют фиксированного формата или схемы, например формы W-2, но они предлагают согласованность в отношении формата или схемы. Например, все счета не размещаются одинаково, однако в целом они имеют согласованную схему. Вы можете ожидать, что счет будет иметь и некоторую invoice number
форму bill to
и имя и ship to
адрес, среди других данных. Веб-страница может не иметь согласованности схем, но они имеют аналогичные структурные или макетные элементы, такие как body
, title
H1
и p
которые можно использовать для добавления семантического значения в окружающий текст.
Как и структурированные документы, полуструктурированные документы, имеющие сложные структуры макета, сложно обрабатывать с помощью синтаксического анализа текста. Для этих типов документов модели машинного обучения являются хорошим подходом. Существуют предварительно созданные модели для определенных доменов, которые имеют согласованные схемы, такие как счета, контракты или медицинское страхование. Рассмотрите возможность создания пользовательских моделей для сложных структур, в которых не существует предварительно созданной модели.
Примеры: счета, квитанции, веб-страницы, файлы markdown
Распространенные подходы: модели анализа документов
Выводная структура
Некоторые документы имеют структуру, но не написаны в разметке. Для этих документов структура должна быть выведена. Хорошим примером является следующий документ о регулировании ЕС.
Рисунок 2. Регулирование ЕС, показывающее выводную структуру
Так как вы можете четко понять структуру документа и нет известных моделей, вы можете определить, что можно написать пользовательский код. Такой формат документа может не гарантировать создание пользовательской модели в зависимости от количества различных документов этого типа, с которыми вы работаете. Например, если ваш корпус является всеми правилами ЕС или законами штата США, пользовательская модель может быть хорошим подходом. Если вы работаете с одним документом, например регулирование ЕС в примере, пользовательский код может оказаться более экономичным.
Примеры: документы по закону, скрипты, спецификации производства
Распространенные подходы: Пользовательский код, пользовательские модели
Неструктурированные документы
Хороший подход к документам, не имеющих структуры, основан на предложениях или фиксированных размерах с перекрывающимися подходами.
Примеры: созданное пользователем содержимое, например открытые отзывы о опросах, сообщениях форумах или отзывах, сообщениях электронной почты и личных или исследовательских заметках
Распространенные подходы: на основе предложений или границ с перекрытием
Экспериментирование
Хотя наиболее подходящие подходы для каждого из подходов блокирования перечислены, на практике любой из подходов может быть подходящим для любого типа документа. Например, синтаксический анализ на основе предложений может быть подходящим для высокоструктурированных документов, или пользовательская модель может быть подходит для неструктурированных документов. Часть оптимизации решения RAG экспериментирует с различными подходами к блокированиям, учитывая количество ресурсов, технические навыки ресурсов и объем документов, которые необходимо обработать. Чтобы достичь оптимальной стратегии блокирования, необходимо наблюдать за преимуществами и компромиссами каждого из подходов, которые вы тестируете, чтобы убедиться, что вы выбираете подходящий подход для вашего варианта использования.