Используйте базовую модель генеративного ИИ для обобщения и ответов на вопросы с использованием собственных данных | Веб-сервисы Амазонки

Используйте базовую модель генеративного ИИ для обобщения и ответов на вопросы с использованием собственных данных | Веб-сервисы Амазонки

Большие языковые модели (LLM) можно использовать для анализа сложных документов и предоставления сводок и ответов на вопросы. Пост Адаптация предметной области Точная настройка базовых моделей в Amazon SageMaker JumpStart для финансовых данных описывает, как точно настроить LLM, используя ваш собственный набор данных. Когда у вас будет надежный LLM, вы захотите предоставить его бизнес-пользователям для обработки новых документов, которые могут состоять из сотен страниц. В этом посте мы покажем, как создать пользовательский интерфейс в реальном времени, позволяющий бизнес-пользователям обрабатывать PDF-документ произвольной длины. После обработки файла вы можете обобщить документ или задать вопросы по его содержимому. Пример решения, описанный в этом посте, доступен на GitHub.

Работа с финансовыми документами.

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

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

Наше решение обрабатывает документы, которые превышают максимальную длину последовательности токенов LLM, и делает этот документ доступным LLM для ответа на вопросы.

Обзор решения

Наш дизайн состоит из трех важных частей:

  • Он имеет интерактивное веб-приложение для бизнес-пользователей для загрузки и обработки PDF-файлов.
  • Он использует библиотеку langchain для разделения большого PDF-файла на более управляемые фрагменты.
  • Он использует метод расширенной генерации поиска, чтобы пользователи могли задавать вопросы о новых данных, которые LLM раньше не видел.

Как показано на следующей диаграмме, мы используем внешний интерфейс, реализованный с помощью React JavaScript, размещенный в Простой сервис хранения Amazon (Amazon S3) ведро, перед которым стоит Amazon CloudFront. Интерфейсное приложение позволяет пользователям загружать PDF-документы в Amazon S3. После завершения загрузки вы можете запустить задание по извлечению текста на базе Амазонка Текст. В рамках постобработки AWS Lambda Функция вставляет в текст специальные маркеры, обозначающие границы страницы. Когда эта работа выполнена, вы можете вызвать API, который резюмирует текст или отвечает на вопросы по нему.

Используйте генеративную базовую модель искусственного интеллекта для обобщения и ответа на вопросы, используя собственные данные | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Поскольку некоторые из этих шагов могут занять некоторое время, в архитектуре используется несвязанный асинхронный подход. Например, вызов для суммирования документа вызывает лямбда-функцию, которая отправляет сообщение в Простой сервис очередей Amazon (Amazon SQS). Другая функция Lambda принимает это сообщение и запускает Amazon Elastic Контейнерный Сервис (Амазон ЭКС) АМС Фаргейт задача. Задача Фаргейта вызывает Создатель мудреца Амазонки конечная точка вывода. Здесь мы используем задачу Фаргейта, потому что суммирование очень длинного PDF-файла может занять больше времени и памяти, чем доступно функции Lambda. Когда суммирование завершено, клиентское приложение может получить результаты из Amazon DynamoDB таблице.

Для обобщения мы используем модель Summarize AI21, одну из базовых моделей, доступных через Amazon SageMaker JumpStart. Хотя эта модель обрабатывает документы объемом до 10,000 40 слов (приблизительно 10,000 страниц), мы используем разделитель текста langchain, чтобы гарантировать, что каждый вызов сводки к LLM не превышает XNUMX XNUMX слов. Для генерации текста мы используем модель Cohere Medium, а для встраивания используем GPT-J, оба через JumpStart.

Обработка суммирования

При работе с большими документами нам необходимо определить, как разделить документ на более мелкие части. Когда мы получаем результаты извлечения текста из Amazon Textract, мы вставляем маркеры для больших фрагментов текста (настраиваемое количество страниц), отдельных страниц и разрывов строк. Langchain будет разделяться на основе этих маркеров и собирать меньшие документы, которые не превышают лимит токенов. См. следующий код:

text_splitter = RecursiveCharacterTextSplitter( separators = ["<CHUNK>", "<PAGE>", "n"], chunk_size = int(chunk_size), chunk_overlap = int(chunk_overlap)) with open(local_path) as f: doc = f.read() texts = text_splitter.split_text(doc) print(f"Number of splits: {len(texts)}") llm = SageMakerLLM(endpoint_name = endpoint_name) responses = [] for t in texts: r = llm(t) responses.append(r) summary = "n".join(responses)

LLM в цепочке суммирования — это тонкая оболочка нашей конечной точки SageMaker:

class SageMakerLLM(LLM): endpoint_name: str @property
def _llm_type(self) -> str: return "summarize" def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str: response = ai21.Summarize.execute( source=prompt, sourceType="TEXT", sm_endpoint=self.endpoint_name ) return response.summary 

Ответ на вопрос

В методе расширенной генерации поиска мы сначала разбиваем документ на более мелкие сегменты. Мы создаем вложения для каждого сегмента и сохраняем их в векторной базе данных Chroma с открытым исходным кодом через интерфейс langchain. Мы сохраняем базу данных в Эластичная файловая система Amazon (Amazon EFS) для последующего использования. См. следующий код:

documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)
texts = text_splitter.split_documents(documents)
print(f"Number of splits: {len(texts)}") embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_name,
)
vectordb = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory)
vectordb.persist()

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

embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_embed
)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
docs = vectordb.similarity_search_with_score(question)

Мы берем ближайший соответствующий фрагмент и используем его в качестве контекста для модели генерации текста, чтобы ответить на вопрос:

cohere_client = Client(endpoint_name=endpoint_qa)
context = docs[high_score_idx][0].page_content.replace("n", "")
qa_prompt = f'Context={context}nQuestion={question}nAnswer='
response = cohere_client.generate(prompt=qa_prompt, max_tokens=512, temperature=0.25, return_likelihoods='GENERATION')
answer = response.generations[0].text.strip().replace('n', '')

Пользователь опытом

Хотя 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.

Отметка времени:

Больше от Машинное обучение AWS