Упростите подготовку данных для генеративного искусственного интеллекта с помощью Amazon SageMaker Data Wrangler

Облегчите подготовку данных для генеративного искусственного интеллекта с помощью Amazon SageMaker Data Wrangler

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

По данным IDC, неструктурированные данные составляют более 80% всех бизнес-данных в настоящее время. Сюда входят форматы, такие как электронная почта, PDF, отсканированные документы, изображения, аудио, видео и т.д. Несмотря на ценные знания, содержащиеся в этих данных, их неструктурированный характер затрудняет интерпретацию и извлечение информации алгоритмами ИИ. Согласно исследованию Deloitte, проведенному в 2019 году, только 18% компаний сообщили о возможности использования неструктурированных данных.

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

Подготовка данных важна на нескольких этапах в моделях Retrieval Augmented Generation (RAG). Документы источники знаний требуют предварительной обработки, такой как очистка текста и создание семантических вложений, чтобы они могли быть эффективно проиндексированы и найдены. Запросы пользователя на естественном языке также требуют предварительной обработки, чтобы их можно было закодировать в вектор и сравнить с вложениями документов. После извлечения соответствующих контекстов они могут потребовать дополнительной предварительной обработки, такой как усечение, перед тем как быть объединенными с запросом пользователя для создания окончательного приглашения к основной модели.

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

В этой статье мы работаем с набором данных документации в формате PDF – руководство пользователя Amazon Bedrock. Кроме того, мы покажем, как предварительно обработать набор данных для RAG. В частности, мы очистим данные и создадим артефакты RAG для ответа на вопросы о содержании набора данных. Рассмотрим следующую задачу машинного обучения (МО): пользователь задает вопрос большой языковой модели (LLM): “Как фильтровать и искать модели в Amazon Bedrock?”. LLM не видел документацию на этапе обучения или настройки, поэтому не сможет ответить на этот вопрос и, скорее всего, фантазирует. Целью этой статьи является поиск соответствующего фрагмента текста из PDF (т.е. RAG) и прикрепление его к приглашению, таким образом, позволяя LLM отвечать на вопросы, связанные с этим документом.

Ниже мы покажем, как выполнить все эти основные этапы предварительной обработки из Amazon SageMaker Data Wrangler:

  1. Извлечение текста из документа в формате PDF (с использованием Textract)
  2. Удаление конфиденциальной информации (с использованием Comprehend)
  3. Разделение текста на части
  4. Создание вложений для каждой части (с использованием Bedrock)
  5. Загрузка вложений в векторную базу данных (с использованием OpenSearch)

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

Для этого пошагового руководства вам понадобится следующее:

  • Учетная запись AWS с правами на создание политик и ролей AWS Identity and Access Management (IAM)
  • Доступ к Amazon SageMaker, экземпляру Amazon SageMaker Studio и пользователю для Studio. Дополнительные сведения о предварительных требованиях см. в разделе Начало работы с Amazon SageMaker Canvas.
  • Доступ к моделям Amazon Bedrock. Следуйте указаниям по доступу к моделям.
  • Доступ к Amazon Comprehend. Роль выполнения Amazon SageMaker Studio должна иметь разрешение вызова операции Amazon Comprehend DetectPiiEntities.
  • Доступ к Amazon Textract. Роль выполнения Amazon SageMaker Studio должна иметь разрешение вызова Amazon Textract.
  • Чтение и запись в Amazon Simple Storage Service (Amazon S3) bucket.
  • Доступ к Amazon OpenSearch в качестве векторной базы данных. Выбор векторной базы данных является важным архитектурным решением. Существует несколько хороших вариантов для рассмотрения, каждый со своими преимуществами. В этом примере мы выбрали Amazon OpenSearch в качестве нашей векторной базы данных.

Примечание: Создайте домены службы OpenSearch, следуя инструкциям здесь. Для простоты выберем вариант с мастер-именем пользователя и паролем для более точного управления доступом. После создания домена создайте векторный индекс со следующими сопоставлениями, и размерность вектора 1536 соответствует вложениям Amazon Titan:

PUT knowledge-base-index{  "settings": {    "index.knn": True  },  "mappings": {    "properties": {      "text_content": {        "type": "text",        "fields": {          "keyword": {            "type": "keyword"          }        }      },      "text_content_v": {        "type": "knn_vector",        "dimension": 1536      },          }  }} }

Пошаговое руководство

Построение потока данных

В этом разделе мы рассмотрим, как построить поток данных для извлечения текста и метаданных из PDF-файлов, очистки и обработки данных, генерации вложений с помощью Amazon Bedrock и индексации данных в Amazon OpenSearch.

