Создайте приложение для суммирования HCLS-документов с помощью Falcon, используя Amazon SageMaker JumpStart

Создайте приложение на Falcon для суммирования документов HCLS с помощью Amazon SageMaker JumpStart

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

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

Amazon SageMaker основан на двадцатилетнем опыте Amazon в разработке машинного обучения в реальных приложениях, включая рекомендации по продуктам, персонализацию, интеллектуальную покупку, робототехнику и голосовые помощники. SageMaker – это управляемый сервис, который соответствует требованиям HIPAA и предоставляет инструменты для инноваций в области машинного обучения разработчикам данных, инженерам машинного обучения и бизнес-аналитикам. В составе SageMaker находится Amazon SageMaker Studio, интегрированная среда разработки (IDE), специально созданная для совместной работы с потоками ML, которая в свою очередь содержит широкий набор решений быстрого запуска и предварительно обученных моделей ML в интегрированном центре, называемом SageMaker JumpStart. С помощью SageMaker JumpStart вы можете использовать предварительно обученные модели, такие как Falcon LLM, с предварительно подготовленными образцами записных книжек и поддержкой SDK для экспериментов и развертывания этих мощных моделей-трансформеров. Вы можете использовать SageMaker Studio и SageMaker JumpStart для развертывания и запроса собственной генеративной модели в вашей учетной записи AWS.

Вы также можете убедиться, что данные нагрузки вывода не покидают вашу VPC. Вы можете предоставлять модели как конечные точки для одного арендатора и развертывать их с изоляцией сети. Кроме того, вы можете отбирать и управлять выбранным набором моделей, которые соответствуют вашим требованиям безопасности, используя возможность частного хранилища моделей в SageMaker JumpStart и сохранять утвержденные модели там. SageMaker подходит для HIPAA BAASOC123 и HITRUST CSF.

 Falcon LLM – это большая языковая модель, над которой работают исследователи Технологического института инноваций (TII) над 1 трлн токенов с использованием AWS. У Falcon есть много различных вариантов, с двумя основными составляющими: Falcon 40B и Falcon 7B, состоящими, соответственно, из 40 млрд и 7 млрд параметров, с заточенными версиями, обученными для конкретных задач, таких как выполнение инструкций. Falcon хорошо справляется с различными задачами, включая суммирование текста, анализ настроений, вопросно-ответные системы и диалоги. Этот пост предоставляет пошаговое руководство, которое вы можете использовать для развертывания модели Falcon LLM в своей учетной записи AWS с использованием управляемого экземпляра конспекта через SageMaker JumpStart для проведения экспериментов по суммированию текста.

В хранилище моделей SageMaker JumpStart содержатся полные записные книжки для развертывания и запроса каждой модели. На данный момент в хранилище моделей SageMaker JumpStart доступны шесть версий Falcon: Falcon 40B Instruct BF16, Falcon 40B BF16, Falcon 180B BF16, Falcon 180B Chat BF16, Falcon 7B Instruct BF16 и Falcon 7B BF16. В этом посте используется модель Falcon 7B Instruct.

В следующих разделах мы покажем, как начать работать с суммированием документов, развернув Falcon 7B на SageMaker Jumpstart.

Предварительные требования

Для этого учебного пособия вам понадобится учетная запись AWS с доменом SageMaker. Если у вас еще нет домена SageMaker, обратитесь к Развертывание домена Amazon SageMaker для его создания.

Развертывание Falcon 7B с использованием SageMaker JumpStart

Чтобы развернуть вашу модель, выполните следующие шаги:

  1. Перейдите в свою среду SageMaker Studio из консоли SageMaker.
  2. В разделе IDE выберите SageMaker JumpStart в панели навигации и выберите Models, notebooks, solutions.
  3. Разверните модель Falcon 7B Instruct на конечную точку для вывода.

Выбор модели Falcon-7B-Instruct из SageMaker JumpStart

Откроется модельная карточка для модели Falcon 7B Instruct BF16. На этой странице вы можете найти варианты Развернуть или Обучить, а также ссылки на открытие образцовых блокнотов в SageMaker Studio. В этой статье будет использоваться образцовый блокнот из SageMaker JumpStart для развертывания модели.

  1. Выберите Открыть блокнот.

Страница развертывания модели SageMaker JumpStart

  1. Выполните первые четыре ячейки блокнота для развертывания конечной точки Falcon 7B Instruct.

