🚀 Prueba Zilliz Cloud, el Milvus completamente gestionado, gratis—¡experimenta un rendimiento 10 veces más rápido! Prueba Ahora>>

milvus-logo
LFAI
Home
  • Guía del usuario

IVF_FLAT

El índice IVF_FLAT es un algoritmo de indexación que puede mejorar el rendimiento de la búsqueda de vectores de coma flotante.

Este tipo de índice es ideal para conjuntos de datos a gran escala que requieren respuestas de consulta rápidas y una gran precisión, especialmente cuando la agrupación de su conjunto de datos puede reducir el espacio de búsqueda y se dispone de memoria suficiente para almacenar los datos agrupados.

Descripción general

El término IVF_FLAT es la abreviatura de Inverted File Flat (archivo invertido plano), que engloba su enfoque de doble capa para la indexación y búsqueda de vectores de coma flotante:

  • Archivo invertido (IVF): Se refiere a la agrupación del espacio vectorial en regiones manejables mediante la agrupación k-means. Cada clúster está representado por un centroide, que sirve como punto de referencia para los vectores que lo componen.
  • Plano: Indica que dentro de cada cluster, los vectores se almacenan en su forma original (estructura plana), sin ningún tipo de compresión o cuantización, para cálculos de distancia precisos.

La siguiente figura muestra cómo funciona:

ivf-flat-1.png ivf-flat-1.png

Este método de indexación acelera el proceso de búsqueda, pero tiene un posible inconveniente: el candidato más cercano a la incrustación de la consulta puede no ser exactamente el más cercano. Esto puede ocurrir si la incrustación más cercana a la incrustación de consulta reside en un clúster diferente del seleccionado en función del centroide más cercano (véase la visualización más abajo).

Para resolver este problema, IVF_FLAT proporciona dos hiperparámetros que podemos ajustar:

  • nlist: Especifica el número de particiones a crear mediante el algoritmo k-means.
  • nprobe: Especifica el número de particiones a considerar durante la búsqueda de candidatos.

Ahora, si establecemos nprobe en 3 en lugar de 1, obtendremos el siguiente resultado:

ivf-flat-2.png ivf-flat-2.png

Aumentando el valor de nprobe, puede incluir más particiones en la búsqueda, lo que puede ayudar a garantizar que no se pierda la incrustación más cercana a la consulta, aunque resida en una partición diferente. Sin embargo, esto tiene el coste de aumentar el tiempo de búsqueda, ya que es necesario evaluar más candidatos. Para más información sobre el ajuste de los parámetros del índice, consulte Parámetros del índice.

Crear un índice

Para construir un índice IVF_FLAT sobre un campo vectorial en Milvus, utilice el método add_index(), especificando los parámetros index_type, metric_type, y adicionales para el índice.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="IVF_FLAT", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "nlist": 64, # Number of clusters for the index
    } # Index building params
)

En esta configuración:

  • index_type: El tipo de índice a construir. En este ejemplo, establezca el valor IVF_FLAT.

  • metric_type: El método utilizado para calcular la distancia entre vectores. Los valores soportados incluyen COSINE, L2, y IP. Para más detalles, consulte Tipos de métricas.

  • params: Opciones de configuración adicionales para construir el índice.

    • nlist: Número de conglomerados en que se divide el conjunto de datos.

    Para conocer más parámetros de construcción disponibles para el índice IVF_FLAT, consulte Parámetros de construcción del índice.

Una vez configurados los parámetros del índice, puede crear el índice utilizando el método create_index() directamente o pasando los parámetros del índice en el método create_collection. Para más detalles, consulte Crear colección.

Búsqueda en el índice

Una vez creado el índice e insertadas las entidades, puede realizar búsquedas de similitud en el índice.

search_params = {
    "params": {
        "nprobe": 10, # Number of clusters to search
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

En esta configuración:

  • params: Opciones de configuración adicionales para la búsqueda en el índice.

    • nprobe: Número de clusters a buscar.

    Para conocer más parámetros de búsqueda disponibles para el índice IVF_FLAT, consulte Parámetros de búsqueda específicos del índice.

Parámetros del índice

En esta sección se ofrece una descripción general de los parámetros utilizados para crear un índice y realizar búsquedas en él.

Parámetros de creación de índices

La siguiente tabla enumera los parámetros que pueden configurarse en params al crear un índice.

ParámetroDescripciónRango de valoresSugerencia de ajuste
nlistEl número de clusters a crear utilizando el algoritmo k-means durante la construcción del índice.Cada cluster, representado por un centroide, almacena una lista de vectores. Aumentar este parámetro reduce el número de vectores en cada cluster, creando particiones más pequeñas y centradas.Tipo: Entero
Rango: [1, 65536]
Valor por defecto: 128
Los valores mayores de nlist mejoran la recuperación al crear clusters más refinados, pero aumentan el tiempo de creación del índice. En la mayoría de los casos, se recomienda establecer un valor dentro de este intervalo: [32, 4096].

Parámetros de búsqueda específicos del índice

En la tabla siguiente se enumeran los parámetros que pueden configurarse en search_params.params al buscar en el índice.

ParámetroDescripciónRango de valoresSugerencia de ajuste
nprobeEl número de clusters en los que se buscarán candidatos. Los valores más altos permiten buscar en más clusters, lo que mejora la recuperación al ampliar el ámbito de búsqueda, pero a costa de aumentar la latencia de la consulta.Tipo: Entero
Rango: [1, nlist]
Valor por defecto: 8
Aumentar este valor mejora la recuperación, pero puede ralentizar la búsqueda.Establezca nprobe proporcionalmente a nlist para equilibrar velocidad y precisión.
En la mayoría de los casos, se recomienda establecer un valor dentro de este intervalo: [1, nlist].

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

¿Fue útil esta página?