Crea un motore di ricerca semantico per colonne tabulari con Transformers e Amazon OpenSearch Service

Crea un motore di ricerca semantico per colonne tabulari con Transformers e Amazon OpenSearch Service

Nodo di origine: 1986937

Trovare colonne simili in a lago dati ha importanti applicazioni nella pulizia e nell'annotazione dei dati, nella corrispondenza degli schemi, nella scoperta dei dati e nell'analisi su più origini dati. L'incapacità di trovare e analizzare accuratamente i dati provenienti da fonti disparate rappresenta un potenziale killer dell'efficienza per tutti, dagli scienziati dei dati, ai ricercatori medici, agli accademici, agli analisti finanziari e governativi.

Le soluzioni convenzionali implicano la ricerca di parole chiave lessicali o la corrispondenza di espressioni regolari, che sono suscettibili a problemi di qualità dei dati come nomi di colonne assenti o convenzioni di denominazione delle colonne diverse tra set di dati diversi (ad esempio, zip_code, zcode, postalcode).

In questo post, dimostriamo una soluzione per la ricerca di colonne simili in base al nome della colonna, al contenuto della colonna o a entrambi. La soluzione utilizza algoritmi dei vicini più vicini approssimati disponibile in Servizio Amazon OpenSearch per cercare colonne semanticamente simili. Per facilitare la ricerca, creiamo rappresentazioni delle caratteristiche (incorporamenti) per le singole colonne nel data lake utilizzando modelli Transformer pre-addestrati dal libreria di trasformatori di frasi in Amazon Sage Maker. Infine, per interagire e visualizzare i risultati della nostra soluzione, creiamo un file interattivo Snello applicazione web in esecuzione AWS Fargate.

Includiamo un tutorial sul codice per distribuire le risorse per eseguire la soluzione su dati di esempio o sui propri dati.

Panoramica della soluzione

Il seguente diagramma dell'architettura illustra il flusso di lavoro in due fasi per la ricerca di colonne semanticamente simili. La prima fase esegue un Funzioni AWS Step flusso di lavoro che crea incorporamenti da colonne tabulari e crea l'indice di ricerca del servizio OpenSearch. La seconda fase, o fase di inferenza online, esegue un'applicazione Streamlit tramite Fargate. L'applicazione Web raccoglie le query di ricerca di input e recupera dall'indice del servizio OpenSearch le k colonne approssimative più simili alla query.

Architettura della soluzione

Figura 1. Architettura della soluzione

Il flusso di lavoro automatizzato procede nelle seguenti fasi:

  1. L'utente carica set di dati tabulari in un file Servizio di archiviazione semplice Amazon (Amazon S3), che richiama un AWS Lambda funzione che avvia il flusso di lavoro Step Functions.
  2. Il flusso di lavoro inizia con un Colla AWS lavoro che converte i file CSV in Parquet Apache formato dei dati.
  3. Un processo di elaborazione SageMaker crea incorporamenti per ogni colonna utilizzando modelli preaddestrati o modelli di incorporamento di colonne personalizzati. Il processo SageMaker Processing salva gli incorporamenti di colonne per ogni tabella in Amazon S3.
  4. Una funzione Lambda crea il dominio e il cluster del servizio OpenSearch per indicizzare gli incorporamenti di colonne prodotti nel passaggio precedente.
  5. Infine, un'applicazione Web Streamlit interattiva viene distribuita con Fargate. L'applicazione web fornisce all'utente un'interfaccia per inserire query per cercare colonne simili nel dominio del servizio OpenSearch.

È possibile scaricare il tutorial sul codice da GitHub per provare questa soluzione su dati di esempio o sui propri dati. Le istruzioni su come distribuire le risorse necessarie per questo tutorial sono disponibili su Github.

Prerequisiti

Per implementare questa soluzione, è necessario quanto segue:

  • An Account AWS.
  • Familiarità di base con i servizi AWS come il Kit di sviluppo cloud AWS (AWS CDK), Lambda, OpenSearch Service ed elaborazione SageMaker.
  • Un set di dati tabulare per creare l'indice di ricerca. Puoi portare i tuoi dati tabulari o scaricare i set di dati di esempio su GitHub.

Crea un indice di ricerca

La prima fase crea l'indice del motore di ricerca della colonna. La figura seguente illustra il flusso di lavoro di Step Functions che esegue questa fase.

Flusso di lavoro delle funzioni passo

Figura 2 – Flusso di lavoro delle funzioni Step – più modelli di incorporamento

Dataset

In questo post, creiamo un indice di ricerca per includere oltre 400 colonne da oltre 25 set di dati tabulari. I set di dati provengono dalle seguenti fonti pubbliche:

Per l'elenco completo delle tabelle incluse nell'indice, vedere il tutorial del codice su GitHub.

Puoi portare il tuo set di dati tabulare per aumentare i dati di esempio o creare il tuo indice di ricerca. Includiamo due funzioni Lambda che avviano il flusso di lavoro Step Functions per creare rispettivamente l'indice di ricerca per singoli file CSV o un batch di file CSV.

Trasforma CSV in Parquet

