Erstellen Sie mit Transformers und Amazon OpenSearch Service eine semantische Suchmaschine für tabellarische Spalten

Erstellen Sie mit Transformers und Amazon OpenSearch Service eine semantische Suchmaschine für tabellarische Spalten

Quellknoten: 1986937

Finden ähnlicher Spalten in a Daten See hat wichtige Anwendungen in der Datenbereinigung und -anmerkung, Schemaabgleich, Datenerkennung und Analyse über mehrere Datenquellen hinweg. Die Unfähigkeit, Daten aus unterschiedlichen Quellen genau zu finden und zu analysieren, stellt einen potenziellen Effizienzkiller für alle dar, von Datenwissenschaftlern, medizinischen Forschern, Akademikern bis hin zu Finanz- und Regierungsanalysten.

Herkömmliche Lösungen umfassen die lexikalische Schlüsselwortsuche oder den Abgleich regulärer Ausdrücke, die anfällig für Datenqualitätsprobleme sind, wie z. B. fehlende Spaltennamen oder unterschiedliche Namenskonventionen für Spalten in verschiedenen Datensätzen (z. zip_code, zcode, postalcode).

In diesem Beitrag demonstrieren wir eine Lösung für die Suche nach ähnlichen Spalten basierend auf Spaltennamen, Spalteninhalt oder beidem. Die Lösung verwendet Näherungs-Nächste-Nachbarn-Algorithmen verfügbar in Amazon OpenSearch-Dienst um nach semantisch ähnlichen Spalten zu suchen. Um die Suche zu erleichtern, erstellen wir Feature-Repräsentationen (Einbettungen) für einzelne Spalten im Data Lake mit vortrainierten Transformer-Modellen aus dem Satz-Transformer-Bibliothek in Amazon Sage Maker. Um schließlich mit unserer Lösung zu interagieren und Ergebnisse zu visualisieren, erstellen wir eine interaktive Stromlit Webanwendung läuft auf AWS Fargate.

Wir schließen ein Code-Tutorial damit Sie die Ressourcen bereitstellen können, um die Lösung mit Beispieldaten oder Ihren eigenen Daten auszuführen.

Lösungsüberblick

Das folgende Architekturdiagramm veranschaulicht den zweistufigen Workflow zum Suchen semantisch ähnlicher Spalten. Die erste Stufe verläuft an AWS Step-Funktionen Workflow, der Einbettungen aus tabellarischen Spalten erstellt und den OpenSearch Service-Suchindex erstellt. Die zweite Stufe oder die Online-Inferenzstufe führt eine Streamlit-Anwendung über Fargate aus. Die Webanwendung sammelt eingegebene Suchanfragen und ruft aus dem Index des OpenSearch-Dienstes die ungefähr k-ähnlichsten Spalten zu der Anfrage ab.

Lösungsarchitektur

Abbildung 1. Lösungsarchitektur

Der automatisierte Workflow läuft in folgenden Schritten ab:

  1. Der Benutzer lädt tabellarische Datensätze in eine hoch Amazon Simple Storage-Service (Amazon S3)-Bucket, der eine aufruft AWS Lambda Funktion, die den Step Functions-Workflow initiiert.
  2. Der Arbeitsablauf beginnt mit einem AWS-Kleber Job, der die CSV-Dateien in konvertiert Apache-Parkett Datei Format.
  3. Ein SageMaker Processing-Job erstellt Einbettungen für jede Spalte unter Verwendung von vortrainierten Modellen oder benutzerdefinierten Spalteneinbettungsmodellen. Der SageMaker Processing-Job speichert die Spalteneinbettungen für jede Tabelle in Amazon S3.
  4. Eine Lambda-Funktion erstellt die OpenSearch Service-Domäne und den Cluster, um die im vorherigen Schritt erzeugten Spalteneinbettungen zu indizieren.
  5. Schließlich wird mit Fargate eine interaktive Streamlit-Webanwendung bereitgestellt. Die Webanwendung stellt eine Schnittstelle für den Benutzer bereit, um Abfragen einzugeben, um die OpenSearch-Dienstdomäne nach ähnlichen Spalten zu durchsuchen.

