Indici di query per trovare i vicini più vicini

Dopo aver creato l'indice, puoi eseguire query per conoscere i vicini più vicini.

Ogni DeployedIndex ha un DEPLOYED_INDEX_SERVER_IP, che puoi recuperare elencando IndexEndpoints. Per eseguire una query su DeployedIndex, connettiti alla sua DEPLOYED_INDEX_SERVER_IP sulla porta 10000 e chiama il metodo Match o BatchMatch.

I seguenti esempi utilizzano lo strumento open source grpc_cli per inviare richieste grpc al server di indice di cui è stato eseguito il deployment. Nel primo esempio, invii una singola query utilizzando il metodo 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,..]}'

Nel secondo esempio, unisci due query separate nella stessa richiesta 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,..]}]}]'

Devi effettuare chiamate a queste API da un client in esecuzione nello stesso VPC con cui è stato eseguito il peering del servizio.

Per eseguire queste query, puoi anche utilizzare la libreria client di Cloud Python per Vertex AI. Per saperne di più, consulta Spiegazione delle librerie client

Regolazione dell'indice

La correzione dell'indice richiede l'impostazione dei parametri di configurazione che influiscono sulle prestazioni degli indici di cui è stato eseguito il deployment, in particolare il richiamo e la latenza. Questi parametri vengono impostati quando crei l'indice per la prima volta, Puoi utilizzare gli indici di forza bruta per misurare il richiamo.

Parametri di configurazione che influiscono sul richiamo e sulla latenza

  1. distanceMeasureType

    Sono supportati i seguenti valori:

    • SQUARED_L2_DISTANCE: distanza L2 euclidea
    • L1_DISTANCE: distanza L1 di Manhattan
    • COSINE_DISTANCE: distanza del coseno definita come "1 - somiglianza del coseno"
    • DOT_PRODUCT_DISTANCE: distanza dal prodotto vDot, definita come negativa del prodotto con punti. Questo è il valore predefinito.

    Nella maggior parte dei casi, i vettori di incorporamento utilizzati per la corrispondenza della somiglianza vengono calcolati utilizzando modelli di apprendimento delle metriche (chiamati anche reti Siamese o modelli a due torri). Questi modelli utilizzano una metrica sulla distanza per calcolare la funzione di perdita di dati contraccettivi. Idealmente, il valore del parametro distanceMeasureType per l'indice corrispondente corrisponde alla misura della distanza utilizzata dal modello che ha prodotto i vettori di incorporamento.

  2. approximateNeighborsCount

    Il numero predefinito di vicini da trovare utilizzando la ricerca approssimativa prima di eseguire l'esatto ordine. Il riordinamento esatto è una procedura in cui i risultati restituiti da un algoritmo di ricerca approssimativa vengono riordinati con un calcolo di distanza più costoso. Aumenta questo valore aumenta l'identificazione, il che può determinare un aumento proporzionale della latenza.

  3. treeAhConfig.leafNodesToSearchPercent

    La percentuale di foglie da cercare per ogni query. L'aumento di questo valore aumenta l'identificazione, il che può determinare anche un aumento proporzionale della latenza. Il valore predefinito è 10 o 10% delle foglie.

  4. treeAhConfig.leafNodeEmbeddingCount

    Il numero di incorporamenti per ogni nodo foglia. Per impostazione predefinita, questo numero è impostato su 1000.

    Questo parametro non ha una correlazione lineare da richiamare. L'aumento o la riduzione del valore del parametro treeAhConfig.leafNodeEmbeddingCount non sempre aumenta o diminuisce il richiamo. Fai delle prove per trovare il valore ottimale. La modifica del valore del parametro treeAhConfig.leafNodeEmbeddingCount in genere ha un impatto inferiore rispetto alla modifica del valore degli altri parametri.

Utilizzo di un indice di forza bruta per misurare il richiamo

Per trovare i vicini più vicini, utilizza gli indici con l'algoritmo brute force. L'algoritmo di forza bruta fornisce un richiamo del 100% a scapito di una latenza maggiore. L'utilizzo di un indice di forza bruta per misurare il richiamo in genere non è una buona scelta per la pubblicazione in produzione, ma potrebbe essere utile per valutare il richiamo di varie opzioni di indicizzazione offline.

Per creare un indice con l'algoritmo brute force, specifica brute_force_config nei metadati dell'indice:

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