Indexe zum Abrufen der nächsten Nachbarn abfragen

Nachdem Sie den Index erstellt haben, können Sie Abfragen ausführen, um die nächsten Nachbarn abzurufen.

Jeder DeployedIndex hat eine DEPLOYED_INDEX_SERVER_IP, die Sie durch Auflisten von IndexEndpoints abrufen können. Zum Abfragen eines DeployedIndex stellen Sie eine Verbindung zu seiner DEPLOYED_INDEX_SERVER_IP an Port 10000 her und rufen die Methode Match oder BatchMatch auf.

In den folgenden Beispielen wird das Open-Source-Tool grpc_cli verwendet, um grpc-Anfragen an den bereitgestellten Indexserver zu senden. Im ersten Beispiel senden Sie eine einzelne Abfrage mit der Methode 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,..]}'

Im zweiten Beispiel kombinieren Sie zwei separate Abfragen in derselben BatchMatch-Anfrage.

./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,..]}]}]'

Sie müssen diese APIs von einem Client aus aufrufen, der in derselben VPC, die über Peering mit dem Dienst verbunden wurde, ausgeführt wird.

Sie können diese Abfragen auch mit der Python Cloud-Clientbibliothek für Vertex AI ausführen. Weitere Informationen finden Sie unter Erläuterung zu Clientbibliotheken.

Index feinabstimmen

Zum Feinabstimmen des Index müssen Sie die Konfigurationsparameter festlegen, die sich auf die Leistung der bereitgestellten Indexe auswirken, insbesondere die Recall und Latenz. Diese Parameter werden beim ersten Erstellen des Index festgelegt. Sie können Brute-Force-Indexe verwenden, um den Recall zu messen.

Konfigurationsparameter, die sich auf Recall und Latenz auswirken

  1. distanceMeasureType

    Folgende Werte werden unterstützt:

    • SQUARED_L2_DISTANCE: Euklidische L2-Distanz.
    • L1_DISTANCE: Manhattan-L1-Distanz.
    • COSINE_DISTANCE: Kosinus-Distanz, definiert als "1 – Kosinus-Ähnlichkeit".
    • DOT_PRODUCT_DISTANCE: vDot-Produkt-Distanz, definiert als negativer Wert des Skalarprodukts. Dies ist der Standardwert.

    In den meisten Fällen werden die für den Ähnlichkeitsabgleich verwendeten Einbettungsvektoren mithilfe von Messwert-Lernmodellen (auch als siamesische Netzwerke oder Two-Tower-Modelle bezeichnet) berechnet. Diese Modelle verwenden einen Distanzmesswert, um die Kontrastverlustfunktion zu berechnen. Im Idealfall entspricht der Wert des Parameters distanceMeasureType für den übereinstimmenden Index der Distanzmessung, die vom Modell verwendet wird, das die Einbettungsvektoren erstellt hat.

  2. approximateNeighborsCount

    Die Standardanzahl der Nachbarn, die mithilfe der ungefähren Suche ermittelt werden soll, bevor eine genaue Neusortierung durchgeführt wird. Bei der genauen Neusortierung werden Ergebnisse, die von einem ungefähren Suchalgorithmus zurückgegeben werden, über eine aufwendigere Distanzberechnung neu sortiert. Durch Erhöhen dieses Werts wird der Recall erhöht, was zu einer proportionalen Erhöhung der Latenz führen kann.

  3. treeAhConfig.leafNodesToSearchPercent

    Der Prozentsatz der Blätter, die für jede Abfrage gesucht werden sollen. Durch Erhöhen dieses Werts wird der Recall erhöht, was auch zu einer proportionalen Erhöhung der Latenz führen kann. Der Standardwert ist 10 oder 10 % der Blätter.

  4. treeAhConfig.leafNodeEmbeddingCount

    Die Anzahl der Einbettungen für jeden Blattknoten. Standardmäßig ist die Anzahl auf 1000 festgelegt.

    Dieser Parameter hat keine lineare Korrelation zum Recall. Das Erhöhen oder Verringern des Werts des Parameters treeAhConfig.leafNodeEmbeddingCount erhöht oder verringert nicht immer den Recall. Experimentieren Sie, um den optimalen Wert zu ermitteln. Das Ändern des Werts des Parameters treeAhConfig.leafNodeEmbeddingCount hat in der Regel weniger Auswirkungen als die Änderung des Werts der anderen Parameter.

Brute-Force-Index zum Messen des Recalls verwenden

Verwenden Sie Indexe mit dem Brute-Force-Algorithmus, um die nächsten Nachbarn abzurufen. Der Brute-Force-Algorithmus bietet einen Recall von 100 %, allerdings auf Kosten einer höheren Latenz. Ein Brute-Force-Index zur Messung des Recalls ist in der Regel keine gute Wahl für die Produktionsbereitstellung, aber er kann nützlich sein, um den Recall verschiedener Indexierungsoptionen offline zu beurteilen.

Wenn Sie einen Index mit dem Brute-Force-Algorithmus erstellen möchten, geben Sie brute_force_config in den Index-Metadaten an:

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: {}
          }
       },
    },
}'