Zbuduj semantyczną wyszukiwarkę dla kolumn tabelarycznych za pomocą Transformers i Amazon OpenSearch Service

Zbuduj semantyczną wyszukiwarkę dla kolumn tabelarycznych za pomocą Transformers i Amazon OpenSearch Service

Węzeł źródłowy: 1986937

Znajdowanie podobnych kolumn w pliku a jezioro danych ma ważne zastosowania w czyszczeniu i adnotacji danych, dopasowywaniu schematów, odkrywaniu danych i analityce w wielu źródłach danych. Niezdolność do dokładnego wyszukiwania i analizowania danych z różnych źródeł stanowi potencjalny zabójca wydajności dla wszystkich, od analityków danych, badaczy medycznych, naukowców, po analityków finansowych i rządowych.

Konwencjonalne rozwiązania obejmują leksykalne wyszukiwanie słów kluczowych lub dopasowywanie wyrażeń regularnych, które są podatne na problemy z jakością danych, takie jak brak nazw kolumn lub różne konwencje nazewnictwa kolumn w różnych zbiorach danych (np. zip_code, zcode, postalcode).

W tym poście pokazujemy rozwiązanie do wyszukiwania podobnych kolumn na podstawie nazwy kolumny, zawartości kolumny lub obu. Rozwiązanie wykorzystuje przybliżone algorytmy najbliższych sąsiadów dostępne w Usługa Amazon OpenSearch aby wyszukać semantycznie podobne kolumny. Aby ułatwić wyszukiwanie, tworzymy reprezentacje cech (embeddings) dla poszczególnych kolumn w data lake przy użyciu wstępnie wytrenowanych modeli Transformer z biblioteka transformatorów zdań in Amazon Sage Maker. Na koniec, aby wchodzić w interakcje i wizualizować wyniki z naszego rozwiązania, budujemy interaktywne Strumieniowe działająca aplikacja internetowa AWS-Fargate.

Zaliczamy a samouczek kodu w celu wdrożenia zasobów w celu uruchomienia rozwiązania na przykładowych danych lub własnych danych.

Omówienie rozwiązania

Poniższy diagram architektury ilustruje dwuetapowy przepływ pracy służący do znajdowania semantycznie podobnych kolumn. Pierwszy etap przebiega m Funkcje kroków AWS przepływ pracy, który tworzy osadzenie z kolumn tabelarycznych i buduje indeks wyszukiwania usługi OpenSearch. Drugi etap, czyli etap wnioskowania online, uruchamia aplikację Streamlit za pośrednictwem Fargate. Aplikacja internetowa gromadzi wejściowe zapytania wyszukiwania i pobiera z indeksu usługi OpenSearch przybliżone k-najbardziej podobnych kolumn do zapytania.

Architektura rozwiązania

Rysunek 1. Architektura rozwiązania

Zautomatyzowany przepływ pracy przebiega w następujących krokach:

  1. Użytkownik przesyła tabelaryczne zestawy danych do pliku Usługa Amazon Simple Storage (Amazon S3), wiadro, które wywołuje AWS Lambda funkcja, która inicjuje przepływ pracy Step Functions.
  2. Przepływ pracy rozpoczyna się od Klej AWS zadanie, które konwertuje pliki CSV do Parkiet Apache Format danych.
  3. Zadanie SageMaker Processing tworzy osadzanie dla każdej kolumny przy użyciu wstępnie wyszkolonych modeli lub niestandardowych modeli osadzania kolumn. Zadanie SageMaker Processing zapisuje osadzenie kolumn dla każdej tabeli w Amazon S3.
  4. Funkcja Lambda tworzy domenę i klaster usługi OpenSearch w celu indeksowania osadzonych kolumn utworzonych w poprzednim kroku.
  5. Wreszcie wraz z Fargate wdrażana jest interaktywna aplikacja internetowa Streamlit. Aplikacja internetowa zapewnia użytkownikowi interfejs do wprowadzania zapytań w celu przeszukania domeny usługi OpenSearch w celu znalezienia podobnych kolumn.

