Búsqueda intermodal con Amazon Nova Multimodal Embeddings

Amazon Nova Multimodal Embeddings procesa texto, documentos, imágenes, vídeo y audio a través de una arquitectura de modelo único. Disponible a través de Amazon Bedrock, el modelo convierte diferentes modalidades de entrada en incrustaciones numéricas dentro del mismo espacio vectorial, lo que admite cálculos de similitud directa independientemente del tipo de contenido. Desarrollamos este modelo unificado para reducir la necesidad de modelos integrados separados, que complican las arquitecturas, son difíciles de mantener y operar y limitan aún más los casos de uso a un enfoque unidimensional.

En esta publicación, exploramos cómo Amazon Nova Multimodal Embeddings aborda los desafíos de la búsqueda intermodal a través de un caso de uso práctico de comercio electrónico. Examinamos las limitaciones técnicas de los enfoques tradicionales y demostramos cómo Amazon Nova Multimodal Embeddings permite la recuperación a través de texto, imágenes y otras modalidades. Aprenderá a implementar un sistema de búsqueda multimodal generando incrustaciones, manejando consultas y midiendo el rendimiento. Proporcionamos ejemplos de código de trabajo y compartimos cómo agregar estas capacidades a sus aplicaciones.

El problema de la búsqueda

Los enfoques tradicionales implican búsqueda basada en palabras clave, búsqueda en lenguaje natural basada en incrustaciones de texto o búsqueda híbrida y no pueden procesar consultas visuales de manera efectiva, lo que crea una brecha entre la intención del usuario y las capacidades de recuperación. Las arquitecturas de búsqueda típicas separan el procesamiento visual y textual, perdiendo contexto en el proceso. Las consultas de texto se ejecutan en descripciones de productos mediante concordancia de palabras clave o incrustaciones de texto. Las consultas de imágenes, cuando son compatibles, operan a través de múltiples canales de visión por computadora con integración limitada al contenido textual. Esta separación complica la arquitectura del sistema y debilita la experiencia del usuario. Múltiples modelos de integración requieren ciclos de optimización y mantenimiento separados, mientras que las consultas multimodales no se pueden procesar de forma nativa dentro de un solo sistema. Las puntuaciones de similitud visual y textual operan en diferentes espacios matemáticos, lo que dificulta clasificar los resultados de manera consistente entre tipos de contenido. Esta separación requiere un mapeo complejo que no siempre se puede realizar, por lo que los sistemas integrados se mantienen separados, lo que crea silos de datos en el proceso y limita la funcionalidad. El contenido complejo del producto lo complica aún más, porque las páginas de productos combinan imágenes, descripciones, especificaciones y, a veces, demostraciones en vídeo.

Incorporaciones multimodales

Las incrustaciones multimodales asignan texto, imágenes, audio y video en un espacio vectorial compartido donde se agrupa contenido semánticamente similar. Por ejemplo, al procesar una consulta de texto sobre un vestido rojo de verano y una imagen de un vestido rojo, ambas entradas generan vectores muy juntos en el espacio de incrustación, lo que refleja su similitud semántica y desbloquea la recuperación intermodal.

Al utilizar incorporaciones multimodales, puede buscar en diferentes tipos de contenido sin mantener sistemas separados para cada modalidad, lo que resuelve el problema de los sistemas multimodales segmentados donde las organizaciones administran múltiples modelos de incorporación que son casi imposibles de integrar de manera efectiva porque las incorporaciones de diferentes modalidades son incompatibles. Una arquitectura de modelo único ayuda a garantizar una generación de incrustaciones consistente en todos los tipos de contenido, mientras que el contenido relacionado, como imágenes de productos, videos y sus descripciones, genera incrustaciones similares debido a objetivos de capacitación conjuntos. Las aplicaciones pueden generar incrustaciones para todos los tipos de contenido utilizando puntos finales API y dimensiones vectoriales idénticos, lo que reduce la complejidad del sistema.

Caso de uso: búsqueda de comercio electrónico

Considere un cliente que ve una camiseta en la televisión y quiere encontrar artículos similares para comprar. Pueden fotografiar el artículo con su teléfono o intentar describir lo que vieron en un texto y utilizarlo para buscar un producto. La búsqueda tradicional maneja consultas de texto que hacen referencia a metadatos razonablemente bien, pero no puede ejecutarlas cuando los clientes quieren usar imágenes para buscar o describir atributos visuales de un artículo. Esta experiencia de compra de TV a carrito muestra cómo la búsqueda visual y de texto funcionan juntas. El cliente carga una foto y el sistema la compara con catálogos de productos con imágenes y descripciones. El flujo de trabajo de comercio electrónico multimodal se muestra en la siguiente figura.

