Большие языковые модели (LLM) можно использовать для анализа сложных документов и предоставления сводок и ответов на вопросы. В посте «Точная настройка базовых моделей в Amazon SageMaker JumpStart для финансовых данных» описано, как настроить LLM с использованием собственного набора данных. Когда у вас будет надежный LLM, вы захотите предоставить его бизнес-пользователям для обработки новых документов, которые могут состоять из сотен страниц. В этом посте мы покажем, как создать пользовательский интерфейс в реальном времени, позволяющий бизнес-пользователям обрабатывать PDF-документ произвольной длины. После обработки файла вы можете обобщить документ или задать вопросы по его содержимому. Пример решения, описанный в этом посте, доступен на Гитхаб.
Работа с финансовыми документами.
Финансовые отчеты, такие как квартальные отчеты о прибылях и убытках и годовые отчеты для акционеров, часто состоят из десятков или сотен страниц. Эти документы содержат много стандартного языка, такого как заявления об отказе от ответственности и юридические формулировки. Если вы хотите извлечь ключевые данные из одного из этих документов, вам потребуется как время, так и некоторое знакомство с шаблонным языком, чтобы вы могли выявить интересные факты. И, конечно же, вы не можете задавать LLM вопросы о документе, который он никогда не видел.
LLM, используемые для суммирования, имеют ограничение на количество токенов (символов), передаваемых в модель, и, за некоторыми исключениями, обычно не превышает нескольких тысяч токенов. Обычно это исключает возможность резюмировать более длинные документы.
Наше решение обрабатывает документы, которые превышают максимальную длину последовательности токенов LLM, и делает этот документ доступным LLM для ответа на вопросы.
Обзор решения
Наш дизайн состоит из трех важных частей:
- Он имеет интерактивное веб-приложение для бизнес-пользователей для загрузки и обработки PDF-файлов.
- Он использует библиотеку langchain для разделения большого PDF-файла на более управляемые фрагменты.
- Он использует метод расширенной генерации поиска, чтобы пользователи могли задавать вопросы о новых данных, которые LLM раньше не видел.
Как показано на следующей диаграмме, мы используем внешний интерфейс, реализованный с помощью React JavaScript, размещенный в корзине Amazon Simple Storage Service (Amazon S3) под управлением Amazon CloudFront. Интерфейсное приложение позволяет пользователям загружать PDF-документы в Amazon S3. После завершения загрузки вы можете запустить задание извлечения текста на базе Amazon Textract. В рамках постобработки функция AWS Lambda вставляет в текст специальные маркеры, обозначающие границы страницы. Когда эта работа выполнена, вы можете вызвать API, который резюмирует текст или отвечает на вопросы по нему.
Поскольку некоторые из этих шагов могут занять некоторое время, в архитектуре используется несвязанный асинхронный подход. Например, вызов для суммирования документа вызывает функцию Lambda, которая отправляет сообщение в очередь Amazon Simple Queue Service (Amazon SQS). Другая функция Lambda принимает это сообщение и запускает задачу Amazon Elastic Container Service (Amazon ECS) AWS Fargate. Задача Fargate вызывает конечную точку вывода Amazon SageMaker. Здесь мы используем задачу Фаргейта, потому что суммирование очень длинного PDF-файла может занять больше времени и памяти, чем доступно функции Lambda. По завершении суммирования интерфейсное приложение может получить результаты из таблицы Amazon DynamoDB.
Для обобщения мы используем модель Summarize AI21, одну из базовых моделей, доступных через Amazon SageMaker JumpStart. Хотя эта модель обрабатывает документы объемом до 10 000 слов (приблизительно 40 страниц), мы используем разделитель текста langchain, чтобы гарантировать, что каждый вызов сводки к LLM не превышает 10 000 слов. Для генерации текста мы используем модель Cohere Medium, а для встраивания используем GPT-J, оба через JumpStart.
Обработка суммирования
При работе с большими документами нам необходимо определить, как разделить документ на более мелкие части. Когда мы получаем результаты извлечения текста из Amazon Textract, мы вставляем маркеры для больших фрагментов текста (настраиваемое количество страниц), отдельных страниц и разрывов строк. Langchain будет разделяться на основе этих маркеров и собирать меньшие документы, которые не превышают лимит токенов. См. следующий код:
LLM в цепочке суммирования — это тонкая оболочка нашей конечной точки SageMaker:
Ответ на вопрос
В методе расширенной генерации поиска мы сначала разбиваем документ на более мелкие сегменты. Мы создаем вложения для каждого сегмента и сохраняем их в векторной базе данных Chroma с открытым исходным кодом через интерфейс langchain. Мы сохраняем базу данных в файловой системе Amazon Elastic File System (Amazon EFS) для последующего использования. См. следующий код:
Когда вложения готовы, пользователь может задать вопрос. Мы ищем в векторной базе данных фрагменты текста, наиболее точно соответствующие вопросу:
Мы берем ближайший соответствующий фрагмент и используем его в качестве контекста для модели генерации текста, чтобы ответить на вопрос:
Пользовательский опыт
Хотя LLM представляют передовую науку о данных, большинство вариантов использования LLM в конечном итоге связаны с взаимодействием с нетехническими пользователями. Наш пример веб-приложения обрабатывает интерактивный вариант использования, когда бизнес-пользователи могут загружать и обрабатывать новый PDF-документ.
На следующей диаграмме показан пользовательский интерфейс. Пользователь начинает с загрузки PDF-файла. После того, как документ сохранен в Amazon S3, пользователь может запустить задание по извлечению текста. Когда это будет завершено, пользователь может вызвать задачу суммирования или задать вопросы. Пользовательский интерфейс предоставляет некоторые дополнительные параметры, такие как размер фрагмента и перекрытие фрагментов, которые могут быть полезны для опытных пользователей, тестирующих приложение на новых документах.
Следующие шаги
LLM предоставляют значительные новые возможности поиска информации. Бизнес-пользователям нужен удобный доступ к этим возможностям. Можно рассмотреть два направления будущей работы:
- Воспользуйтесь преимуществами мощных LLM, уже доступных в базовых моделях Jumpstart. С помощью всего нескольких строк кода наш образец приложения мог развернуть и использовать расширенные LLM от AI21 и Cohere для суммирования и генерации текста.
- Сделайте эти возможности доступными для нетехнических пользователей. Обязательным условием обработки PDF-документов является извлечение текста из документа, а выполнение заданий суммирования может занять несколько минут. Для этого требуется простой пользовательский интерфейс с возможностями асинхронной серверной обработки, который легко разработать с помощью облачных сервисов, таких как Lambda и Fargate.
Также отметим, что PDF-документ представляет собой полуструктурированную информацию. Важные подсказки, такие как заголовки разделов, трудно идентифицировать программно, поскольку они зависят от размера шрифта и других визуальных индикаторов. Выявление базовой структуры информации помогает LLM обрабатывать данные более точно, по крайней мере, до тех пор, пока LLM не сможет обрабатывать ввод неограниченной длины.
Заключение
В этом посте мы показали, как создать интерактивное веб-приложение, которое позволяет бизнес-пользователям загружать и обрабатывать PDF-документы для обобщения и ответов на вопросы. Мы увидели, как воспользоваться базовыми моделями Jumpstart для доступа к продвинутым LLM, а также использовать методы разделения текста и поиска с расширенными возможностями генерации для обработки более длинных документов и предоставления их в качестве информации для LLM.
На данный момент нет причин не сделать эти мощные возможности доступными для ваших пользователей. Мы рекомендуем вам начать использовать модели фундамента Jumpstart уже сегодня.
Об авторе
Рэнди ДеФо является старшим главным архитектором решений в AWS. Он имеет степень MSEE Мичиганского университета, где работал над компьютерным зрением для автономных транспортных средств. Он также имеет степень магистра делового администрирования Университета штата Колорадо. Рэнди занимал различные должности в сфере технологий, от разработки программного обеспечения до управления продуктами. Вошел в пространство больших данных в 2013 году и продолжает исследовать эту область. Он активно работает над проектами в области машинного обучения и выступал на многочисленных конференциях, включая Strata и GlueCon.