Samouczek dotyczący kodu można pobrać ze strony GitHub aby wypróbować to rozwiązanie na przykładowych danych lub własnych danych. Instrukcje dotyczące sposobu wdrażania wymaganych zasobów dla tego samouczka są dostępne w witrynie Github.

Wymagania wstępne

Aby wdrożyć to rozwiązanie, potrzebujesz:

  • An Konto AWS.
  • Podstawowa znajomość usług AWS, takich jak Zestaw programistyczny AWS Cloud (AWS CDK), Lambda, usługa OpenSearch i przetwarzanie SageMaker.
  • Tabelaryczny zestaw danych do tworzenia indeksu wyszukiwania. Możesz przynieść własne dane tabelaryczne lub pobrać przykładowe zestawy danych GitHub.

Zbuduj indeks wyszukiwania

Pierwszy etap buduje indeks wyszukiwarki kolumnowej. Poniższy rysunek ilustruje przepływ pracy Step Functions uruchamiający ten etap.

Przepływ pracy funkcji krokowych

Rysunek 2 — przepływ pracy funkcji krokowych — wiele modeli osadzania

Zbiory danych

W tym poście tworzymy indeks wyszukiwania obejmujący ponad 400 kolumn z ponad 25 tabelarycznych zestawów danych. Zbiory danych pochodzą z następujących źródeł publicznych:

Aby zapoznać się z pełną listą tabel uwzględnionych w indeksie, zobacz samouczek dotyczący kodu GitHub.

Możesz przynieść własny zestaw danych tabelarycznych, aby rozszerzyć przykładowe dane lub zbudować własny indeks wyszukiwania. Dołączamy dwie funkcje Lambda, które inicjują przepływ pracy Step Functions w celu zbudowania indeksu wyszukiwania odpowiednio dla poszczególnych plików CSV lub partii plików CSV.

Przekształć plik CSV w parkiet

Surowe pliki CSV są konwertowane do formatu danych Parquet za pomocą kleju AWS. Parquet to zorientowany na kolumny format pliku preferowany w analizie dużych zbiorów danych, który zapewnia wydajną kompresję i kodowanie. W naszych eksperymentach format danych Parquet oferował znaczne zmniejszenie rozmiaru pamięci w porównaniu z nieprzetworzonymi plikami CSV. Użyliśmy również Parquet jako wspólnego formatu danych do konwersji innych formatów danych (na przykład JSON i NDJSON), ponieważ obsługuje on zaawansowane zagnieżdżone struktury danych.

Twórz osadzania kolumn tabelarycznych

Aby wyodrębnić osadzania dla poszczególnych kolumn tabeli w przykładowych tabelarycznych zestawach danych w tym poście, używamy następujących wstępnie wyszkolonych modeli z sentence-transformers biblioteka. Aby uzyskać informacje o dodatkowych modelach, zobacz Wstępnie wytrenowane modele.

Uruchomione zostanie zadanie przetwarzania SageMaker create_embeddings.py(kod) dla jednego modelu. W celu wyodrębnienia elementów osadzonych z wielu modeli przepływ pracy uruchamia równoległe zadania SageMaker Processing, jak pokazano w przepływie pracy Step Functions. Używamy modelu do stworzenia dwóch zestawów osadzeń:

  • nazwa_kolumny_osadzenie – Osadzanie nazw kolumn (nagłówków)
  • osadzenia_zawartości_kolumny – Średnie osadzenie wszystkich wierszy w kolumnie

Aby uzyskać więcej informacji na temat procesu osadzania kolumn, zobacz samouczek dotyczący kodu GitHub.

Alternatywą dla kroku SageMaker Processing jest utworzenie transformacji wsadowej SageMaker w celu osadzania kolumn w dużych zestawach danych. Wymagałoby to wdrożenia modelu w punkcie końcowym SageMaker. Aby uzyskać więcej informacji, zobacz Użyj transformacji wsadowej.

Osadzanie indeksów za pomocą usługi OpenSearch