Cómo ayuda Amazon Nova Multimodal Embeddings

Amazon Nova maneja diferentes tipos de consultas de búsqueda a través del mismo modelo, lo que crea nuevas capacidades de búsqueda y ventajas técnicas. Ya sea que cargue imágenes, ingrese descripciones usando texto o combine ambos, el proceso funciona de la misma manera.

Capacidades de búsqueda intermodal

Como se indicó anteriormente, Amazon Nova Multimodal Embeddings procesa todas las modalidades admitidas a través de una arquitectura de modelo unificada. El contenido de entrada puede ser texto, imágenes, documentos, video o audio y luego genera incrustaciones en el mismo espacio vectorial. Esto admite cálculos de similitud directos entre diferentes tipos de contenido sin capas de transformación adicionales. Cuando los clientes cargan imágenes, el sistema las convierte en incrustaciones y busca en el catálogo de productos utilizando similitud de coseno. Obtienes productos con características visuales similares, independientemente de cómo se describan en el texto. Las consultas de texto funcionan de la misma manera: los clientes pueden describir lo que quieren y encontrar productos visualmente similares, incluso cuando las descripciones de los productos usan palabras diferentes. Si el cliente carga una imagen con una descripción de texto, el sistema procesa ambas entradas a través del mismo modelo de incrustación para una puntuación de similitud unificada. El sistema también extrae automáticamente los atributos del producto de las imágenes mediante el etiquetado automático del producto, lo que admite la generación de etiquetas semánticas que va más allá de la categorización manual.

Ventajas técnicas

La arquitectura unificada tiene varias ventajas sobre las incrustaciones de texto e imágenes separadas. El diseño de modelo único y el espacio semántico compartido desbloquea nuevos casos de uso que no se pueden lograr mediante la gestión de múltiples sistemas de integración. Las aplicaciones generan incrustaciones para todos los tipos de contenido utilizando los mismos puntos finales de API y dimensiones vectoriales. Un único modelo maneja las cinco modalidades, por lo que el contenido relacionado, como las imágenes de productos y sus descripciones, produce incrustaciones similares. Puede calcular distancias entre cualquier combinación de texto, imágenes, audio y video para medir qué tan similares son.

El modelo Amazon Nova Multimodal Embeddings utiliza el aprendizaje de representación Matryoshka, lo que admite múltiples dimensiones de incrustación: 3072, 1024, 384 y 256. El aprendizaje de incrustación Matryoshka almacena la información más importante en las primeras dimensiones y los detalles menos críticos en las dimensiones posteriores. Puede truncar desde el final (como se muestra en la siguiente figura) para reducir el espacio de almacenamiento y al mismo tiempo mantener la precisión para su caso de uso específico.

Arquitectura

Se requieren tres componentes principales para construir este enfoque: generación de incrustaciones, almacenamiento de vectores y búsqueda de similitudes. Los catálogos de productos se someten a un preprocesamiento para generar incrustaciones para todo tipo de contenido. El procesamiento de consultas convierte las entradas del usuario en incorporaciones utilizando el mismo modelo. La búsqueda por similitud compara las incorporaciones de consultas con las incorporaciones de productos almacenados, como se muestra en la siguiente figura.

Los sistemas de almacenamiento de vectores deben admitir las dimensiones de incrustación elegidas y proporcionar operaciones eficientes de búsqueda de similitudes. Las opciones incluyen bases de datos vectoriales diseñadas específicamente, bases de datos tradicionales con extensiones vectoriales o servicios vectoriales centrados en la nube como Amazon S3 Vectors, una característica de Amazon S3 que proporciona soporte nativo para almacenar y consultar incrustaciones de vectores directamente dentro de S3.

Requisitos previos

Para utilizar la función de forma eficaz, se requieren algunos aspectos clave para esta implementación. Una cuenta de AWS con permisos de acceso a Amazon Bedrock para el modelo Amazon Nova Multimodal Embeddings. Los servicios adicionales requeridos incluyen S3 Vectors. Puede seguirlo en el cuaderno disponible en nuestro repositorio de muestras de Amazon Nova.

Implementación

