Elige una estrategia de búsqueda de EmbeddingList

Las estrategias de búsqueda de EmbeddingList determinan cómo Milvus crea un índice aproximado de candidatos para la búsqueda en EmbeddingList. La estrategia predeterminada es « tokenann ». Puedes cambiar a « muvera » o « lemur » cuando la lista de incrustaciones sea grande, TokenANN resulte demasiado costoso o una representación a nivel de fila aprendida o comprimida sea más adecuada. El resultado final sigue generándose mediante la reclasificación de MaxSim cuando se habilita la opción « emb_list_rerank ».

Por qué existen las estrategias de búsqueda

La lista de incrustaciones (EmbeddingList) está diseñada para filas que contienen múltiples vectores, como incrustaciones de tokens en un documento de texto, incrustaciones de fragmentos en un documento visual o incrustaciones de clips en un vídeo. En lugar de comparar un vector de consulta con un vector de fila, MaxSim compara una lista de incrustaciones de consulta con una lista de incrustaciones de documento y agrega las mejores coincidencias.

Esto proporciona una mayor capacidad de representación, pero el MaxSim exacto resulta costoso a gran escala. Una búsqueda MaxSim por fuerza bruta tendría que comparar los vectores de consulta con cada vector de cada fila candidata. Esto suele ser demasiado lento para la búsqueda en producción.

### Problema - Cada fila puede contener muchos vectores. - Aplicar MaxSim exacto a todas las filas resulta costoso. - El tamaño del índice y la latencia de la búsqueda pueden aumentar rápidamente.### Estrategia - Utilizar un método de recuperación aproximado en una primera etapa. - Recuperar más candidatos que los topK solicitados. - Reordenar los candidatos con MaxSim exacto.

En este sentido, « emb_list_strategy » es principalmente una estrategia de creación de índices y recuperación de candidatos. Se configura al crear el índice y determina cómo se genera el conjunto de candidatos de la primera etapa mediante una red neuronal artificial (ANN). Los parámetros de tiempo de búsqueda, como « retrieval_ann_ratio » y « emb_list_rerank », controlan entonces cuántos candidatos se recuperan y si se aplica la reordenación mediante MaxSim.


Estrategias disponibles

EstrategiaUnidad de recuperación de candidatosQué resuelveMejor ajustePrincipal compromiso
tokenannVectores individuales dentro de cada filaConserva los vectores originales y evita la pérdida por compresión.Búsqueda centrada en la calidad, listas de incrustaciones cortas o medias, incrustaciones de alta discriminación.Índice más grande y mayor coste de recuperación de candidatos.
muveraUn vector codificado por filaComprime una lista de incrustaciones en una representación FDE de dimensión fija sin necesidad de entrenamiento.Documentos más largos, incrustaciones de alta discriminación, casos en los que TokenANN resulta demasiado pesado.La proyección aleatoria introduce una pérdida por aproximación; la dimensión de la FDE afecta a la latencia.
lemurUn vector aprendido por filaAprende una compresión específica para cada corpus a partir de listas de incrustaciones hacia vectores de fila de dimensión fija.Incrustaciones de baja discriminación, recuperación multimodal o de documentos visuales, listas de incrustaciones extensas.Requiere entrenamiento y puede ser sensible a la distribución del corpus y al sesgo de la longitud de los documentos.

TokenANN

tokenann indexa cada vector de la lista de incrustaciones. Durante la búsqueda, cada vector de consulta realiza una recuperación mediante una red neuronal artificial (ANN); los vectores coincidentes se agregan de nuevo a sus filas, y las filas candidatas resultantes se vuelven a clasificar con MaxSim.

Utiliza TokenANN cuando la calidad sea la máxima prioridad. Es la aproximación más cercana al cálculo original de MaxSim, ya que mantiene todos los vectores disponibles en el índice de la primera etapa.

  • Ideal para: fragmentos de texto cortos, filas con un número pequeño o moderado de vectores, separación semántica marcada a nivel de token y líneas de base sensibles a la calidad.

  • Menos adecuado: documentos muy largos, páginas visuales con miles de vectores de parches, restricciones estrictas de memoria o latencia.

  • Comportamiento a nivel de elemento: TokenANN puede recuperar candidatos a partir de vectores individuales antes de volver a agregarlos en filas. El resultado final de la búsqueda en EmbeddingList sigue siendo a nivel de fila tras la puntuación de MaxSim.