W ostatnim kroku tego etapu funkcja Lambda dodaje osadzenie kolumn do przybliżonej usługi OpenSearch k-Nearest-Neighbor (kNN) indeks wyszukiwania. Każdy model ma przypisany własny indeks wyszukiwania. Aby uzyskać więcej informacji na temat przybliżonych parametrów indeksu wyszukiwania kNN, zobacz k-NN.

Wnioskowanie online i wyszukiwanie semantyczne za pomocą aplikacji internetowej

Drugi etap przepływu pracy uruchamia a Strumieniowe aplikacja internetowa, w której można wprowadzać dane wejściowe i wyszukiwać semantycznie podobne kolumny indeksowane w usłudze OpenSearch. Warstwa aplikacji wykorzystuje Moduł równoważenia obciążenia aplikacji, Fargate i Lambda. Infrastruktura aplikacji jest wdrażana automatycznie jako część rozwiązania.

Aplikacja umożliwia wprowadzenie danych wejściowych i wyszukiwanie semantycznie podobnych nazw kolumn, zawartości kolumn lub obu. Dodatkowo możesz wybrać model osadzania i liczbę najbliższych sąsiadów do zwrócenia z wyszukiwania. Aplikacja odbiera dane wejściowe, osadza je w określonym modelu i używa Wyszukiwanie kNN w usłudze OpenSearch aby wyszukać zaindeksowane osadzenie kolumn i znaleźć kolumny najbardziej podobne do podanego wejścia. Wyświetlane wyniki wyszukiwania obejmują nazwy tabel, nazwy kolumn i wyniki podobieństwa dla zidentyfikowanych kolumn, a także lokalizacje danych w Amazon S3 do dalszej eksploracji.

Poniższy rysunek przedstawia przykład aplikacji internetowej. W tym przykładzie wyszukaliśmy kolumny w naszym jeziorze danych, które mają podobne wartości Column Names (rodzaj ładunku) Do district (ładowność). Zastosowana aplikacja all-MiniLM-L6-v2 jak model osadzania i wrócił 10 (k) najbliżsi sąsiedzi z naszego indeksu usługi OpenSearch.

Aplikacja wróciła transit_district, city, borough, location jako cztery najbardziej podobne kolumny na podstawie danych zindeksowanych w usłudze OpenSearch. Ten przykład ilustruje zdolność podejścia wyszukiwania do identyfikowania semantycznie podobnych kolumn w zestawach danych.

Interfejs użytkownika aplikacji internetowej

Rysunek 3: Interfejs użytkownika aplikacji internetowej

Sprzątać

Aby usunąć zasoby utworzone przez AWS CDK w tym samouczku, uruchom następujące polecenie:

cdk destroy --all

Wnioski

W tym poście przedstawiliśmy kompleksowy przepływ pracy do budowy semantycznej wyszukiwarki kolumn tabelarycznych.

Już dziś zacznij korzystać z własnych danych, korzystając z naszego samouczka dotyczącego kodu dostępnego w witrynie GitHub. Jeśli potrzebujesz pomocy w przyspieszeniu korzystania z uczenia maszynowego w swoich produktach i procesach, skontaktuj się z Laboratorium rozwiązań do uczenia maszynowego Amazon Amazon.


O autorach

Kachi Odoemene jest naukowcem stosowanym w AWS AI. Buduje rozwiązania AI/ML do rozwiązywania problemów biznesowych dla klientów AWS.

Taylora McNally'ego jest architektem głębokiego uczenia w Amazon Machine Learning Solutions Lab. Pomaga klientom z różnych branż budować rozwiązania wykorzystujące AI/ML na AWS. Lubi filiżankę dobrej kawy, przebywanie na świeżym powietrzu i czas z rodziną i energicznym psem.

Austina Welcha jest Data Scientist w Amazon ML Solutions Lab. Opracowuje niestandardowe modele głębokiego uczenia się, aby pomóc klientom AWS z sektora publicznego przyspieszyć wdrażanie sztucznej inteligencji i chmury. W wolnym czasie lubi czytać, podróżować i jiu-jitsu.

Znak czasu:

Więcej z Duże zbiory danych AWS!