Sie können das Code-Tutorial von herunterladen GitHub um diese Lösung an Beispieldaten oder Ihren eigenen Daten auszuprobieren. Anweisungen zum Bereitstellen der erforderlichen Ressourcen für dieses Tutorial finden Sie unter Github.

Voraussetzungen

Um diese Lösung zu implementieren, benötigen Sie Folgendes:

  • An AWS-Konto.
  • Grundlegende Vertrautheit mit AWS-Services wie z AWS Cloud-Entwicklungskit (AWS CDK), Lambda, OpenSearch Service und SageMaker Processing.
  • Ein tabellarischer Datensatz zum Erstellen des Suchindex. Sie können Ihre eigenen tabellarischen Daten mitbringen oder die Beispieldatensätze herunterladen GitHub.

Erstellen Sie einen Suchindex

Die erste Stufe baut den Suchmaschinenindex der Spalte auf. Die folgende Abbildung veranschaulicht den Step Functions-Workflow, der diese Phase ausführt.

Arbeitsablauf für Schrittfunktionen

Abbildung 2 – Workflow für Schrittfunktionen – mehrere Einbettungsmodelle

Datensätze

In diesem Beitrag erstellen wir einen Suchindex, der über 400 Spalten aus über 25 tabellarischen Datensätzen enthält. Die Datensätze stammen aus folgenden öffentlichen Quellen:

Die vollständige Liste der im Index enthaltenen Tabellen finden Sie im Code-Tutorial auf GitHub.

Sie können Ihren eigenen tabellarischen Datensatz mitbringen, um die Beispieldaten zu erweitern, oder Ihren eigenen Suchindex erstellen. Wir schließen zwei Lambda-Funktionen ein, die den Step Functions-Workflow initiieren, um den Suchindex für einzelne CSV-Dateien bzw. einen Stapel von CSV-Dateien zu erstellen.

Wandeln Sie CSV in Parquet um

CSV-Rohdateien werden mit AWS Glue in das Parquet-Datenformat konvertiert. Parquet ist ein spaltenorientiertes Dateiformat, das in Big-Data-Analysen bevorzugt wird und eine effiziente Komprimierung und Codierung bietet. In unseren Experimenten bot das Parquet-Datenformat eine deutliche Reduzierung der Speichergröße im Vergleich zu rohen CSV-Dateien. Wir haben Parquet auch als gemeinsames Datenformat verwendet, um andere Datenformate (z. B. JSON und NDJSON) zu konvertieren, da es erweiterte verschachtelte Datenstrukturen unterstützt.

Erstellen Sie tabellarische Spalteneinbettungen

Um Einbettungen für einzelne Tabellenspalten in den tabellarischen Beispieldatensätzen in diesem Beitrag zu extrahieren, verwenden wir die folgenden vortrainierten Modelle aus der sentence-transformers Bibliothek. Weitere Modelle finden Sie unter Vortrainierte Modelle.

Der SageMaker-Verarbeitungsjob wird ausgeführt create_embeddings.py(Code) für ein einzelnes Modell. Zum Extrahieren von Einbettungen aus mehreren Modellen führt der Arbeitsablauf parallele SageMaker-Verarbeitungsaufträge aus, wie im Step Functions-Arbeitsablauf gezeigt. Wir verwenden das Modell, um zwei Sätze von Einbettungen zu erstellen:

  • Spaltenname_Einbettungen – Einbettungen von Spaltennamen (Überschriften)
  • Column_content_embeddings – Durchschnittliche Einbettung aller Zeilen in die Spalte

Weitere Informationen zum Spalteneinbettungsprozess finden Sie im Code-Tutorial auf GitHub.

Eine Alternative zum SageMaker-Verarbeitungsschritt besteht darin, eine SageMaker-Batch-Transformation zu erstellen, um Spalteneinbettungen für große Datasets zu erhalten. Dazu müsste das Modell auf einem SageMaker-Endpunkt bereitgestellt werden. Weitere Informationen finden Sie unter Verwenden Sie die Stapeltransformation.

Index-Einbettungen mit OpenSearch Service

