Cree un motor de búsqueda semántica para columnas tabulares con Transformers y Amazon OpenSearch Service

Cree un motor de búsqueda semántica para columnas tabulares con Transformers y Amazon OpenSearch Service

Nodo de origen: 1986937

Encontrar columnas similares en un datos tiene aplicaciones importantes en la limpieza y anotación de datos, coincidencia de esquemas, descubrimiento de datos y análisis en múltiples fuentes de datos. La incapacidad de encontrar y analizar con precisión datos de fuentes dispares representa un potencial asesino de eficiencia para todos, desde científicos de datos, investigadores médicos, académicos hasta analistas financieros y gubernamentales.

Las soluciones convencionales implican la búsqueda de palabras clave léxicas o la coincidencia de expresiones regulares, que son susceptibles a problemas de calidad de los datos, como nombres de columnas ausentes o diferentes convenciones de nombres de columnas en diversos conjuntos de datos (por ejemplo, zip_code, zcode, postalcode).

En esta publicación, demostramos una solución para buscar columnas similares según el nombre de la columna, el contenido de la columna o ambos. La solución utiliza algoritmos de vecinos más cercanos aproximados disponible en Servicio Amazon OpenSearch para buscar columnas semánticamente similares. Para facilitar la búsqueda, creamos representaciones de características (incrustaciones) para columnas individuales en el lago de datos usando modelos de Transformer pre-entrenados del biblioteca de transformadores de oraciones in Amazon SageMaker. Finalmente, para interactuar y visualizar los resultados de nuestra solución, construimos un interactivo iluminado aplicación web ejecutándose en AWS Fargate.

Incluimos un tutorial de código para que implemente los recursos para ejecutar la solución en datos de muestra o en sus propios datos.

Resumen de la solución

El siguiente diagrama de arquitectura ilustra el flujo de trabajo de dos etapas para encontrar columnas semánticamente similares. La primera etapa ejecuta un Funciones de paso de AWS flujo de trabajo que crea incrustaciones a partir de columnas tabulares y crea el índice de búsqueda de OpenSearch Service. La segunda etapa, o la etapa de inferencia en línea, ejecuta una aplicación Streamlit a través de Fargate. La aplicación web recopila consultas de búsqueda de entrada y recupera del índice del servicio OpenSearch las k columnas más similares aproximadas a la consulta.

Arquitectura de soluciones

Figura 1. Arquitectura de la solución

El flujo de trabajo automatizado procede en los siguientes pasos:

  1. El usuario carga conjuntos de datos tabulares en un Servicio de almacenamiento simple de Amazon (Amazon S3), que invoca un AWS Lambda que inicia el flujo de trabajo de Step Functions.
  2. El flujo de trabajo comienza con un Pegamento AWS trabajo que convierte los archivos CSV en Parquet Apache formato de datos.
  3. Un trabajo de procesamiento de SageMaker crea incrustaciones para cada columna utilizando modelos previamente entrenados o modelos de incrustación de columnas personalizados. El trabajo de procesamiento de SageMaker guarda las incrustaciones de columnas para cada tabla en Amazon S3.
  4. Una función de Lambda crea el dominio y el clúster de OpenSearch Service para indexar las incrustaciones de columnas producidas en el paso anterior.
  5. Finalmente, se implementa una aplicación web interactiva Streamlit con Fargate. La aplicación web proporciona una interfaz para que el usuario ingrese consultas para buscar columnas similares en el dominio del servicio OpenSearch.

Puede descargar el tutorial de código de GitHub para probar esta solución con datos de muestra o con sus propios datos. Las instrucciones sobre cómo implementar los recursos necesarios para este tutorial están disponibles en Github.

requisitos previos

Para implementar esta solución, necesita lo siguiente:

  • An Cuenta de AWS.
  • Familiaridad básica con los servicios de AWS, como el Kit de desarrollo en la nube de AWS (AWS CDK), Lambda, OpenSearch Service y SageMaker Processing.
  • Un conjunto de datos tabulares para crear el índice de búsqueda. Puede traer sus propios datos tabulares o descargar los conjuntos de datos de muestra en GitHub.

Crear un índice de búsqueda

La primera etapa construye la columna del índice del motor de búsqueda. La siguiente figura ilustra el flujo de trabajo de Step Functions que ejecuta esta etapa.

Flujo de trabajo de funciones de paso

Figura 2: flujo de trabajo de funciones de pasos: múltiples modelos de incrustación

Conjuntos de datos

En esta publicación, creamos un índice de búsqueda para incluir más de 400 columnas de más de 25 conjuntos de datos tabulares. Los conjuntos de datos proceden de las siguientes fuentes públicas:

Para obtener la lista completa de las tablas incluidas en el índice, consulte el tutorial de código en GitHub.

Puede traer su propio conjunto de datos tabulares para aumentar los datos de muestra o crear su propio índice de búsqueda. Incluimos dos funciones Lambda que inician el flujo de trabajo de Step Functions para crear el índice de búsqueda para archivos CSV individuales o un lote de archivos CSV, respectivamente.

Transformar CSV a Parquet