Запуск SageMaker Canvas

Чтобы запустить SageMaker Canvas, выполните следующие действия:

  1. На консоли SageMaker Amazon в навигационной панели выберите Домены.
  2. Выберите свой домен.
  3. В меню запуска выберите Canvas.

Создайте поток данных

Выполните следующие шаги, чтобы создать поток данных в SageMaker Canvas:

  1. На главной странице SageMaker Canvas выберите Подготовка данных.
  2. Выберите Создать с правой стороны страницы, затем укажите имя потока данных и выберите Создать.
  3. Вы попадете на страницу потока данных.
  4. Выберите Импорт данных, выберите табличные данные.

Теперь давайте импортируем данные из бакета Amazon S3:

  1. Выберите Импорт данных и выберите Табличные данные из выпадающего списка.
  2. Источник данных и выберите Amazon S3 из выпадающего списка.
  3. Перейдите к файлу метаданных с расположением файлов PDF и выберите файл.
  4. Теперь метаданные файла загружены в поток данных подготовки данных, и мы можем приступить к добавлению следующих шагов для преобразования данных и индексации в Amazon OpenSearch. В этом случае файл содержит следующие метаданные, с указанием расположения каждого файла в директории Amazon S3.

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

  1. Выберите знак плюса и выберите Добавить преобразование.
  2. Выберите Добавить шаг и выберите Пользовательское преобразование.
  3. Вы можете создать пользовательское преобразование с использованием Pandas, PySpark, пользовательских функций на Python и SQL PySpark. Для этого примера выберите Python (PySpark).
  4. Введите имя для шага. Из примеров кода просмотрите и выберите извлечение текста из PDF. Внесите необходимые изменения в фрагмент кода и выберите Добавить.
  5. Добавим шаг для удаления лично идентифицируемой информации (PII) из извлеченных данных, используя Amazon Comprehend. Выберите Добавить шаг и выберите Пользовательское преобразование. Затем выберите Python (PySpark).

Из примеров кода выберите и выберите маску PII. Внесите необходимые изменения в фрагмент кода и выберите Добавить.

  1. Следующий шаг – разделение текстового содержимого на фрагменты. Выберите Добавить шаг и выберите Пользовательское преобразование. Затем выберите Python (PySpark).

Из примеров кода выберите и выберите Разделить текст. Внесите необходимые изменения в фрагмент кода и выберите Добавить.

  1. Преобразуем текстовое содержимое в векторные представления с использованием модели Amazon Bedrock Titan Embeddings. Выберите Добавить шаг и выберите Пользовательское преобразование. Затем выберите Python (PySpark).

Из примеров кода выберите и выберите Создать текстовое представление с Bedrock. Внесите необходимые изменения в фрагмент кода и выберите Добавить.

  1. Теперь у нас есть векторные представления для содержимого файлов PDF. Переходим к индексированию данных в Amazon OpenSearch. Выберите Добавить шаг и выберите Пользовательское преобразование. Затем выберите Python (PySpark). Вы можете переписать следующий код, чтобы использовать предпочитаемую вами векторную базу данных. Для упрощения мы используем имя пользователя и пароль мастера для доступа к API OpenSearch; для производственных рабочих нагрузок выбирайте опцию в соответствии с политиками вашей организации.

    from pyspark.sql.functions import col, udffrom pyspark.sql.types import StringTypeimport jsonimport requeststext_column = "text_redacted_chunks_embedding"output_column = text_column + "_response"headers = {"Content-Type": "application/json", "kbn-xsrf": "true", "osd-xsrf": "true", "security_tenant": "global"};index_name = 's3_vector_data_v1'def index_data(text_redacted_chunks, text_redacted_chunks_embedding):    input_json = json.dumps({"text_content": text_redacted_chunks[-1], "text_content_v": text_redacted_chunks_embedding[-1]})    response = requests.request(method="POST",                                url=f'https://search-canvas-vector-db-domain-dt3yq3b4cykwuvc6t7rnkvmnka.us-west-2.es.amazonaws.com/{index_name}/_doc',                                headers=headers,                                json=input_json,                                auth=(master_user, 'master_pass'),                                timeout=30)    return response.contentindexing_udf = udf(index_data, StringType())df = df.withColumn('index_response',                   indexing_udf(col("text_redacted_chunks"), col("text_redacted_chunks_embedding")))

Наконец, получившийся поток данных будет таков:

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