MUVERA

muvera codifica cada lista de incrustaciones en un vector de dimensión fija mediante proyecciones aleatorias. Esto convierte la recuperación de la primera etapa en una búsqueda vectorial estándar a nivel de fila. A continuación, los candidatos se vuelven a clasificar con MaxSim.

Utiliza MUVERA cuando TokenANN resulte demasiado pesado, pero no desees realizar una etapa de entrenamiento. Es un término medio práctico entre calidad y coste.

  • Ideal para: documentos de texto largos, espacios de incrustación de alta discriminación, cargas de trabajo que requieren un tamaño de índice menor que el de TokenANN.

  • Menos adecuado: espacios de incrustación de baja discriminación o casos en los que la representación FDE resulta demasiado multidimensional para el presupuesto de latencia.

  • Parámetros importantes:muvera_num_projections, muvera_num_repeats y muvera_seed.

LEMUR

lemur entrena un modelo para comprimir cada lista de incrustaciones en una representación de dimensión fija. La búsqueda ANN de primera etapa se ejecuta sobre los vectores aprendidos a nivel de fila, y los candidatos se vuelven a clasificar con MaxSim.

Utiliza LEMUR cuando la compresión aprendida compense el coste de entrenamiento. Puede funcionar bien en espacios de incrustación de baja discriminación y en la recuperación multimodal, pero debe validarse con el corpus de destino, ya que puede ser sensible a la distribución de la longitud de los documentos.

  • Adecuado para: búsqueda de documentos visuales, incrustaciones de fragmentos multimodales, espacios de incrustación de baja discriminación, listas de incrustación grandes en las que TokenANN no resulta práctico.

  • Menos adecuado: corpus que cambian con frecuencia, incrustaciones de alta discriminación con longitudes de documento muy sesgadas, cargas de trabajo en las que el coste de entrenamiento es inaceptable.

  • Parámetros importantes:lemur_hidden_dim, lemur_num_train_samples, lemur_num_epochs, lemur_batch_size, lemur_learning_rate, lemur_seed y lemur_num_layers.


Comportamiento y configuración predeterminados

La estrategia predeterminada de EmbeddingList en Knowhere es tokenann. Si no se especifica emb_list_strategy, Knowhere utiliza TokenANN. Los valores predeterminados en el momento de la búsqueda incluyen retrieval_ann_ratio=3.0 y emb_list_rerank=true.

Elementos de configuración por estrategia

La siguiente tabla enumera los elementos de configuración específicos de cada estrategia. En Milvus, los elementos de tiempo de compilación suelen pasarse en el mapa params al crear un índice. Si necesitas valores predeterminados del lado del servidor, deben definirse en el archivo de configuración de Milvus, en la sección knowhere.