Im letzten Schritt dieser Phase fügt eine Lambda-Funktion die Spalteneinbettungen zu einem ungefähren k-Nearest-Neighbor (kNN) Suchindex. Jedem Modell wird ein eigener Suchindex zugeordnet. Weitere Informationen zu den ungefähren kNN-Suchindexparametern finden Sie unter k-NN.

Online-Inferenz und semantische Suche mit einer Web-App

Die zweite Phase des Workflows läuft a Stromlit Webanwendung, in der Sie Eingaben bereitstellen und nach semantisch ähnlichen Spalten suchen können, die im OpenSearch-Dienst indiziert sind. Die Anwendungsschicht verwendet eine Anwendungs-Load-Balancer, Fargate und Lambda. Die Anwendungsinfrastruktur wird automatisch als Teil der Lösung bereitgestellt.

Die Anwendung ermöglicht es Ihnen, eine Eingabe bereitzustellen und nach semantisch ähnlichen Spaltennamen, Spalteninhalten oder beidem zu suchen. Darüber hinaus können Sie das Einbettungsmodell und die Anzahl der nächsten Nachbarn auswählen, die von der Suche zurückgegeben werden sollen. Die Anwendung empfängt Eingaben, bettet die Eingabe in das angegebene Modell ein und verwendet kNN-Suche im OpenSearch-Dienst um indizierte Spalteneinbettungen zu durchsuchen und die Spalten zu finden, die der gegebenen Eingabe am ähnlichsten sind. Die angezeigten Suchergebnisse umfassen die Tabellennamen, Spaltennamen und Ähnlichkeitsbewertungen für die identifizierten Spalten sowie die Speicherorte der Daten in Amazon S3 zur weiteren Untersuchung.

Die folgende Abbildung zeigt ein Beispiel der Webanwendung. In diesem Beispiel haben wir in unserem Data Lake nach Spalten gesucht, die ähnlich sind Column Names (Nutzlasttyp) Um district (Nutzlast). Die verwendete Anwendung all-MiniLM-L6-v2 wie die Einbettungsmodell Und kehrte zurück 10 (k) nächste Nachbarn aus unserem OpenSearch-Service-Index.

Die Bewerbung kam zurück transit_district, city, borough und location als die vier ähnlichsten Spalten basierend auf den in OpenSearch Service indizierten Daten. Dieses Beispiel demonstriert die Fähigkeit des Suchansatzes, semantisch ähnliche Spalten in Datensätzen zu identifizieren.

Benutzeroberfläche der Webanwendung

Abbildung 3: Benutzeroberfläche der Webanwendung

Aufräumen

Führen Sie den folgenden Befehl aus, um die vom AWS CDK in diesem Tutorial erstellten Ressourcen zu löschen:

cdk destroy --all

Zusammenfassung

In diesem Beitrag haben wir einen End-to-End-Workflow zum Erstellen einer semantischen Suchmaschine für tabellarische Spalten vorgestellt.

Beginnen Sie noch heute mit Ihren eigenen Daten mit unserem Code-Tutorial, das auf verfügbar ist GitHub. Wenn Sie Hilfe benötigen, um den Einsatz von ML in Ihren Produkten und Prozessen zu beschleunigen, wenden Sie sich bitte an die Amazon Machine Learning Solutions Lab.


Über die Autoren

Kachi Odoemene ist angewandter Wissenschaftler bei AWS AI. Er entwickelt KI/ML-Lösungen zur Lösung von Geschäftsproblemen für AWS-Kunden.

Taylor McNally ist Deep Learning Architect im Amazon Machine Learning Solutions Lab. Er hilft Kunden aus verschiedenen Branchen beim Aufbau von Lösungen, die KI/ML auf AWS nutzen. Er genießt eine gute Tasse Kaffee, die Natur und Zeit mit seiner Familie und seinem energiegeladenen Hund.

Austin Welch ist Data Scientist im Amazon ML Solutions Lab. Er entwickelt benutzerdefinierte Deep-Learning-Modelle, um AWS-Kunden aus dem öffentlichen Sektor dabei zu helfen, ihre KI- und Cloud-Einführung zu beschleunigen. In seiner Freizeit liest er gerne, reist und spielt Jiu-Jitsu.

Zeitstempel:

Mehr von AWS Big Data