Interroger les index pour obtenir les voisins les plus proches

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Une fois l'index créé, vous pouvez exécuter des requêtes pour obtenir les voisins les plus proches.

Chaque DeployedIndex possède un DEPLOYED_INDEX_SERVER_IP que vous pouvez récupérer en répertoriant les IndexEndpoints. Pour interroger un DeployedIndex, connectez-vous à son DEPLOYED_INDEX_SERVER_IP sur le port 10000, puis appelez la méthode Match ou BatchMatch.

Les exemples suivants utilisent l'outil Open Source grpc_cli pour envoyer des requêtes grpc au serveur d'index déployé. Dans le premier exemple, vous envoyez une seule requête à l'aide de la méthode Match.

./grpc_cli call ${DEPLOYED_INDEX_SERVER_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match '{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}'

Dans le deuxième exemple, vous combinez deux requêtes distinctes dans la même requête BatchMatch.

./grpc_cli call ${DEPLOYED_INDEX_SERVER_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.BatchMatch 'requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}, {deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.2,..]}]}]'

Vous devez appeler ces API à partir d'un client exécuté dans le même VPC avec lequel le service a été appairé.

Pour exécuter ces requêtes, vous pouvez également utiliser la bibliothèque cliente Cloud Python pour Vertex AI. Pour en savoir plus, consultez la présentation des bibliothèques clientes.

Régler l'index

Pour ajuster l'index, vous devez définir les paramètres de configuration qui ont une incidence sur les performances des index déployés, en particulier le rappel et la latence. Ces paramètres sont définis lors de la création de l'index. Vous pouvez utiliser des index de force brute pour mesurer le rappel.

Paramètres de configuration ayant un impact sur le rappel et la latence

  1. distanceMeasureType

    Les valeurs suivantes sont acceptées :

    • SQUARED_L2_DISTANCE : distance L2 euclidienne
    • L1_DISTANCE : distance L1 de Manhattan
    • COSINE_DISTANCE : distance de cosinus définie comme "1- similarité cosinus"
    • DOT_PRODUCT_DISTANCE : distance de produit vDot, définie comme le négatif du produit scalaire. Il s'agit de la valeur par défaut.

    Dans la plupart des cas, les vecteurs de représentations vectorielles continues utilisés pour la recherche de similarités sont calculés à l'aide de modèles d'apprentissage de métriques (également appelés réseaux siamois ou modèles à deux tours). Ces modèles utilisent une métrique de distance pour calculer la fonction de perte contrastée. Idéalement, la valeur du paramètre distanceMeasureType de l'index correspondant doit correspondre à la mesure de distance utilisée par le modèle ayant produit les vecteurs de représentations vectorielles continues.

  2. approximateNeighborsCount

    Nombre de voisins par défaut à rechercher via la recherche approximative avant la réorganisation exacte. La réorganisation exacte est une procédure dans laquelle les résultats renvoyés par un algorithme de recherche approximatif sont réorganisés à l'aide d'un calcul de distance plus coûteux. L'augmentation de cette valeur augmente le rappel, ce qui peut entraîner une augmentation proportionnelle de la latence.

  3. treeAhConfig.leafNodesToSearchPercent

    Pourcentage de feuilles à rechercher pour chaque requête. L'augmentation de cette valeur augmente le rappel, ce qui peut également entraîner une augmentation proportionnelle de la latence. La valeur par défaut est 10 ou 10 % des feuilles.

  4. treeAhConfig.leafNodeEmbeddingCount

    Nombre de représentations vectorielles continues pour chaque nœud feuille. Par défaut, ce nombre est défini sur 1000.

    Ce paramètre n'a pas de corrélation linéaire à rappeler. L'augmentation ou la diminution de la valeur du paramètre treeAhConfig.leafNodeEmbeddingCount n'entraîne pas toujours une augmentation ou une diminution du rappel. Faites des tests pour trouver la valeur optimale. La modification de la valeur du paramètre treeAhConfig.leafNodeEmbeddingCount a généralement moins d'incidence que la modification de la valeur des autres paramètres.

Utiliser un index de force brute pour mesurer le rappel

Pour obtenir les voisins les plus proches, utilisez des index avec l'algorithme de force brute. L'algorithme de force brute offre un rappel de 100 % au détriment de la latence. L'utilisation d'un index de force brute pour mesurer le rappel n'est généralement pas un choix approprié pour la diffusion en production, mais elle peut être utile pour évaluer le rappel de diverses options d'indexation hors connexion.

Pour créer un index à l'aide de l'algorithme de force brute, spécifiez brute_force_config dans les métadonnées de l'index :

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer `gcloud auth print-access-token`" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/indexes \
-d '{
    displayName: "'${DISPLAY_NAME}'",
    description: "'${DESCRIPTION}'",
    metadata: {
       contentsDeltaUri: "'${INPUT_DIR}'",
       config: {
          dimensions: 100,
          approximateNeighborsCount: 150,
          distanceMeasureType: "DOT_PRODUCT_DISTANCE",
          featureNormType: "UNIT_L2_NORM",
          algorithmConfig: {
             bruteForceConfig: {}
          }
       },
    },
}'