Создайте систему семантического поиска для табличных столбцов с помощью Transformers и Amazon OpenSearch Service.

Создайте систему семантического поиска для табличных столбцов с помощью Transformers и Amazon OpenSearch Service.

Исходный узел: 1986937

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

Обычные решения включают поиск по лексическому ключевому слову или сопоставление регулярных выражений, которые подвержены проблемам с качеством данных, таким как отсутствие имен столбцов или различные соглашения об именах столбцов в различных наборах данных (например, zip_code, zcode, postalcode).

В этом посте мы демонстрируем решение для поиска похожих столбцов на основе имени столбца, содержимого столбца или того и другого. Решение использует приближенные алгоритмы ближайших соседей доступна в Сервис Amazon OpenSearch для поиска семантически похожих столбцов. Чтобы облегчить поиск, мы создаем представления признаков (эмбеддинги) для отдельных столбцов в озере данных, используя предварительно обученные модели Transformer из библиотека преобразователей предложений in Создатель мудреца Амазонки. Наконец, чтобы взаимодействовать с нашим решением и визуализировать результаты, мы создаем интерактивный стримлит веб-приложение, работающее на АМС Фаргейт.

Мы включаем руководство по коду для вас, чтобы развернуть ресурсы для запуска решения на демонстрационных данных или ваших собственных данных.

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

На следующей диаграмме архитектуры показан двухэтапный рабочий процесс поиска семантически похожих столбцов. Первый этап проходит Шаговые функции AWS рабочий процесс, который создает вложения из табличных столбцов и строит поисковый индекс службы OpenSearch. На втором этапе, или этапе онлайн-вывода, приложение Streamlit запускается через Fargate. Веб-приложение собирает входные поисковые запросы и извлекает из индекса службы OpenSearch примерно k столбцов, наиболее похожих на запрос.

Архитектура решения

Рисунок 1. Архитектура решения

Автоматизированный рабочий процесс состоит из следующих шагов:

  1. Пользователь загружает наборы табличных данных в Простой сервис хранения Amazon (Amazon S3), который вызывает AWS Lambda функция, которая инициирует рабочий процесс Step Functions.
  2. Рабочий процесс начинается с Клей AWS задание, которое преобразует файлы CSV в Паркет Apache формат данных.
  3. Задание SageMaker Processing создает вложения для каждого столбца с использованием предварительно обученных моделей или пользовательских моделей встраивания столбцов. Задание SageMaker Processing сохраняет вложения столбцов для каждой таблицы в Amazon S3.
  4. Функция Lambda создает домен и кластер службы OpenSearch для индексации внедрений столбцов, созданных на предыдущем шаге.
  5. Наконец, с Fargate развертывается интерактивное веб-приложение Streamlit. Веб-приложение предоставляет пользователю интерфейс для ввода запросов для поиска похожих столбцов в домене службы OpenSearch.

Вы можете скачать учебник по коду с GitHub чтобы попробовать это решение на демонстрационных данных или на ваших собственных данных. Инструкции по развертыванию необходимых ресурсов для этого руководства доступны на Github.

Предпосылки

Для реализации этого решения необходимо следующее:

  • An Аккаунт AWS.
  • Базовое знакомство с сервисами AWS, такими как Комплект для разработки облачных сервисов AWS (AWS CDK), Lambda, OpenSearch Service и SageMaker Processing.
  • Табличный набор данных для создания поискового индекса. Вы можете принести свои собственные табличные данные или скачать примеры наборов данных на GitHub.

Создайте поисковый индекс

На первом этапе создается столбец индекса поисковой системы. На следующем рисунке показан рабочий процесс Step Functions, который запускает этот этап.

Рабочий процесс пошаговых функций

Рисунок 2 – Рабочий процесс пошаговых функций – несколько моделей внедрения

Datasets

В этом посте мы создадим поисковый индекс, включающий более 400 столбцов из более чем 25 наборов табличных данных. Наборы данных происходят из следующих общедоступных источников:

Полный список таблиц, включенных в указатель, см. в руководстве по коду на GitHub.

Вы можете принести свой собственный набор табличных данных, чтобы дополнить образцы данных или создать свой собственный поисковый индекс. Мы включили две функции Lambda, которые инициируют рабочий процесс Step Functions для построения поискового индекса для отдельных CSV-файлов или пакета CSV-файлов соответственно.

Преобразование CSV в паркет

Необработанные файлы CSV преобразуются в формат данных Parquet с помощью AWS Glue. Parquet – это формат файла с ориентацией на столбцы, предпочтительный для аналитики больших данных, который обеспечивает эффективное сжатие и кодирование. В наших экспериментах формат данных Parquet позволил значительно уменьшить размер хранилища по сравнению с необработанными файлами CSV. Мы также использовали Parquet в качестве общего формата данных для преобразования других форматов данных (например, JSON и NDJSON), поскольку он поддерживает расширенные вложенные структуры данных.