EstrategiaElemento de configuraciónEtapaValor por defectoCuándo modificarlo
tokenannemb_list_strategy="tokenann"Creación del índicetokenannÚsalo explícitamente cuando desees el comportamiento predeterminado de indexación del vector de elementos o cuando se utilice DiskANN.
muveraemb_list_strategy="muvera"Creación de índicestokenannÚsalo cuando desees una recuperación codificada a nivel de fila sin necesidad de entrenamiento.
muveramuvera_num_projectionsCreación del índice4Controla el recuento de proyecciones de SimHash. Los valores más altos crean más compartimentos y pueden mejorar la calidad de la codificación, pero aumentan la dimensionalidad codificada.
muveramuvera_num_repeatsCreación de índice7Controla cuántas codificaciones FDE independientes se concatenan. Los valores más altos pueden mejorar la robustez, pero aumentan el coste del índice y de la búsqueda.
muveramuvera_seedCreación del índice42Se establece para obtener proyecciones aleatorias reproducibles, especialmente en pruebas y comparativas de rendimiento.
lemuremb_list_strategy="lemur"Creación de índicestokenannUtilízalo cuando se espere que la compresión aprendida a nivel de fila funcione mejor que la proyección aleatoria fija.
lemurlemur_hidden_dimCreación de índices256Controla el tamaño de la representación comprimida. Aumenta este valor para obtener más capacidad; disminúyelo para reducir el consumo de memoria y acelerar la recuperación.
lemurlemur_num_train_samplesCreación de índices20000Aumenta este valor cuando el corpus sea diverso y la compresión aprendida no se ajuste bien; redúcelo solo para pruebas pequeñas o para creaciones más rápidas.
lemurlemur_num_epochsCreación de índices50Aumenta si el entrenamiento no ha convergido; reduce cuando el tiempo de creación sea la principal limitación.
lemurlemur_batch_sizeCreación del índice512Ajústalo en función del rendimiento del entrenamiento y del uso de memoria.
lemurlemur_learning_rateCreación del índice0.001Ajustar cuando el entrenamiento sea inestable o converja demasiado lentamente.
lemurlemur_seedCreación de índices42Configurar para obtener ejecuciones de entrenamiento reproducibles.
lemurlemur_num_layersCreación de índices2Aumenta este valor solo cuando el corpus necesite un extractor de características más expresivo y puedas asumir el coste adicional del entrenamiento.
Todas las estrategiasretrieval_ann_ratioBúsqueda3.0Aumenta para recuperar más candidatos de la primera etapa y mejorar la recuperación; disminuye para reducir la latencia.
Todas las estrategiasemb_list_rerankBúsquedatrueMantén esta opción activada para la reclasificación de MaxSim. Desactívala únicamente en experimentos controlados en los que se mida directamente la calidad de la red neuronal artificial (ANN) de la primera etapa.

Configurar la estrategia en Milvus

En Milvus, la estrategia se pasa como parámetro de índice al crear un índice en un campo EmbeddingList, como un subcampo vectorial de StructArray.

index_params = client.prepare_index_params()
index_params.add_index(
    field_name="clips[clip_embedding]",
    index_type="HNSW",
    metric_type="MAX_SIM_COSINE",
    params={
        "M": 16,
        "efConstruction": 96,
        "emb_list_strategy": "muvera",
        "muvera_num_projections": 4,
        "muvera_num_repeats": 7,
        "muvera_seed": 42,
    },
)

Para LEMUR, especifica los parámetros de entrenamiento de LEMUR en el mismo mapa « params ».

params={
    "M": 16,
    "efConstruction": 96,
    "emb_list_strategy": "lemur",
    "lemur_hidden_dim": 256,
    "lemur_num_train_samples": 20000,
    "lemur_num_epochs": 50,
    "lemur_batch_size": 512,
    "lemur_learning_rate": 0.001,
    "lemur_seed": 42,
    "lemur_num_layers": 2,
}

Configurar los valores predeterminados del lado del servidor en Milvus

Milvus también puede rellenar los parámetros de índice a partir de milvus.yaml. La sección relevante es knowhere. Los parámetros se organizan por tipo de índice y etapa, siguiendo el patrón knowhere.<INDEX_TYPE>.<stage>.<parameter>. Los parámetros de índice proporcionados por el usuario tienen prioridad sobre estos valores predeterminados.

knowhere:
  enable: true
  HNSW:
    build:
      emb_list_strategy: muvera
      muvera_num_projections: 4
      muvera_num_repeats: 7
      muvera_seed: 42
    search:
      retrieval_ann_ratio: 3.0
      emb_list_rerank: true

Es preferible utilizar parámetros por índice para la selección de estrategias. Un valor por defecto del archivo de configuración de Milvus se aplica de forma general a los índices de ese tipo y etapa. Utiliza los parámetros de create_index cuando diferentes colecciones o campos necesiten estrategias EmbeddingList distintas.

Configurar la recuperación de candidatos en el momento de la búsqueda

La estrategia determina cómo se construye el índice. En el momento de la búsqueda, utilice retrieval_ann_ratio para controlar cuántos candidatos de la primera etapa se recuperan antes de la reclasificación de MaxSim. Los valores más altos suelen mejorar la recuperación, pero aumentan la latencia.