En las siguientes secciones, omitiremos los pasos iniciales de descarga y extracción de datos, pero el enfoque de extremo a extremo está disponible para que usted lo siga en este cuaderno. Los pasos omitidos incluyen la descarga de los archivos del conjunto de datos de Amazon Berkeley Objects (ABO), que incluyen metadatos de productos, imágenes de catálogos y modelos 3D. Estos archivos requieren extracción y preprocesamiento para analizar aproximadamente 398.212 imágenes y 9.232 listados de productos a partir de archivos JSON y tar comprimidos. Una vez extraídos, los datos requieren una alineación de metadatos entre las descripciones de los productos y sus recursos visuales correspondientes. Comenzamos este recorrido una vez completados estos pasos preliminares, centrándonos en el flujo de trabajo principal: configurar vectores S3, generar incrustaciones con Amazon Nova Multimodal Embeddings, almacenar vectores a escala e implementar la recuperación intermodal. Empecemos.

Creación de índices y depósitos de vectores S3:

Cree la infraestructura de almacenamiento de vectores para incrustaciones. S3 Vectors es un servicio administrado para almacenar y consultar vectores de alta dimensión a escala. El depósito actúa como contenedor para sus datos vectoriales, mientras que el índice define la estructura y las características de búsqueda. Configuramos el índice con la métrica de distancia del coseno, que mide la similitud en función de la dirección del vector en lugar de la magnitud, lo que lo hace ideal para incrustaciones normalizadas de modelos proporcionados por servicios como Amazon Nova Multimodal Embeddings.

*# Configuración de vectores S3* s3vector_bucket = "amzn-s3-demo-vector-bucket-crossmodal-search" s3vector_index = "product" embedding_dimension = 1024 s3vectors = boto3.client("s3vectors", region_name="us-east-1") *# Crear depósito de vectores S3* s3vectors.create_vector_bucket(vectorBucketName=s3vector_bucket) *# Crear índice* s3vectors.create_index( vectorBucketName=s3vector_bucket, indexName=s3vector_index, dataType="float32", dimensión=embedding_dimension, distanciaMetric="coseno" )

Preprocesamiento del catálogo de productos:

Aquí generamos incrustaciones. Tanto las imágenes de productos como las descripciones textuales requieren generación y almacenamiento integrados con metadatos adecuados para su recuperación. La API de Amazon Nova Embeddings procesa cada modalidad de forma independiente, convirtiendo descripciones de texto e imágenes de productos en vectores de 1024 dimensiones. Estos vectores viven en un espacio semántico unificado, lo que significa que una incrustación de texto y una incrustación de imagen del mismo producto estarán geométricamente cerca entre sí.

# Inicializar clase de cliente Nova Embeddings NovaEmbeddings: def __init__(self, region='us-east-1'): self.bedrock = boto3.client('bedrock-runtime', region_name=region) self.model_id = "amazon.nova-2-multimodal-embeddings-v1:0" def embed_text(self, text: str, dimension: int = 1024, propósito: str = "GENERIC_INDEX"): request_body = { "taskType": "SINGLE_EMBEDDING", "singleEmbeddingParams": { "embeddingDimension": dimensión, "embeddingPurpose": propósito, "text": { "truncationMode": "END", "value": texto } } } respuesta = self.bedrock.invoke_model(modelId=self.model_id, body=json.dumps(request_body)) resultado = json.loads(respuesta['body'].read()) devuelve resultado['incrustaciones'][0]['embedding'] def embed_image(self, image_bytes: bytes, dimensión: int = 1024, propósito: str = "GENERIC_INDEX"): request_body = { "taskType": "SINGLE_EMBEDING", "singleEmbeddingParams": { "embeddingDimension": dimensión, "embeddingPurpose": propósito, "image": { "format": "jpeg", "source": {"bytes": base64.b64encode(image_bytes).decode()} } } } respuesta = self.bedrock.invoke_model(modelId=self.model_id, body=json.dumps(request_body)) resultado = json.loads(respuesta['body'].read()) devuelve resultado['incrustaciones'][0]['incrustación'] incrustaciones = NovaEmbeddings()

Usamos el siguiente código para generar las incrustaciones y cargar los datos en nuestra tienda de vectores.

