Bygg en semantisk sökmotor för kolumner i tabellform med Transformers och Amazon OpenSearch Service

Bygg en semantisk sökmotor för kolumner i tabellform med Transformers och Amazon OpenSearch Service

Källnod: 1986937

Hitta liknande kolumner i en datasjön har viktiga applikationer inom datarensning och annotering, schemamatchning, dataupptäckt och analys över flera datakällor. Oförmågan att exakt hitta och analysera data från olika källor representerar en potentiell effektivitetsmördare för alla från datavetare, medicinska forskare, akademiker till finans- och statliga analytiker.

Konventionella lösningar involverar lexikal nyckelordssökning eller matchning av reguljära uttryck, som är känsliga för datakvalitetsproblem som frånvarande kolumnnamn eller olika kolumnnamnkonventioner över olika datamängder (till exempel, zip_code, zcode, postalcode).

I det här inlägget visar vi en lösning för att söka efter liknande kolumner baserat på kolumnnamn, kolumninnehåll eller båda. Lösningen använder ungefärliga närmaste grannar algoritmer tillgänglig i Amazon OpenSearch Service för att söka efter semantiskt liknande kolumner. För att underlätta sökningen skapar vi funktionsrepresentationer (inbäddningar) för enskilda kolumner i datasjön med hjälp av förtränade transformatormodeller från satstransformatorbibliotek in Amazon SageMaker. Slutligen, för att interagera med och visualisera resultaten från vår lösning, bygger vi en interaktiv Strömbelyst webbapplikation som körs på AWS Fargate.

Vi inkluderar en kod handledning så att du kan distribuera resurserna för att köra lösningen på exempeldata eller din egen data.

Lösningsöversikt

Följande arkitekturdiagram illustrerar arbetsflödet i två steg för att hitta semantiskt liknande kolumner. Den första etappen körs en AWS stegfunktioner arbetsflöde som skapar inbäddningar från tabellkolumner och bygger OpenSearch Service-sökindex. Det andra steget, eller onlineinferenssteget, kör en Streamlit-applikation genom Fargate. Webbapplikationen samlar in sökfrågor och hämtar från OpenSearch Service-index de ungefärliga k-mest liknande kolumnerna till frågan.

Lösningsarkitektur

Figur 1. Lösningsarkitektur

Det automatiserade arbetsflödet fortsätter i följande steg:

  1. Användaren laddar upp tabelluppsättningar till en Amazon enkel lagringstjänst (Amazon S3) hink, som åberopar en AWS Lambda funktion som initierar arbetsflödet Step Functions.
  2. Arbetsflödet börjar med en AWS-lim jobb som konverterar CSV-filerna till Apache parkett dataformat.
  3. Ett SageMaker Processing-jobb skapar inbäddningar för varje kolumn med hjälp av förutbildade modeller eller anpassade kolumninbäddningsmodeller. SageMaker Processing-jobbet sparar kolumninbäddningarna för varje tabell i Amazon S3.
  4. En Lambda-funktion skapar OpenSearch Service-domänen och klustret för att indexera kolumninbäddningarna som skapades i föregående steg.
  5. Slutligen distribueras en interaktiv Streamlit webbapplikation med Fargate. Webbapplikationen tillhandahåller ett gränssnitt för användaren att mata in frågor för att söka i OpenSearch Service-domänen efter liknande kolumner.

Du kan ladda ner kodhandledningen från GitHub att prova den här lösningen på exempeldata eller din egen data. Instruktioner om hur du distribuerar de nödvändiga resurserna för denna handledning finns på Github.

Förutsättningar

För att implementera denna lösning behöver du följande:

  • An AWS-konto.
  • Grundläggande förtrogenhet med AWS-tjänster såsom AWS Cloud Development Kit (AWS CDK), Lambda, OpenSearch Service och SageMaker Processing.
  • En tabelluppsättning för att skapa sökindexet. Du kan ta med egna tabelldata eller ladda ner exempeldatauppsättningarna på GitHub.

Bygg ett sökindex

Det första steget bygger kolumnen sökmotorindex. Följande figur illustrerar arbetsflödet Step Functions som kör detta steg.

Steg funktioner arbetsflöde

Figur 2 – Arbetsflöde för stegfunktioner – flera inbäddningsmodeller

dataset

I det här inlägget bygger vi ett sökindex för att inkludera över 400 kolumner från över 25 tabelluppsättningar. Datauppsättningarna kommer från följande offentliga källor:

För den fullständiga listan över tabellerna som ingår i indexet, se kodhandledningen om GitHub.

Du kan ta med din egen tabelluppsättning för att utöka exempeldatan eller bygga ditt eget sökindex. Vi inkluderar två Lambda-funktioner som initierar arbetsflödet Step Functions för att bygga sökindexet för individuella CSV-filer eller en sats av CSV-filer.

Förvandla CSV till Parkett