results = client.search(
    collection_name=collection_name,
    data=[query_embedding_list],
    anns_field="clips[clip_embedding]",
    search_params={
        "metric_type": "MAX_SIM_COSINE",
        "params": {
            "ef": 64,
            "retrieval_ann_ratio": 3.0,
            "emb_list_rerank": True,
        },
    },
    limit=10,
)
ParámetroEtapaPor defectoSignificado
emb_list_strategyCreación del índicetokenannSelecciona cómo se indexan y recuperan los candidatos de EmbeddingList.
retrieval_ann_ratioBúsqueda3.0Factor de expansión de candidatos para la primera ronda de la red neuronal artificial (ANN).
emb_list_rerankBúsquedatrueIndica si se debe volver a clasificar a los candidatos recuperados con MaxSim.

Notas de compatibilidad: MUVERA y LEMUR admiten actualmente datos fp32 en Knowhere. DiskANN solo admite EmbeddingList con la estrategia TokenANN. Si utilizas tipos de vectores que no sean fp32 o DiskANN, comprueba la compatibilidad de la estrategia antes de cambiar la configuración predeterminada.


Cómo elegir una estrategia

No existe una estrategia universalmente óptima. Elige en función de la longitud de la lista de incrustaciones, la capacidad de discriminación del espacio de incrustación, el presupuesto de latencia, el tamaño del índice y si puedes permitirte una fase de entrenamiento.

PreguntaSeñalPunto de partida recomendado
¿Necesitas una línea de base de alta calidad?Quieres medir la mejor aproximación práctica antes de optimizar el coste.tokenann
¿El número de vectores por fila es reducido o moderado?Cada fila tiene un número reducido de vectores de token, patch o clip.tokenann
¿Es TokenANN demasiado grande o demasiado lento?El tamaño del índice o la latencia de la recuperación en la primera etapa son el cuello de botella.muvera
¿Quieres compresión sin entrenamiento?Necesitas un modelo operativo más sencillo y una codificación reproducible.muvera
¿El espacio de incrustación tiene baja capacidad de discriminación?Las redes neuronales artificiales (ANN) a nivel de token presentan ruido, y la proyección aleatoria no conserva suficiente señal.lemur
¿La carga de trabajo es visual o multimodal?Las filas contienen muchos vectores de parches, y TokenANN resulta demasiado costoso.lemur o muvera
¿La longitud de los documentos presenta un sesgo elevado?Algunas filas contienen muchos más vectores que otras.Empieza con muvera; comprueba cuidadosamente lemur.

Flujo de trabajo de evaluación recomendado

  1. Empieza con tokenann como referencia de calidad cuando el tamaño del conjunto de datos lo permita.

  2. Ejecuta las mismas consultas con muvera y compara la recuperación, el nDCG, la latencia y el tamaño del índice.

  3. Prueba lemur cuando la lista de incrustaciones sea grande, el espacio de incrustación presente ruido o la carga de trabajo sea visual o multimodal.

  4. Ajuste el valor de « retrieval_ann_ratio » antes de modificar demasiados parámetros de compilación. Auméntelo si la recuperación es baja; redúzcalo si la latencia es demasiado alta.

  5. Valida siempre con consultas representativas y distribuciones de longitud de documentos. Una estrategia que funcione con textos cortos puede no funcionar con documentos visuales o corpus de cola larga.

### La calidad ante todo: empieza con tokenann. Úsalo como referencia para la calidad de la aproximación de MaxSim.### Equilibrado Prueba muvera cuando necesites reducir el coste sin añadir un proceso de entrenamiento.### Comprimido: Prueba lemur cuando sea probable que la compresión aprendida a nivel de fila supere a la proyección aleatoria fija.

Referencias utilizadas para este borrador

  • Pruebas de Milvus para emb_list_strategy, retrieval_ann_ratio y emb_list_rerank.

  • Gestión de archivos de configuración de Milvus para los valores predeterminados de los índices del lado del servidor en la sección « knowhere ».

  • Definiciones de los parámetros de Knowhere para los valores predeterminados y los nombres de estrategias compatibles.

  • Comprobaciones de compatibilidad de Knowhere para MUVERA/LEMUR (solo fp32) y compatibilidad exclusiva con TokenANN de DiskANN.

  • Notas de evaluación internas que comparan TokenANN, MUVERA y LEMUR para la recuperación de candidatos en MaxSim.

Nota de publicación: Antes de publicar externamente, comprueba qué parámetros son oficialmente compatibles con la versión de Milvus de destino y si el producto desea exponer todos los parámetros de bajo nivel de Knowhere o solo un subconjunto más reducido y documentado.