Los archivos CSV sin procesar se convierten al formato de datos Parquet con AWS Glue. Parquet es un formato de archivo de formato orientado a columnas preferido en el análisis de big data que proporciona compresión y codificación eficientes. En nuestros experimentos, el formato de datos Parquet ofreció una reducción significativa en el tamaño de almacenamiento en comparación con los archivos CSV sin procesar. También usamos Parquet como un formato de datos común para convertir otros formatos de datos (por ejemplo, JSON y NDJSON) porque admite estructuras de datos anidadas avanzadas.

Crear incrustaciones de columnas tabulares

Para extraer incorporaciones para columnas de tablas individuales en los conjuntos de datos tabulares de muestra en esta publicación, usamos los siguientes modelos previamente entrenados de la sentence-transformers biblioteca. Para modelos adicionales, consulte Modelos preentrenados.

El trabajo de procesamiento de SageMaker se ejecuta create_embeddings.py(código) para un solo modelo. Para extraer incrustaciones de varios modelos, el flujo de trabajo ejecuta trabajos de procesamiento de SageMaker en paralelo, como se muestra en el flujo de trabajo de Step Functions. Usamos el modelo para crear dos conjuntos de incrustaciones:

  • nombre_columna_incrustaciones – Incrustaciones de nombres de columnas (encabezados)
  • column_content_embeddings – Incrustación promedio de todas las filas en la columna

Para obtener más información sobre el proceso de incrustación de columnas, consulte el tutorial de código en GitHub.

Una alternativa al paso de procesamiento de SageMaker es crear una transformación por lotes de SageMaker para obtener incrustaciones de columnas en grandes conjuntos de datos. Esto requeriría implementar el modelo en un punto final de SageMaker. Para más información, ver Usar transformación por lotes.

Indexar incrustaciones con OpenSearch Service

En el paso final de esta etapa, una función Lambda agrega las incrustaciones de columnas a un k-vecino más cercano aproximado de OpenSearch Service (kNN) índice de búsqueda. A cada modelo se le asigna su propio índice de búsqueda. Para obtener más información sobre los parámetros de índice de búsqueda kNN aproximados, consulte k-NN.

Inferencia en línea y búsqueda semántica con una aplicación web

La segunda etapa del flujo de trabajo ejecuta un iluminado aplicación web donde puede proporcionar entradas y buscar columnas semánticamente similares indexadas en OpenSearch Service. La capa de aplicación utiliza un Balanceador de carga de aplicaciones, Fargate y Lambda. La infraestructura de la aplicación se implementa automáticamente como parte de la solución.

La aplicación le permite proporcionar una entrada y buscar nombres de columna semánticamente similares, contenido de columna o ambos. Además, puede seleccionar el modelo de incrustación y la cantidad de vecinos más cercanos para regresar de la búsqueda. La aplicación recibe entradas, incrusta la entrada con el modelo especificado y usa Búsqueda de kNN en el servicio OpenSearch para buscar incrustaciones de columnas indexadas y encontrar las columnas más similares a la entrada dada. Los resultados de la búsqueda que se muestran incluyen los nombres de las tablas, los nombres de las columnas y las puntuaciones de similitud de las columnas identificadas, así como las ubicaciones de los datos en Amazon S3 para una mayor exploración.

La siguiente figura muestra un ejemplo de la aplicación web. En este ejemplo, buscamos columnas en nuestro lago de datos que tengan Column Names (tipo de carga útil) A district (carga útil). La aplicación utilizada all-MiniLM-L6-v2 como el modelo de incrustación y volvió 10 (k) vecinos más cercanos de nuestro índice de OpenSearch Service.

La aplicación devolvió transit_district, city, boroughy location como las cuatro columnas más similares según los datos indexados en OpenSearch Service. Este ejemplo demuestra la capacidad del enfoque de búsqueda para identificar columnas semánticamente similares en conjuntos de datos.

Interfaz de usuario de la aplicación web

Figura 3: interfaz de usuario de la aplicación web

Limpiar

Para eliminar los recursos creados por AWS CDK en este tutorial, ejecute el siguiente comando:

cdk destroy --all

Conclusión

En esta publicación, presentamos un flujo de trabajo integral para crear un motor de búsqueda semántica para columnas tabulares.

Comience hoy con sus propios datos con nuestro tutorial de código disponible en GitHub. Si desea ayuda para acelerar el uso de ML en sus productos y procesos, comuníquese con el Laboratorio de soluciones de aprendizaje automático de Amazon.


Acerca de los autores

Kachi Odoemene es científico aplicado en AWS AI. Crea soluciones de IA/ML para resolver problemas comerciales para los clientes de AWS.

taylor mcnally es arquitecto de aprendizaje profundo en Amazon Machine Learning Solutions Lab. Ayuda a los clientes de diversas industrias a crear soluciones que aprovechan AI/ML en AWS. Disfruta de una buena taza de café, el aire libre y el tiempo con su familia y su perro enérgico.

austin gallego es científico de datos en Amazon ML Solutions Lab. Desarrolla modelos personalizados de aprendizaje profundo para ayudar a los clientes del sector público de AWS a acelerar su adopción de la inteligencia artificial y la nube. En su tiempo libre, le gusta leer, viajar y practicar jiu-jitsu.

Sello de tiempo:

Mas de Big Data de AWS