# Generar incrustaciones y cargarlas en Amazon S3 Vectors def get_product_text(product): name = product.get('item_name', [{}])[0].get('valor', '') if isinstance(product.get('item_name'), lista) else str(product.get('item_name', '')) marca = product.get('marca', [{}])[0].get('valor', '') si producto.get('marca') else '' devuelve f"{nombre}. {marca}".strip() vectores_to_upload =[]tamaño_lote = 10 catálogo =[]# Mantener como referencia local para el producto en tqdm(sampled_products, desc="Procesando productos"): img_path = get_image_path(product) text = get_product_text(product) product_id = product.get('item_id', str(len(catalog))) con open(img_path, 'rb') como f: img_bytes = f.read() # Generar incrustaciones text_emb = embeddings.embed_text(text) image_emb = embeddings.embed_image(img_bytes) # Almacenar en el catálogo para uso local catalog.append({ 'text': text, 'image_path': str(img_path), 'text_emb': text_emb, 'image_emb': image_emb, 'product_id': product_id }) # Preparar vectores para cargar S3 vectores_to_upload.extend([ { "key": f"text-{product_id}", "data": {"float32": text_emb}, "metadata": {"product_id": product_id, "text": text, "image_path": str(img_path), "type": "text"} }, { "key": f"image-{product_id}", "data": {"float32": image_emb}, "metadata": {"product_id": product_id, "text": text, "image_path": str(img_path), "type": "image"} }, { "key": f"combined-{product_id}", "data": {"float32": np.mean([text_emb, image_emb], axis=0).tolist()}, "metadata": {"product_id": product_id, "text": text, "image_path": str(img_path), "type": "combined"} } ]) # Carga por lotes si len(vectors_to_upload) >= tamaño_lote * 3: s3vectors.put_vectors(vectorBucketName=s3vector_bucket, indexName=s3vector_index, vectores=vectors_to_upload) vectores_to_upload =[]# Cargar los vectores restantes si vectores_to_upload: s3vectors.put_vectors(vectorBucketName=s3vector_bucket, indexName=s3vector_index, vectores=vectors_to_upload)

Procesamiento de consultas:

Este código maneja la entrada del cliente a través de la API. Las consultas de texto, cargas de imágenes o combinaciones se convierten al mismo formato vectorial utilizado para su catálogo de productos. Para consultas multimodales que combinan texto e imagen, aplicamos fusión media para crear un único vector de consulta que capture información de ambas modalidades. La lógica de procesamiento de consultas maneja tres tipos de entrada distintos y prepara la representación de incrustación adecuada para la búsqueda de similitudes en el índice de vectores de S3.

def search_s3(query=None, query_image=None, query_type="text", search_mode="combined", top_k=5): """ Buscar usando vectores S3 query_type: 'texto', 'imagen' o 'both' search_mode: 'text', 'image' o 'combined' """ # Obtener incrustación de consulta si query_type == 'both': text_emb = embeddings.embed_text(query) con open(query_image, 'rb') como f: image_emb = embeddings.embed_image(f.read()) query_emb = np.mean([text_emb, image_emb], axis=0).tolist() query_image_path = query_image elif query_type == 'text': query_emb = embeddings.embed_text(consulta) query_image_path = Ninguno más: con open(query_image, 'rb') como f: query_emb = embeddings.embed_image(f.read()) query_image_path = query_image

Búsqueda de similitud de vectores:

A continuación, agregamos la recuperación intermodal utilizando la API de consulta de S3 Vectors. El sistema encuentra la coincidencia de incrustación más cercana a la consulta, independientemente de si se trata de texto o una imagen. Usamos la similitud del coseno como métrica de distancia, que mide el ángulo entre vectores en lugar de su distancia absoluta. Este enfoque funciona bien para incrustaciones normalizadas y es eficiente en cuanto a recursos, lo que lo hace adecuado para catálogos grandes cuando se combina con algoritmos de vecino más cercano aproximado. S3 Vectors maneja la infraestructura de indexación y búsqueda, por lo que usted puede concentrarse en la lógica de la aplicación mientras el servicio administra la escalabilidad y la optimización del rendimiento.

# Consulta de respuesta de vectores S3 = s3vectors.query_vectors( vectorBucketName=s3vector_bucket, indexName=s3vector_index, queryVector={"float32": query_emb}, topK=top_k, returnDistance=True, returnMetadata=True, filter={"metadata.type": {"equals": search_mode}})

Clasificación de resultados:

