Búsqueda semántica de imágenes para artículos utilizando Amazon Rekognition, modelos base de Amazon SageMaker y el servicio de Amazon OpenSearch
Búsqueda semántica de imágenes utilizando Amazon Rekognition, SageMaker y OpenSearch de Amazon
Los editores digitales están buscando continuamente formas de optimizar y automatizar sus flujos de trabajo de medios para generar y publicar nuevo contenido lo más rápidamente posible.
Los editores pueden tener repositorios con millones de imágenes y, para ahorrar dinero, necesitan poder reutilizar estas imágenes en diferentes artículos. Encontrar la imagen que mejor se adapte a un artículo en repositorios de esta escala puede ser una tarea manual, repetitiva y que consume mucho tiempo, pero que puede ser automatizada. También depende de que las imágenes en el repositorio estén etiquetadas correctamente, lo cual también puede ser automatizado (para un caso de éxito de cliente, consulte la historia de éxito de Aller Media con KeyCore y AWS).
En este artículo, demostramos cómo utilizar Amazon Rekognition, Amazon SageMaker JumpStart y Amazon OpenSearch Service para resolver este problema empresarial. Amazon Rekognition facilita la capacidad de análisis de imágenes en sus aplicaciones sin necesidad de tener experiencia en aprendizaje automático (ML) y viene con varias APIs para cumplir casos de uso como detección y análisis de objetos, moderación de contenido, detección y análisis de rostros, y reconocimiento de texto y celebridades, que utilizamos en este ejemplo. SageMaker JumpStart es un servicio de bajo código que viene con soluciones preconstruidas, cuadernos de ejemplos y muchos modelos pre-entrenados de fuentes públicas que son fáciles de implementar con un solo clic en su cuenta de AWS. Estos modelos se han empaquetado de forma segura y fácilmente desplegables a través de las APIs de Amazon SageMaker. El nuevo SageMaker JumpStart Foundation Hub le permite implementar fácilmente modelos de lenguaje grandes (LLM) e integrarlos con sus aplicaciones. OpenSearch Service es un servicio completamente administrado que simplifica la implementación, escalado y operación de OpenSearch. OpenSearch Service le permite almacenar vectores y otros tipos de datos en un índice, y ofrece una funcionalidad completa que le permite buscar documentos utilizando vectores y medir la similitud semántica, que utilizamos en este artículo.
El objetivo final de este artículo es mostrar cómo podemos mostrar un conjunto de imágenes que son semánticamente similares a algún texto, ya sea un artículo o una sinopsis de televisión.
La siguiente captura de pantalla muestra un ejemplo de tomar un mini artículo como entrada de búsqueda, en lugar de utilizar palabras clave, y poder mostrar imágenes semánticamente similares.
- NVIDIA se asocia con gigantes de la India para avanzar en la IA en ...
- 2 senadores proponen un marco bipartidista para las leyes de inteli...
- La dependencia de la tecnología causó una ‘asombrosa’ d...
Resumen de la solución
La solución se divide en dos secciones principales. En primer lugar, se extrae metadatos de etiquetas y celebridades de las imágenes utilizando Amazon Rekognition. Luego, se genera un embedding de los metadatos utilizando un LLM. Se almacenan los nombres de las celebridades y el embedding de los metadatos en OpenSearch Service. En la segunda sección principal, se tiene una API para consultar el índice de OpenSearch Service en busca de imágenes utilizando las capacidades de búsqueda inteligente de OpenSearch para encontrar imágenes que sean semánticamente similares a su texto.
Esta solución utiliza nuestros servicios basados en eventos Amazon EventBridge, AWS Step Functions y AWS Lambda para orquestar el proceso de extracción de metadatos de las imágenes utilizando Amazon Rekognition. Amazon Rekognition realizará dos llamadas a la API para extraer etiquetas y celebridades conocidas de la imagen.
La API de detección de celebridades de Amazon Rekognition devuelve varios elementos en la respuesta. Para este artículo, utilizamos los siguientes:
- Nombre, ID y URLs: el nombre de la celebridad, un ID único de Amazon Rekognition y una lista de URLs como el enlace IMDb o Wikipedia de la celebridad para obtener más información.
- MatchConfidence: un puntaje de confianza que se puede utilizar para controlar el comportamiento de la API. Recomendamos aplicar un umbral adecuado a este puntaje en su aplicación para elegir su punto de operación preferido. Por ejemplo, al establecer un umbral del 99%, puede eliminar más falsos positivos pero puede perder algunas posibles coincidencias.
En su segunda llamada a la API, la API de detección de etiquetas de Amazon Rekognition devuelve varios elementos en la respuesta. Utilizamos lo siguiente:
- Nombre: el nombre de la etiqueta detectada.
- Confidence: el nivel de confianza en la etiqueta asignada a un objeto detectado.
Un concepto clave en la búsqueda semántica son los embeddings. Un embedding de palabras es una representación numérica de una palabra o grupo de palabras en forma de vector. Cuando tienes muchos vectores, puedes medir la distancia entre ellos, y los vectores que están cerca en distancia son semánticamente similares. Por lo tanto, si generas un embedding de los metadatos de todas tus imágenes, y luego generas un embedding de tu texto, ya sea un artículo o una sinopsis de televisión, por ejemplo, utilizando el mismo modelo, puedes encontrar imágenes que sean semánticamente similares a tu texto dado.
Existen muchos modelos disponibles dentro de SageMaker JumpStart para generar embeddings. Para esta solución, se utiliza GPT-J 6B Embedding de Hugging Face. Produce embeddings de alta calidad y tiene una de las mejores métricas de rendimiento según los resultados de evaluación de Hugging Face. Amazon Bedrock es otra opción, aún en vista previa, donde podrías elegir el modelo de embeddings de texto Amazon Titan para generar los embeddings.
Se utiliza el modelo pre-entrenado GPT-J de SageMaker JumpStart para crear un embedding de los metadatos de la imagen y almacenarlo como un vector k-NN en el índice de OpenSearch Service, junto con el nombre de la celebridad en otro campo.
La segunda parte de la solución es devolver al usuario las 10 mejores imágenes que sean semánticamente similares a su texto, ya sea un artículo o una sinopsis de TV, incluyendo cualquier celebridad si está presente. Al elegir una imagen para acompañar un artículo, se desea que la imagen resuene con los puntos relevantes del artículo. SageMaker JumpStart alberga muchos modelos de resumen que pueden tomar un texto extenso y reducirlo a los puntos principales del original. Para el modelo de resumen, se utiliza el modelo Summarize de AI21 Labs. Este modelo proporciona resúmenes de alta calidad de artículos de noticias y el texto de origen puede contener aproximadamente 10,000 palabras, lo que permite resumir todo el artículo de una vez.
Para detectar si el texto contiene algún nombre, potencialmente conocido como celebridad, se utiliza Amazon Comprehend que puede extraer entidades clave de una cadena de texto. Luego se filtra por la entidad de Persona, que se utiliza como parámetro de búsqueda de entrada.
Luego se toma el artículo resumido y se genera un embedding para usarlo como otro parámetro de búsqueda de entrada. Es importante destacar que se utiliza el mismo modelo implementado en la misma infraestructura para generar el embedding del artículo como se hizo para las imágenes. Luego se utiliza Exact k-NN con un script de puntuación para poder buscar por dos campos: nombres de celebridades y el vector que capturó la información semántica del artículo. Consulta esta publicación, Amazon OpenSearch Service’s vector database capabilities explained, sobre la escalabilidad del script de puntuación y cómo este enfoque en índices grandes puede generar altas latencias.
Recorrido
El siguiente diagrama ilustra la arquitectura de la solución.
Siguiendo las etiquetas numeradas:
- Subes una imagen a un cubo de Amazon S3
- Amazon EventBridge escucha este evento y luego activa una ejecución de AWS Step Function
- La Step Function toma la entrada de la imagen, extrae la etiqueta y los metadatos de la celebridad
- La función de AWS Lambda toma los metadatos de la imagen y genera un embedding
- La función de Lambda luego inserta el nombre de la celebridad (si está presente) y el embedding como un vector k-NN en un índice de OpenSearch Service
- Amazon S3 aloja un sitio web estático simple, servido por una distribución de Amazon CloudFront. La interfaz de usuario (UI) de frontend te permite autenticarte en la aplicación usando Amazon Cognito para buscar imágenes
- Envías un artículo o algún texto a través de la UI
- Otra función de Lambda llama a Amazon Comprehend para detectar cualquier nombre en el texto
- La función luego resume el texto para obtener los puntos relevantes del artículo
- La función genera un embedding del artículo resumido
- La función luego busca en el índice de imágenes de OpenSearch Service cualquier imagen que coincida con el nombre de la celebridad y los vecinos más cercanos para el vector utilizando la similitud del coseno
- Amazon CloudWatch y AWS X-Ray te brindan visibilidad en todo el flujo de trabajo de extremo a extremo para alertarte de cualquier problema.
Extraer y almacenar metadatos clave de la imagen
Las APIs de Amazon Rekognition DetectLabels y RecognizeCelebrities te proporcionan los metadatos de tus imágenes, etiquetas de texto que puedes utilizar para formar una oración y generar un embedding. El artículo te proporciona una entrada de texto que puedes utilizar para generar un embedding.
Generar y almacenar embeddings de palabras
La siguiente figura muestra cómo trazar los vectores de nuestras imágenes en un espacio bidimensional, donde, para ayudar visualmente, hemos clasificado los embeddings por su categoría principal.
También generas una incrustación de este artículo recién escrito, para poder buscar en OpenSearch Service las imágenes más cercanas al artículo en este espacio vectorial. Utilizando el algoritmo de los k-vecinos más cercanos (k-NN), defines cuántas imágenes devolver en tus resultados.
Ampliando la figura anterior, los vectores se clasifican según su distancia al artículo y luego se devuelven las imágenes k-vecinas más cercanas, donde k es 10 en este ejemplo.
OpenSearch Service ofrece la capacidad de almacenar vectores grandes en un índice, y también ofrece la funcionalidad de ejecutar consultas contra el índice utilizando k-NN, de modo que puedas consultar con un vector para devolver los documentos k-vecinos más cercanos que tienen vectores a una distancia cercana utilizando diversas medidas. Para este ejemplo, utilizamos la similitud del coseno.
Detectar nombres en el artículo
Utilizas Amazon Comprehend, un servicio de procesamiento de lenguaje natural (NLP) basado en IA, para extraer entidades clave del artículo. En este ejemplo, utilizas Amazon Comprehend para extraer entidades y filtrar por la entidad Persona, que devuelve cualquier nombre que Amazon Comprehend pueda encontrar en la historia del periodista, con solo unas pocas líneas de código:
def get_celebrities(payload):
response = comprehend_client.detect_entities(
Text=' '.join(payload["text_inputs"]),
LanguageCode="en",
)
celebrities = ""
for entity in response["Entities"]:
if entity["Type"] == "PERSON":
celebrities += entity["Text"] + " "
return celebrities
En este ejemplo, subes una imagen a Amazon Simple Storage Service (Amazon S3), lo que desencadena un flujo de trabajo en el que extraes metadatos de la imagen, incluidas etiquetas y cualquier celebridad. Luego transformas esos metadatos extraídos en una incrustación y almacenas todos estos datos en OpenSearch Service.
Resumir el artículo y generar una incrustación
Resumir el artículo es un paso importante para asegurarte de que la incrustación de palabras capture los puntos pertinentes del artículo, y por lo tanto devuelva imágenes que se relacionen con el tema del artículo.
El modelo de resumen de AI21 Labs es muy fácil de usar sin ninguna indicación y solo unas pocas líneas de código:
def summarise_article(payload):
sagemaker_endpoint_summarise = os.environ["SAGEMAKER_ENDPOINT_SUMMARIZE"]
response = ai21.Summarize.execute(
source=payload,
sourceType="TEXT",
destination=ai21.SageMakerDestination(sagemaker_endpoint_summarise)
)
response_summary = response.summary
return response_summary
Luego utilizas el modelo GPT-J para generar la incrustación
def get_vector(payload_summary):
sagemaker_endpoint = os.environ["SAGEMAKER_ENDPOINT_VECTOR"]
response = sm_runtime_client.invoke_endpoint(
EndpointName=sagemaker_endpoint,
ContentType="application/json",
Body=json.dumps(payload_summary).encode("utf-8"),
)
response_body = json.loads((response["Body"].read()))
return response_body["embedding"][0]
Luego buscas tus imágenes en OpenSearch Service
El siguiente es un ejemplo de fragmento de esa consulta:
def search_document_celeb_context(person_names, vector):
results = wr.opensearch.search(
client=os_client,
index="images",
search_body={
"size": 10,
"query": {
"script_score": {
"query": {
"match": {"celebrities": person_names }
},
"script": {
"lang": "knn",
"source": "knn_score",
"params": {
"field": "image_vector",
"query_value": vector,
"space_type": "cosinesimil"
}
}
}
}
},
)
return results.drop(columns=["image_vector"]).to_dict()
La arquitectura contiene una aplicación web simple para representar un sistema de gestión de contenido (CMS).
Para un artículo de ejemplo, utilizamos la siguiente entrada:
“A Werner Vogels le encantaba viajar por todo el mundo en su Toyota. Vemos su Toyota aparecer en muchas escenas mientras conduce para ir y conocer a varios clientes en sus ciudades natales.”
Ninguna de las imágenes tiene metadatos con la palabra “Toyota”, pero los semánticos de la palabra “Toyota” son sinónimos de automóviles y conducción. Por lo tanto, con este ejemplo, podemos demostrar cómo podemos ir más allá de la búsqueda por palabras clave y devolver imágenes que sean semánticamente similares. En la captura de pantalla anterior de la interfaz de usuario, la leyenda debajo de la imagen muestra los metadatos extraídos por Amazon Rekognition.
Puede incluir esta solución en un flujo de trabajo más grande donde utilice los metadatos que ya extrajo de sus imágenes para comenzar a utilizar la búsqueda vectorial junto con otros términos clave, como nombres de celebridades, para devolver las mejores imágenes y documentos resonantes para su consulta de búsqueda.
Conclusión
En esta publicación, mostramos cómo puede usar Amazon Rekognition, Amazon Comprehend, SageMaker y OpenSearch Service para extraer metadatos de sus imágenes y luego utilizar técnicas de aprendizaje automático para descubrirlos automáticamente utilizando la búsqueda semántica y de celebridades. Esto es particularmente importante dentro de la industria editorial, donde la velocidad es importante para publicar contenido fresco rápidamente y en múltiples plataformas.
Para obtener más información sobre el trabajo con activos multimedia, consulte Media intelligence just got smarter with Media2Cloud 3.0.