Utilisation de Nova Embeddings
Amazon Nova Multimodal Embeddings est un modèle de vectorisations de pointe pour les applications RAG agentique et de recherche sémantique. Il s’agit du premier modèle de vectorisations unifié qui prend en charge le texte, les documents, les images, la vidéo et l’audio via un modèle unique, afin de permettre une recherche intermodale avec une précision de pointe. Nova Multimodal Embeddings mappe chacun de ces types de contenu dans un espace sémantique unifié, permettant aux développeurs d’effectuer des opérations vectorielles unimodales, cross-modales et multimodales.
L’API Nova Embeddings peut être exploitée dans diverses applications, telles que :
-
Extraction et recommandation de contenu sémantique : générez des vectorisations pour votre contenu, puis utilisez-les pour trouver des éléments similaires ou fournir des recommandations personnalisées à vos utilisateurs.
-
Recherche multimodale : combinez les vectorisations de différents types de contenu pour bénéficier de puissantes capacités de recherche intermodale.
-
RAG : générez des vectorisations à partir de contenu multimodal, tel que des documents contenant du texte et des images entrelacés, afin d’optimiser votre flux de travail de recherche pour les applications GenAI.
Fonctionnalités principales
-
Prise en charge du texte, des images, des images de documents, des vidéos et des fichiers audio dans un espace sémantique unifié. La longueur maximale du contexte est de 8 000 tokens ou 30 secondes de vidéo et 30 secondes d’audio.
-
API synchrones et asynchrones : l’API prend en charge à la fois l’utilisation synchrone et asynchrone.
-
Segmentation de fichiers volumineux : l’API asynchrone facilite le traitement de données d’entrée volumineuses en fournissant une segmentation créée à l’API pour les textes, vidéos et fichiers audio longs, contrôlée par des paramètres définis par l’utilisateur. Le modèle générera une seule vectorisation pour chaque segment.
-
Vidéo avec audio : traitez simultanément la vidéo et l’audio. L’API vous permet de spécifier si vous souhaitez une seule vectorisation représentant les deux modalités ou deux vectorisations représentant respectivement le flux vidéo et le flux audio.
-
Objectif de la vectorisation : Nova Multimodal Embeddings vous permet d’optimiser vos vectorisations en fonction de l’application en aval prévue. Les cas d’utilisation pris en charge comprennent la recherche (RAG/Search), la classification et le cluster. Les valeurs spécifiques dépendent de l’application (voir la bonne pratique).
-
Tailles des dimensions : 4 tailles de dimensions pour trouver un compromis entre la précision de la vectorisation et le coût de stockage des vecteurs : 3072 ; 1024 ; 384 ; 256.
-
Méthodes de saisie : vous pouvez soit transmettre le contenu à intégrer en spécifiant un URI S3, soit l’intégrer en ligne sous forme de codage base64.
Fonctionnement de Nova Multimodal Embeddings
-
Lorsqu’un contenu est transmis via les vectorisations Nova, le modèle convertit ce contenu en un format numérique universel, appelé vecteur. Un vecteur est un ensemble de valeurs numériques arbitraires qui peuvent ensuite être utilisées pour diverses fonctionnalités de recherche. Les contenus similaires se voient attribuer un vecteur plus proche que les contenus moins similaires. Par exemple, un contenu pouvant être décrit comme « joyeux » se voit attribuer un vecteur plus proche d’un vecteur tel que « joie » que d’un vecteur tel que « tristesse ».
Prérequis
Pour utiliser Multimodal Embeddings, vous avez besoin des éléments suivants :
-
Python installé
-
L’AWS CLI installée
-
L’AWS CLI configurée avec les informations d’identification d’accès à votre compte AWS
-
Le modèle Nova Multimodal Embeddings activé sur votre compte AWS
Une fois ces éléments activés, vous pouvez effectuer des demandes de vectorisations asynchrones ou synchrones.
Génération de vectorisations de manière synchrone
Pour les éléments de contenu plus petits, vous pouvez utiliser l’API d’exécution Bedrock InvokeModel. Il s’agit d’une bonne option pour générer rapidement des vectorisations pour du texte, des images ou des fichiers audio/vidéo courts.
L’exemple suivant génère une vectorisation synchrone pour le texte « Hello World ! »
import json import boto3 # Create the Bedrock Runtime client. bedrock_runtime = boto3.client( service_name="bedrock-runtime", region_name="us-east-1", ) # Define the request body. request_body = { "taskType": "SINGLE_EMBEDDING", "singleEmbeddingParams": { "embeddingPurpose": "GENERIC_INDEX", "embeddingDimension": 3072, "text": {"truncationMode": "END", "value": "Hello, World!"}, }, } try: # Invoke the Nova Embeddings model. response = bedrock_runtime.invoke_model( body=json.dumps(request_body, indent=2), modelId="amazon.nova-2-multimodal-embeddings-v1:0", accept="application/json", contentType="application/json", ) except Exception as e: # Add your own exception handling here. print(e) # Print the request ID. print("Request ID:", response.get("ResponseMetadata").get("RequestId")) # Print the response body. response_body = json.loads(response.get("body").read()) print(json.dumps(response_body, indent=2))
La sortie doit se présenter comme suit :
Request ID: fde55db5-c129-423b-c62d-7a8b36cf2859 { "embeddings": [ { "embeddingType": "TEXT", "embedding": [ 0.031115104, 0.032478657, 0.10006265, ... ] } ] }
Génération de vectorisations de manière asynchrone
Pour les fichiers de contenu plus volumineux, vous pouvez utiliser la fonction d’exécution Bedrock StartAsyncInvoke afin de générer des vectorisations de manière asynchrone. Cela vous permet de soumettre une tâche et d’extraire les résultats ultérieurement, sans bloquer l’exécution de l’application. Les résultats sont enregistrés dans Amazon S3.
L’exemple suivant lance une tâche de génération de vectorisation asynchrone pour un fichier vidéo :
import boto3 # Create the Bedrock Runtime client. bedrock_runtime = boto3.client( service_name="bedrock-runtime", region_name="us-east-1", ) model_input = { "taskType": "SEGMENTED_EMBEDDING", "segmentedEmbeddingParams": { "embeddingPurpose": "GENERIC_INDEX", "embeddingDimension": 3072, "video": { "format": "mp4", "embeddingMode": "AUDIO_VIDEO_COMBINED", "source": { "s3Location": {"uri": "s3://amzn-s3-demo-bucket/path/to/video.mp4"} }, "segmentationConfig": { "durationSeconds": 15 # Segment into 15 second chunks }, }, }, } try: # Invoke the Nova Embeddings model. response = bedrock_runtime.start_async_invoke( modelId="amazon.nova-2-multimodal-embeddings-v1:0", modelInput=model_input, outputDataConfig={ "s3OutputDataConfig": { "s3Uri": "s3://amzn-s3-demo-bucket" } }, ) except Exception as e: # Add your own exception handling here. print(e) # Print the request ID. print("Request ID:", response.get("ResponseMetadata").get("RequestId")) # Print the invocation ARN. print("Invocation ARN:", response.get("invocationArn"))
La sortie doit se présenter comme suit :
Request ID: 07681e80-5ce0-4723-cf52-68bf699cd23e Invocation ARN: arn:aws:bedrock:us-east-1:111122223333:async-invoke/g7ur3b32a10n
Après avoir lancé la tâche asynchrone, utilisez invocationArn pour vérifier l’état de la tâche avec la fonction GetAsyncInvoke. Pour afficher les invocations asynchrones récentes et leur état, utilisez la fonction ListAsyncInvokes.
Une fois la génération de vectorisations asynchrones terminée, les artefacts sont écrits dans le compartiment S3 que vous avez spécifié comme destination de sortie. Les fichiers auront la structure suivante :
amzn-s3-demo-bucket/job-id/ segmented-embedding-result.json embedding-audio.jsonl embedding-image.json embedding-text.jsonl embedding-video.jsonl manifest.json