Las puntuaciones de similitud calculadas por S3 Vectors proporcionan el mecanismo de clasificación. La similitud del coseno entre las incorporaciones de consultas y catálogos determina el orden de los resultados, y las puntuaciones más altas indican mejores coincidencias. En los sistemas de producción, normalmente se recopilarían datos de clics y juicios de relevancia para validar que la clasificación se correlaciona con el comportamiento real del usuario. S3 Vectors devuelve valores de distancia que convertimos en puntuaciones de similitud (1 – distancia) para una interpretación intuitiva donde los valores más altos indican coincidencias más cercanas.

# Extraer y clasificar los resultados por similitud ranking_results =[]para el resultado en respuesta['vectors']: metadatos = resultado['metadata'] distancia = resultado.get('distancia', 0) similitud = 1 – distancia # Convertir distancia a puntuación de similitud ranking_results.append({ 'product_id': metadata['product_id'], 'text': metadata['text'], 'image_path': metadata['image_path'], 'similitud': similitud, 'distancia': distancia }) # Los resultados se ordenan por vectores S3 (las mejores coincidencias primero) devuelven resultados_clasificados

Conclusión

Amazon Nova Multimodal Embeddings resuelve el problema central de la búsqueda intermodal mediante el uso de un modelo en lugar de administrar sistemas separados. Puede utilizar Amazon Nova Multimodal Embeddings para crear búsquedas que funcionen ya sea que los clientes carguen imágenes, ingresen descripciones como texto o combinen ambos enfoques.

La implementación es sencilla mediante las API de Amazon Bedrock y las dimensiones de inserción de Matryoshka le permiten optimizar sus requisitos específicos de precisión y costo. Si está creando una búsqueda de comercio electrónico, descubrimiento de contenido o una aplicación donde los usuarios interactúan con múltiples tipos de contenido, este enfoque unificado reduce tanto la complejidad del desarrollo como la sobrecarga operativa.

El aprendizaje de la representación de Matryoshka mantiene la calidad de integración en diferentes dimensiones[2]. La degradación del rendimiento sigue patrones predecibles, lo que permite que las aplicaciones se optimicen para casos de uso específicos.

Próximos pasos

Amazon Nova Multimodal Embeddings está disponible en Amazon Bedrock. Consulte Uso de Nova Embeddings para obtener referencias de API, ejemplos de código y patrones de integración para arquitecturas comunes.

El repositorio de ejemplos de AWS contiene ejemplos de implementación para incorporaciones multimodales.

Lea este cuaderno de ejemplo de comercio electrónico específico aquí

Sobre los autores

Tony Santiago es arquitecto de soluciones de socios mundiales en AWS, dedicado a escalar la adopción de IA generativa entre integradores de sistemas globales. Se especializa en creación de soluciones, alineación técnica de comercialización y desarrollo de capacidades, lo que permite a decenas de miles de constructores de socios de GSI ofrecer soluciones impulsadas por IA para sus clientes. Con más de 20 años de experiencia en tecnología global y una década con AWS, Tony defiende tecnologías prácticas que impulsan resultados comerciales mensurables. Fuera del trabajo, le apasiona aprender cosas nuevas y pasar tiempo con la familia.

Adewale Akinfaderin es científico de datos sénior e IA generativa en Amazon Bedrock, donde contribuye a innovaciones de vanguardia en modelos fundamentales y aplicaciones de IA generativa en AWS. Su experiencia se centra en métodos de IA/ML reproducibles y de extremo a extremo, implementaciones prácticas y ayuda a clientes globales a formular y desarrollar soluciones escalables para problemas interdisciplinarios. Tiene dos títulos de posgrado en física y un doctorado en ingeniería.

Sharon Li es arquitecta de soluciones en AWS y reside en el área de Boston, MA. Trabaja con clientes empresariales, ayudándolos a resolver problemas difíciles y desarrollar AWS. Fuera del trabajo, le gusta pasar tiempo con su familia y explorar restaurantes locales.

Sundaresh R. Iyer es arquitecto de soluciones asociado en Amazon Web Services (AWS), donde trabaja en estrecha colaboración con socios de canal e integradores de sistemas para diseñar, escalar y poner en funcionamiento arquitecturas de inteligencia artificial y de inteligencia generativa. Con más de 15 años de experiencia que abarca gestión de productos, plataformas de desarrollo e infraestructura en la nube, se especializa en aprendizaje automático y herramientas de desarrollo basadas en inteligencia artificial. A Sundaresh le apasiona ayudar a los socios a pasar de la experimentación a la producción mediante la creación de sistemas de inteligencia artificial seguros, gobernados y escalables que brinden resultados comerciales mensurables.