Rå CSV-filer konverteras till Parkettdataformat med AWS Glue. Parkett är ett kolumnorienterat filformat som föredras inom big data-analys som ger effektiv komprimering och kodning. I våra experiment erbjöd Parquet-dataformatet en betydande minskning av lagringsstorleken jämfört med råa CSV-filer. Vi använde också Parquet som ett vanligt dataformat för att konvertera andra dataformat (till exempel JSON och NDJSON) eftersom det stöder avancerade kapslade datastrukturer.

Skapa kolumninbäddningar i tabellform

För att extrahera inbäddningar för enskilda tabellkolumner i tabelluppsättningarna i det här inlägget använder vi följande förtränade modeller från sentence-transformers bibliotek. För ytterligare modeller, se Förutbildade modeller.

SageMaker Processing-jobbet körs create_embeddings.py(koda) för en enda modell. För att extrahera inbäddningar från flera modeller kör arbetsflödet parallella SageMaker Processing-jobb som visas i arbetsflödet Step Functions. Vi använder modellen för att skapa två uppsättningar av inbäddningar:

  • kolumnnamn_inbäddningar – Inbäddningar av kolumnnamn (rubriker)
  • column_content_embeddings – Genomsnittlig inbäddning av alla rader i kolumnen

För mer information om kolumninbäddningsprocessen, se kodhandledningen på GitHub.

Ett alternativ till SageMaker Processing-steget är att skapa en SageMaker batchtransformering för att få kolumninbäddningar på stora datamängder. Detta skulle kräva att modellen distribueras till en SageMaker-slutpunkt. För mer information, se Använd Batch Transform.

Indexinbäddningar med OpenSearch Service

I det sista steget av det här steget lägger en lambdafunktion till kolumninbäddningarna till en OpenSearch Service ungefärlig k-Närmaste-Neighbor (kNN) sökindex. Varje modell tilldelas ett eget sökindex. För mer information om de ungefärliga kNN-sökindexparametrarna, se k-NN.

Online slutledning och semantisk sökning med en webbapp

Det andra steget i arbetsflödet körs a Strömbelyst webbapplikation där du kan ge indata och söka efter semantiskt liknande kolumner indexerade i OpenSearch Service. Applikationsskiktet använder en Application Load Balancer, Fargate och Lambda. Applikationsinfrastrukturen distribueras automatiskt som en del av lösningen.

Applikationen låter dig ge en ingång och söka efter semantiskt liknande kolumnnamn, kolumninnehåll eller båda. Dessutom kan du välja inbäddningsmodell och antal närmaste grannar att återvända från sökningen. Applikationen tar emot indata, bäddar in ingången med den angivna modellen och använder kNN-sökning i OpenSearch Service för att söka i indexerade kolumninbäddningar och hitta de kolumner som liknar den givna inmatningen. Sökresultaten som visas inkluderar tabellnamn, kolumnnamn och likhetspoäng för de identifierade kolumnerna, såväl som platserna för data i Amazon S3 för vidare utforskning.

Följande bild visar ett exempel på webbapplikationen. I det här exemplet sökte vi efter kolumner i vår datasjö som har liknande Column Names (typ av nyttolast) För att district (nyttolast). Applikationen som används all-MiniLM-L6-v2 som inbäddningsmodell och återvände 10 (k) närmaste grannar från vårt OpenSearch Service-index.

Ansökan kom tillbaka transit_district, city, boroughoch location som de fyra mest lika kolumnerna baserat på data som indexeras i OpenSearch Service. Det här exemplet visar förmågan hos sökmetoden att identifiera semantiskt likartade kolumner över datauppsättningar.

Användargränssnitt för webbapplikationer

Figur 3: Användargränssnitt för webbapplikationer

Städa upp

För att ta bort resurserna som skapats av AWS CDK i denna handledning, kör följande kommando:

cdk destroy --all

Slutsats

I det här inlägget presenterade vi ett end-to-end-arbetsflöde för att bygga en semantisk sökmotor för tabellkolumner.

Kom igång idag med din egen data med vår kodhandledning tillgänglig på GitHub. Om du vill ha hjälp med att påskynda din användning av ML i dina produkter och processer, vänligen kontakta Amazon Machine Learning Solutions Lab.


Om författarna

Kachi Odoemene är en tillämpad forskare vid AWS AI. Han bygger AI/ML-lösningar för att lösa affärsproblem för AWS-kunder.

Taylor McNally är en Deep Learning Architect på Amazon Machine Learning Solutions Lab. Han hjälper kunder från olika branscher att bygga lösningar som utnyttjar AI/ML på AWS. Han njuter av en god kopp kaffe, utomhus och tid med sin familj och energiska hund.

Austin Welch är en dataforskare i Amazon ML Solutions Lab. Han utvecklar skräddarsydda modeller för djupinlärning för att hjälpa AWS-kunder inom den offentliga sektorn att accelerera sin AI- och molnintroduktion. På fritiden tycker han om att läsa, resa och jiu-jitsu.

Tidsstämpel:

Mer från AWS Big Data