Создание вложений табличных столбцов

Чтобы извлечь вложения для отдельных столбцов таблицы в примерах наборов табличных данных в этом посте, мы используем следующие предварительно обученные модели из sentence-transformers библиотека. Дополнительные модели см. Предварительно обученные модели.

Задание обработки SageMaker выполняется create_embeddings.py(код) для одной модели. Для извлечения вложений из нескольких моделей рабочий процесс запускает параллельные задания обработки SageMaker, как показано в рабочем процессе Step Functions. Мы используем модель для создания двух наборов вложений:

  • имя_столбца_эмбеддинги – Вложения имен столбцов (заголовки)
  • columns_content_embeddings – Среднее вложение всех строк в столбец

Дополнительные сведения о процессе внедрения столбцов см. в руководстве по коду на GitHub.

Альтернативой этапу обработки SageMaker является создание пакетного преобразования SageMaker для встраивания столбцов в большие наборы данных. Для этого потребуется развернуть модель на конечной точке SageMaker. Для получения дополнительной информации см. Использовать пакетное преобразование.

Встраивание индекса с помощью OpenSearch Service

На последнем этапе этого этапа лямбда-функция добавляет вложения столбцов в сервис OpenSearch, приближенный к k-Nearest-Neighbor (kNN) поисковый индекс. Каждой модели присваивается свой поисковый индекс. Дополнительные сведения о приблизительных параметрах поискового индекса kNN см. к-НН.

Онлайн-вывод и семантический поиск с помощью веб-приложения

На втором этапе рабочего процесса выполняется стримлит веб-приложение, в котором вы можете вводить данные и искать семантически похожие столбцы, проиндексированные в службе OpenSearch. Прикладной уровень использует Балансировщик нагрузки приложений, Фаргейт и Лямбда. Инфраструктура приложений автоматически развертывается как часть решения.

Приложение позволяет вводить данные и искать семантически похожие имена столбцов, содержимое столбцов или и то, и другое. Кроме того, вы можете выбрать модель встраивания и количество ближайших соседей для возврата из поиска. Приложение получает входные данные, встраивает их в указанную модель и использует поиск kNN в службе OpenSearch для поиска вложений индексированных столбцов и поиска столбцов, наиболее похожих на заданный вход. Отображаемые результаты поиска включают имена таблиц, имена столбцов и оценки сходства для идентифицированных столбцов, а также расположение данных в Amazon S3 для дальнейшего изучения.

На следующем рисунке показан пример веб-приложения. В этом примере мы искали в нашем озере данных столбцы со схожими Column Names (тип полезной нагрузки), Чтобы district (полезная нагрузка). Приложение, используемое all-MiniLM-L6-v2 как встраивание модели и вернулся 10 (k) ближайших соседей из нашего индекса OpenSearch Service.

Приложение вернулось transit_district, city, boroughи location как четыре наиболее похожих столбца на основе данных, проиндексированных в OpenSearch Service. Этот пример демонстрирует способность подхода поиска идентифицировать семантически похожие столбцы в наборах данных.

Пользовательский интерфейс веб-приложения

Рисунок 3: Пользовательский интерфейс веб-приложения

Убирать

Чтобы удалить ресурсы, созданные AWS CDK в этом руководстве, выполните следующую команду:

cdk destroy --all

Заключение

В этом посте мы представили сквозной рабочий процесс для создания семантической поисковой системы для табличных столбцов.

Начните сегодня с ваших собственных данных с помощью нашего руководства по коду, доступного на GitHub. Если вам нужна помощь в ускорении использования машинного обучения в ваших продуктах и ​​процессах, обратитесь в Лаборатория решений для машинного обучения Amazon.


Об авторах

Качи Одоемене является прикладным ученым в AWS AI. Он создает решения AI/ML для решения бизнес-задач клиентов AWS.

Тейлор МакНалли является архитектором глубокого обучения в лаборатории решений для машинного обучения Amazon. Он помогает клиентам из различных отраслей создавать решения с использованием AI/ML на AWS. Он любит хорошую чашку кофе, прогулки на свежем воздухе и время со своей семьей и энергичной собакой.

Остин Уэлч работает специалистом по данным в лаборатории решений Amazon ML. Он разрабатывает пользовательские модели глубокого обучения, чтобы помочь клиентам AWS из государственного сектора ускорить внедрение ИИ и облачных технологий. В свободное время любит читать, путешествовать и заниматься джиу-джитсу.

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

Больше от AWS Большие данные