Подготовка подсказки

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

  1. Сгенерируйте вложение для запроса (с помощью Amazon Bedrock)
  2. Запросить векторную базу данных для нахождения ближайшего контекста (с помощью Amazon OpenSearch)
  3. Совместите запрос и контекст в одну подсказку.
  4. Сделайте запрос к LLM с помощью подсказки (с помощью Amazon Bedrock)
  5. На домашней странице SageMaker Canvas выберите Подготовка данных.
  6. Выберите Создать справа на странице, затем укажите имя потока данных и выберите Создать.

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

  1. Давайте загрузим файл CSV с вопросами пользователей. Выберите Импорт данных и выберите Табличный в списке выбора.
  2. Источник данных, и выберите Amazon S3 из выпадающего списка. При желании вы также можете выбрать загрузку файла с запросами пользователей.
  3. Добавим пользовательское преобразование для преобразования данных в векторные вложения, а затем выполним поиск связанных вложений в Amazon OpenSearch перед отправкой подсказки в Amazon Bedrock с запросом и контекстом из базы знаний. Для генерации вложений для запроса вы можете использовать тот же пример кода Генерация текстового вложения с помощью Bedrock, упомянутый в шаге #7 выше.

Давайте вызовем API Amazon OpenSearch для поиска соответствующих документов для созданных векторных вложений. Добавьте пользовательское преобразование с помощью Python (PySpark).

from pyspark.sql.functions import col, udffrom pyspark.sql.types import StringTypeimport jsonimport requeststext_column = "Queries_embedding"output_column = text_column + "_response"headers = {"Content-Type": "application/json", "kbn-xsrf": "true", "osd-xsrf": "true", "security_tenant": "global"};index_name = 's3_vector_data_v1'def search_data(text_column_embedding):    input_json={'size':20,'query':{'knn':{'text_content_v':{'vector':{text_column_embedding},'k':5,},},},'fields':['text_content']}    response = requests.request(method="GET",                                url=f'https://search-canvas-vector-db-domain-dt3yq3b4cykwuvc6t7rnkvmnka.us-west-2.es.amazonaws.com/{index_name}/_search',                                headers=headers,                                json=input_json,                                auth=(master_user, master_pass'),                                timeout=30)    return response.contentsearch_udf = udf(search_data, types.ArrayType())df = df.withColumn(output_column,search_udf(col(text_column)))

Давайте добавим пользовательское преобразование, чтобы вызвать Amazon Bedrock API для ответа на запросы, передавая документы из базы знаний Amazon OpenSearch. Из примеров кода выберите Запрос Bedrock с контекстом. Внесите необходимые изменения в фрагмент кода и выберите Добавить.

Кратко, поток данных для вопросно-ответного рещения на основе RAG выглядит следующим образом:

Практики в области машинного обучения проводят много времени на создание кода для инжиниринга признаков, применение его к исходным наборам данных, обучение моделей на инжиниринге наборов данных и оценку точности моделей. Учитывая экспериментальный характер работы, даже самый маленький проект приводит к множественным итерациям. Тот же код инжиниринга признаков часто запускается снова и снова, тратя время и ресурсы на выполнение одних и тех же операций. В крупных организациях это может привести к еще большим потерям производительности, потому что разные команды часто выполняют идентичные задачи или даже пишут дублированный код для инжиниринга признаков из-за незнания предыдущей работы. Чтобы избежать повторной обработки признаков, мы экспортируем наш поток данных в Amazon трубопровод SageMaker. Давайте выберем + кнопку справа от запроса. Выберите экспорт потока данных и выберите Запустить трубопровод SageMaker (через интерфейс Jupyter notebook).

Очистка

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

Выводы

В этой статье мы показали вам, как возможности Amazon SageMaker Canvas позволяют подготавливать данные в рамках данных профессионального подготовки данных для LLM. Интерактивная подготовка данных позволяет быстро очищать, преобразовывать и анализировать данные для создания информативных признаков. Устранение сложностей программирования позволяет быструю итерацию для создания высококачественного набора данных для обучения. Этот ускоренный рабочий процесс напрямую ведет к построению, обучению и развертыванию эффективной модели машинного обучения с бизнес-влиянием. С полноценной подготовкой данных и объединенным опытом от данных до проникновения, SageMaker Canvas дает пользователям возможность улучшить результаты их машинного обучения.

Мы призываем вас узнать больше, изучив Amazon SageMaker Data Wrangler, Amazon SageMaker Canvas, модели Amazon Titan, Amazon Bedrock и Amazon OpenSearch Service для создания решения, используя предоставленную в этой статье образцовую реализацию и набор данных, соответствующий вашему бизнесу. Если у вас возникнут вопросы или предложения, пожалуйста, оставьте комментарий.