Consulta índices para obtener los vecinos más cercanos

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Una vez que creaste el índice, puedes ejecutar consultas para obtener sus vecinos más cercanos.

Cada DeployedIndex tiene un DEPLOYED_INDEX_SERVER_IP que puedes recuperar si enumeras IndexEndpoints. Para consultar un DeployedIndex, conéctate a su DEPLOYED_INDEX_SERVER_IP en el puerto 10000 y llama a los métodos Match o BatchMatch.

En los siguientes ejemplos, se usa la herramienta de código abierto grpc_cli para enviar solicitudes de grpc al servidor de índice implementado. En el primer ejemplo, envías una sola consulta con el método 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,..]}'

En el segundo ejemplo, combina dos consultas separadas en la misma solicitud 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,..]}]}]'

Debes realizar llamadas a estas API desde un cliente que se ejecute en la misma VPC con la que el servicio intercambia tráfico.

Para ejecutar estas consultas, también puedes usar la biblioteca cliente de Cloud para Python de Vertex AI. Para obtener más información, consulta Explicación de bibliotecas cliente.

Ajusta el índice

El ajuste del índice requiere establecer los parámetros de configuración que afectan el rendimiento de los índices implementados, en especial la recuperación y la latencia. Estos parámetros se establecen cuando creas el índice por primera vez. Puedes usar los índices de fuerza bruta para medir la recuperación.

Parámetros de configuración que afectan la recuperación y la latencia

  1. distanceMeasureType

    Se admiten los siguientes valores:

    • SQUARED_L2_DISTANCE: Distancia euclidiana L2
    • L1_DISTANCE: Distancia de Manhattan L1
    • COSINE_DISTANCE: Distancia de coseno definida como "1: similitud de coseno"
    • DOT_PRODUCT_DISTANCE: Distancia del producto de vDot, definida como un valor negativo del producto de VDot. Este es el valor predeterminado.

    En la mayoría de los casos, los vectores de incorporación que se usan para la coincidencia de similitud se calculan mediante modelos de aprendizaje de métricas (también llamados redes siamesas o modelos de dos torres). Estos modelos usan una métrica de distancias para calcular la función de pérdida contrastada. Lo ideal es que el valor del parámetro distanceMeasureType del índice coincidente coincida con la medida de distancia que usa el modelo que produjo los vectores de incorporación.

  2. approximateNeighborsCount

    La cantidad predeterminada de vecinos que se deben encontrar mediante la búsqueda aproximada antes de que se realice el reordenamiento exacto. El reordenamiento exacto es un procedimiento en el que los resultados que muestra un algoritmo de búsqueda aproximada se ordenan a través de un cálculo de distancias más costoso. Aumentar este valor aumenta la recuperación, lo que puede crear un aumento proporcional de la latencia.

  3. treeAhConfig.leafNodesToSearchPercent

    El porcentaje de hojas que se deben buscar para cada consulta. Aumentar este valor aumenta la recuperación, lo que también puede crear un aumento proporcional de la latencia. El valor predeterminado es 10 o el 10% de las hojas.

  4. treeAhConfig.leafNodeEmbeddingCount

    La cantidad de incorporaciones para cada nodo hoja. De forma predeterminada, este número se establece en 1000.

    Este parámetro no tiene una correlación lineal que se debe recuperar. Aumentar o disminuir el valor del parámetro treeAhConfig.leafNodeEmbeddingCount no siempre aumenta o disminuye la recuperación. Experimenta para encontrar el valor óptimo. Por lo general, cambiar el valor del parámetro treeAhConfig.leafNodeEmbeddingCount tiene menos efecto que cambiar el valor de los otros parámetros.

Cómo usar un índice de fuerza bruta para medir la recuperación

Para obtener los vecinos más cercanos exactos, usa índices con el algoritmo de fuerza bruta. El algoritmo de fuerza bruta proporciona una recuperación del 100% a expensas de una latencia más alta. El uso de un índice de fuerza bruta a fin de medir la recuperación no suele ser una buena opción para la entrega de producción, pero puede resultarte útil a fin de evaluar la recuperación de varias opciones de indexación sin conexión.

Para crear un índice con el algoritmo de fuerza bruta, especifica brute_force_config en los metadatos del índice:

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