I file CSV non elaborati vengono convertiti nel formato dati Parquet con AWS Glue. Parquet è un formato di file in formato orientato alla colonna preferito nell'analisi dei big data che fornisce compressione e codifica efficienti. Nei nostri esperimenti, il formato dei dati Parquet ha offerto una riduzione significativa delle dimensioni di archiviazione rispetto ai file CSV non elaborati. Abbiamo anche utilizzato Parquet come formato di dati comune per convertire altri formati di dati (ad esempio JSON e NDJSON) perché supporta strutture di dati nidificate avanzate.

Crea incorporamenti di colonne tabulari

Per estrarre gli incorporamenti per le singole colonne della tabella nei set di dati tabulari di esempio in questo post, utilizziamo i seguenti modelli pre-addestrati dal sentence-transformers biblioteca. Per ulteriori modelli, vedere Modelli preaddestrati.

Viene eseguito il processo SageMaker Processing create_embeddings.py(codice) per un singolo modello. Per estrarre gli incorporamenti da più modelli, il flusso di lavoro esegue processi SageMaker Processing paralleli come mostrato nel flusso di lavoro Step Functions. Utilizziamo il modello per creare due set di incorporamenti:

  • nome_colonna_incorporamenti – Integrazioni di nomi di colonne (intestazioni)
  • colonna_content_embeddings – Incorporamento medio di tutte le righe nella colonna

Per ulteriori informazioni sul processo di incorporamento delle colonne, vedere l'esercitazione sul codice in GitHub.

Un'alternativa alla fase di elaborazione SageMaker consiste nel creare una trasformazione batch SageMaker per ottenere incorporamenti di colonne su set di dati di grandi dimensioni. Ciò richiederebbe la distribuzione del modello su un endpoint SageMaker. Per ulteriori informazioni, vedere Usa la trasformazione in batch.

Incorporamenti dell'indice con OpenSearch Service

Nella fase finale di questa fase, una funzione Lambda aggiunge gli incorporamenti di colonna a un valore approssimativo di OpenSearch Service k-Nearest-Neighbor (kNN) indice di ricerca. Ad ogni modello viene assegnato il proprio indice di ricerca. Per ulteriori informazioni sui parametri approssimativi dell'indice di ricerca kNN, vedere k-NN.

Inferenza online e ricerca semantica con un'app web

La seconda fase del flusso di lavoro esegue a Snello applicazione Web in cui è possibile fornire input e cercare colonne semanticamente simili indicizzate in OpenSearch Service. Il livello dell'applicazione utilizza un file Bilanciamento del carico dell'applicazione, Fargate e Lambda. L'infrastruttura dell'applicazione viene distribuita automaticamente come parte della soluzione.

L'applicazione consente di fornire un input e cercare nomi di colonne semanticamente simili, contenuti di colonne o entrambi. Inoltre, puoi selezionare il modello di incorporamento e il numero di vicini più vicini da restituire dalla ricerca. L'applicazione riceve input, incorpora l'input con il modello specificato e lo utilizza ricerca kNN in OpenSearch Service per cercare incorporamenti di colonne indicizzate e trovare le colonne più simili all'input specificato. I risultati della ricerca visualizzati includono i nomi delle tabelle, i nomi delle colonne e i punteggi di somiglianza per le colonne identificate, nonché le posizioni dei dati in Amazon S3 per un'ulteriore esplorazione.

La figura seguente mostra un esempio dell'applicazione web. In questo esempio, abbiamo cercato colonne nel nostro data lake con elementi simili Column Names (tipo di carico utile) A district (carico utile). L'applicazione utilizzata all-MiniLM-L6-v2 la modello di inclusione e tornò 10 (k) vicini più prossimi dal nostro indice del servizio OpenSearch.

L'applicazione è tornata transit_district, city, boroughe location come le quattro colonne più simili in base ai dati indicizzati in OpenSearch Service. Questo esempio dimostra la capacità dell'approccio di ricerca di identificare colonne semanticamente simili tra i set di dati.

Interfaccia utente dell'applicazione Web

Figura 3: interfaccia utente dell'applicazione Web

ripulire

Per eliminare le risorse create da AWS CDK in questo tutorial, esegui il seguente comando:

cdk destroy --all

Conclusione

In questo post, abbiamo presentato un flusso di lavoro end-to-end per la creazione di un motore di ricerca semantico per colonne tabulari.

Inizia oggi stesso con i tuoi dati con il nostro tutorial sul codice disponibile su GitHub. Se desideri assistenza per accelerare l'utilizzo del machine learning nei tuoi prodotti e processi, contatta il Lab di Amazon Machine Learning Solutions.


Informazioni sugli autori

Kachi Odoemene è uno scienziato applicato presso AWS AI. Crea soluzioni AI/ML per risolvere problemi aziendali per i clienti AWS.

Taylor McNally è un Deep Learning Architect presso Amazon Machine Learning Solutions Lab. Aiuta i clienti di vari settori a creare soluzioni sfruttando AI/ML su AWS. Gli piace una buona tazza di caffè, la vita all'aria aperta e il tempo con la sua famiglia e il suo cane energico.

Austin Welch è un Data Scientist presso l'Amazon ML Solutions Lab. Sviluppa modelli di deep learning personalizzati per aiutare i clienti del settore pubblico AWS ad accelerare l'adozione dell'intelligenza artificiale e del cloud. Nel tempo libero ama leggere, viaggiare e fare jiu-jitsu.

Timestamp:

Di più da Big Data di AWS