На странице Запущенные активы SageMaker JumpStart вы можете увидеть развернутые модели JumpStart.

  1. В панели навигации выберите SageMaker Jumpstart, затем выберите Запущенные активы JumpStart.
  2. Выберите вкладку Модельные конечные точки, чтобы увидеть статус вашей конечной точки.

Страница запущенной модели SageMaker JumpStart

Теперь, когда развернута конечная точка Falcon LLM, вы готовы выполнять запросы в модели.

Выполнение первого запроса

Для выполнения запроса выполните следующие шаги:

  1. На вкладке Файл выберите Создать и Блокнот, чтобы открыть новый блокнот.

Вы также можете скачать готовый блокнот здесь.

Создание блокнота SageMaker Studio

  1. Выберите образец, ядро и тип экземпляра, когда будет указано. Для этой статьи мы выбираем образ Data Science 3.0, ядро Python 3 и экземпляр ml.t3.medium.

Настройка ядра блокнота SageMaker Studio

  1. Импортируйте модули Boto3 и JSON, введя следующие две строки в первую ячейку:
import jsonimport boto3
  1. Нажмите Shift + Enter, чтобы выполнить ячейку.
  2. Затем вы можете определить функцию, которая будет вызывать вашу конечную точку. Эта функция принимает словарь payload и использует его для вызова клиента runtime SageMaker. Затем она десериализует ответ и выводит входные данные и сгенерированный текст.
newline, bold, unbold = '\n', '\033[1m', '\033[0m'endpoint_name = 'ИМЯ_ЭНДПОИНТА'def query_endpoint(payload):    client = boto3.client('runtime.sagemaker')    response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/json', Body=json.dumps(payload).encode('utf-8'))    model_predictions = json.loads(response['Body'].read())    generated_text = model_predictions[0]['generated_text']    print (        f"Входной текст: {payload['inputs']}{newline}"        f"Сгенерированный текст: {bold}{generated_text}{unbold}{newline}")

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

  1. Вы можете использовать эти параметры вместе с запросом для настройки результатов модели под свой конкретный случай использования:
payload = {    "inputs": "Girafatron одержим жирафами, самым великолепным животным на земле. Girafatron считает все остальные животные неважными по сравнению с величием жирафа.\nDaniel: Привет, Girafatron!\nGirafatron:",    "parameters":{        "max_new_tokens": 50,        "return_full_text": False,        "do_sample": True,        "top_k":10        }}

Запрос с промптом для структурирования резюмирования

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

  1. Скачайте скачать PDF и скопируйте текст в файл с именем document.txt.
  2. В SageMaker Studio выберите значок загрузки и загрузите файл на свою учетную запись в SageMaker Studio.
Загрузка файла в SageMaker Studio

По умолчанию Falcon LLM поддерживает сжатие текста.

  1. Создайте функцию, которая использует техники промптинга для создания резюме document.txt:
def summarize(text_to_summarize):    summarization_prompt = """Обработайте следующий текст, а затем выполните инструкции, которые следуют после:{text_to_summarize}Подведите краткое итог предшествующего текста.Итог:"""    payload = {        "inputs": summarization_prompt,        "parameters":{            "max_new_tokens": 150,            "return_full_text": False,            "do_sample": True,            "top_k":10            }    }    response = query_endpoint(payload)    print(response)    with open("document.txt") as f:    text_to_summarize = f.read()summarize(text_to_summarize)

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

Импорт и запуск цепочки сжатия

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

LangChain предоставляет простой интерфейс к LLM. Его возможности включают инструменты для шаблонизации промптов и связывания промптов. Эти цепочки могут использоваться для создания резюмирования текстовых документов, которые длиннее, чем поддерживает модель языка в одном вызове. Вы можете использовать стратегию map-reduce для сжатия длинных документов, разбивая их на управляемые части, резюмируя их, а затем объединяя (и при необходимости повторно резюмируя).

  1. Давайте установим LangChain:
%pip install langchain
  1. Импортируйте соответствующие модули и разбейте длинный документ на части:
импортируйте langchainиз langchain импортируйте SagemakerEndpoint, PromptTemplateиз langchain.llms.sagemaker_endpoint импортируйте LLMContentHandlerиз langchain.chains.summarize импортируйте load_summarize_chainиз langchain.text_splitter импортируйте RecursiveCharacterTextSplitterиз langchain.docstore.document импортируйте Documenttext_splitter = RecursiveCharacterTextSplitter(                    chunk_size = 500,                    chunk_overlap  = 20,                    separators = [" "],                    length_function = len                )input_documents = text_splitter.create_documents([text_to_summarize])
  1. Чтобы LangChain работал эффективно с Falcon, вам необходимо определить классы обработчиков контента по умолчанию для корректного ввода и вывода:
class ContentHandlerTextSummarization(LLMContentHandler):    content_type = "application/json"    accepts = "application/json"    def transform_input(self, prompt: str, model_kwargs={}) -> bytes:        input_str = json.dumps({"inputs": prompt, **model_kwargs})        return input_str.encode("utf-8")    def transform_output(self, output: bytes) -> json:        response_json = json.loads(output.read().decode("utf-8"))        generated_text = response_json[0]['generated_text']        return generated_text.split("summary:")[-1]    content_handler = ContentHandlerTextSummarization()
  1. Вы можете определить пользовательские шаблоны вопросов в виде объектов PromptTemplate, основного средства для задания с помощью LangChain, для подхода суммирования map-reduce. Этот шаг является необязательным, поскольку идентификаторы map и combine предоставляются по умолчанию, если параметры в вызове функции load_summarize_chain не определены.
map_prompt = """Напишите краткое резюме этого текста несколькими полными предложениями:{text}Краткое резюме:"""map_prompt_template = PromptTemplate(                        template=map_prompt,                         input_variables=["text"]                      )combine_prompt = """Объедините все эти следующие резюме и сформируйте окончательное резюме из них, используя несколько полных предложений:{text}Окончательное резюме:"""combine_prompt_template = PromptTemplate(                            template=combine_prompt,                             input_variables=["text"]                          )      
  1. LangChain поддерживает LLM, размещенные на точках вывода SageMaker, поэтому вместо использования AWS Python SDK вы можете инициализировать соединение через LangChain для большей доступности:
summary_model = SagemakerEndpoint(                    endpoint_name = endpoint_name,                    region_name= "us-east-1",                    model_kwargs= {},                    content_handler=content_handler                )
  1. Наконец, вы можете загрузить цепочку суммирования и выполнить сводку входных документов, используя следующий код:
summary_chain = load_summarize_chain(llm=summary_model,                                     chain_type="map_reduce",                                      map_prompt=map_prompt_template,                                     combine_prompt=combine_prompt_template,                                     verbose=True                                    ) summary = summary_chain({"input_documents": input_documents, 'token_max': 700}, return_only_outputs=True)print(summary["output_text"])   

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

Очистка

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

client = boto3.client('runtime.sagemaker')client.delete_endpoint(EndpointName=endpoint_name)

Использование других фундаментальных моделей в SageMaker JumpStart

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

  • Если вы выполняете суммирование с помощью метода summarize() (метода без использования LangChain), вам, возможно, придется изменить структуру JSON-параметра payload, а также обработку переменной response в функции query_endpoint()
  • Если вы выполняете суммирование с использованием метода load_summarize_chain() LangChain, вам, возможно, придется изменить класс ContentHandlerTextSummarization, в частности функции transform_input() и transform_output(), чтобы правильно обрабатывать передаваемые LLM данные и возвращаемый ими результат

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

Заключение

Модель Falcon 7B Instruct доступна на модельном хабе SageMaker JumpStart и применяется во многих случаях использования. В этом посте показано, как вы можете развернуть собственную конечную точку Falcon LLM в своей среде, используя SageMaker JumpStart, и провести первые эксперименты со студией SageMaker, что позволит вам быстро создавать прототипы своих моделей и плавно переходить в рабочую среду. С помощью Falcon и LangChain вы можете эффективно сжимать документы в области здравоохранения и научных исследований большого объема.

Для получения дополнительной информации о работе с генеративным искусственным интеллектом на AWS обратитесь к Сообщению о новых инструментах для разработки генеративного искусственного интеллекта на AWS. Вы можете начать экспериментировать и создавать доказательства концепций сжатия документов для приложений с GenAI, ориентированными на здравоохранение и науку о жизни, используя метод, описанный в этом посте. Когда Amazon Bedrock будет доступен в общем доступе, мы опубликуем дополнительный пост, показывающий, как реализовать сжатие документов с помощью Amazon Bedrock и LangChain.