Indici di query per raggiungere i vicini più vicini

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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

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

Gli esempi seguenti 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 scoprire di più, consulta Spiegazione delle librerie client

Regolazione dell'indice

L'ottimizzazione dell'indice richiede l'impostazione dei parametri di configurazione che incidono 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 ricordo e sulla latenza

  1. distanceMeasureType

    Sono supportati i seguenti valori:

    • SQUARED_L2_DISTANCE: distanza L2 euclidea
    • L1_DISTANCE: distanza da Manhattan L1
    • COSINE_DISTANCE: distanza del coseno definita come '1 - somiglianza del coseno'
    • DOT_PRODUCT_DISTANCE: distanza del prodotto vDot, definita come un valore negativo del prodotto punto. 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 della distanza per calcolare la funzione di perdita di contrasto. 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 il riordinamento esatto. Il riordinamento esatto è una procedura in cui i risultati restituiti da un algoritmo di ricerca approssimativa vengono riordinati mediante il calcolo della distanza più costoso. Aumentando questo valore aumenterà il ricordo, il che può creare un aumento proporzionale della latenza.

  3. treeAhConfig.leafNodesToSearchPercent

    La percentuale di foglie in cui eseguire la ricerca per ogni query. L'aumento di questo valore aumenta il ricordo, il che può creare 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 aumenta o diminuisce sempre il richiamo. Sperimenta per trovare il valore ottimale. La modifica del valore del parametro treeAhConfig.leafNodeEmbeddingCount in genere ha meno impatto sulla modifica del valore degli altri parametri.

Utilizzare un indice di forza bruta per misurare il richiamo

Per ottenere esattamente i vicini più vicini, utilizza gli indici con l'algoritmo brute force. L'algoritmo della 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 di solito 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: {}
          }
       },
    },
}'