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
| Estrategia | Unidad de recuperación de candidatos | Qué resuelve | Mejor ajuste | Principal compromiso |
|---|---|---|---|---|
tokenann | Vectores individuales dentro de cada fila | Conserva 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. |
muvera | Un vector codificado por fila | Comprime 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. |
lemur | Un vector aprendido por fila | Aprende 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_repeatsymuvera_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_seedylemur_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.
| Estrategia | Elemento de configuración | Etapa | Valor por defecto | Cuándo modificarlo |
|---|---|---|---|---|
tokenann | emb_list_strategy="tokenann" | Creación del índice | tokenann | Úsalo explícitamente cuando desees el comportamiento predeterminado de indexación del vector de elementos o cuando se utilice DiskANN. |
muvera | emb_list_strategy="muvera" | Creación de índices | tokenann | Úsalo cuando desees una recuperación codificada a nivel de fila sin necesidad de entrenamiento. |
muvera | muvera_num_projections | Creación del índice | 4 | Controla 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. |
muvera | muvera_num_repeats | Creación de índice | 7 | Controla 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. |
muvera | muvera_seed | Creación del índice | 42 | Se establece para obtener proyecciones aleatorias reproducibles, especialmente en pruebas y comparativas de rendimiento. |
lemur | emb_list_strategy="lemur" | Creación de índices | tokenann | Utilízalo cuando se espere que la compresión aprendida a nivel de fila funcione mejor que la proyección aleatoria fija. |
lemur | lemur_hidden_dim | Creación de índices | 256 | Controla 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. |
lemur | lemur_num_train_samples | Creación de índices | 20000 | Aumenta 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. |
lemur | lemur_num_epochs | Creación de índices | 50 | Aumenta si el entrenamiento no ha convergido; reduce cuando el tiempo de creación sea la principal limitación. |
lemur | lemur_batch_size | Creación del índice | 512 | Ajústalo en función del rendimiento del entrenamiento y del uso de memoria. |
lemur | lemur_learning_rate | Creación del índice | 0.001 | Ajustar cuando el entrenamiento sea inestable o converja demasiado lentamente. |
lemur | lemur_seed | Creación de índices | 42 | Configurar para obtener ejecuciones de entrenamiento reproducibles. |
lemur | lemur_num_layers | Creación de índices | 2 | Aumenta 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 estrategias | retrieval_ann_ratio | Búsqueda | 3.0 | Aumenta para recuperar más candidatos de la primera etapa y mejorar la recuperación; disminuye para reducir la latencia. |
| Todas las estrategias | emb_list_rerank | Búsqueda | true | Manté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ámetro | Etapa | Por defecto | Significado |
|---|---|---|---|
emb_list_strategy | Creación del índice | tokenann | Selecciona cómo se indexan y recuperan los candidatos de EmbeddingList. |
retrieval_ann_ratio | Búsqueda | 3.0 | Factor de expansión de candidatos para la primera ronda de la red neuronal artificial (ANN). |
emb_list_rerank | Búsqueda | true | Indica 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.
| Pregunta | Señal | Punto 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
Empieza con
tokenanncomo referencia de calidad cuando el tamaño del conjunto de datos lo permita.Ejecuta las mismas consultas con
muveray compara la recuperación, el nDCG, la latencia y el tamaño del índice.Prueba
lemurcuando la lista de incrustaciones sea grande, el espacio de incrustación presente ruido o la carga de trabajo sea visual o multimodal.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.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_ratioyemb_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.