Descripción general de Model RankerCompatible with Milvus 2.6.x
La búsqueda vectorial tradicional clasifica los resultados basándose exclusivamente en la similitud matemática, es decir, en el grado de coincidencia entre los vectores en un espacio de alta dimensión. Aunque es un método eficaz, a menudo pasa por alto la verdadera relevancia semántica. Imaginemos que buscamos «mejores prácticas para la optimización de bases de datos»: es posible que obtengamos documentos con una alta similitud vectorial que mencionen estos términos con frecuencia, pero que en realidad no ofrezcan estrategias de optimización prácticas.
Model Ranker transforma la búsqueda de Milvus al integrar modelos lingüísticos avanzados que comprenden las relaciones semánticas entre las consultas y los documentos. En lugar de basarse únicamente en la similitud vectorial, evalúa el significado y el contexto del contenido para ofrecer resultados más inteligentes y relevantes.
Limitaciones
Los clasificadores de modelos no se pueden utilizar con búsquedas agrupadas.
Los campos utilizados para la reordenación por modelo deben ser de tipo texto (
VARCHAR).Cada «Model Ranker» solo puede utilizar un campo de tipo «
VARCHAR» a la vez para la evaluación.
Cómo funciona
Los clasificadores de modelos integran capacidades de comprensión de modelos lingüísticos en el proceso de búsqueda de Milvus a través de un flujo de trabajo bien definido:
Descripción general del clasificador de modelos
Consulta inicial: tu aplicación envía una consulta a Milvus
Búsqueda vectorial: Milvus realiza una búsqueda vectorial estándar para identificar los documentos candidatos
Recuperación de candidatos: el sistema identifica el conjunto inicial de documentos candidatos basándose en la similitud vectorial
Evaluación del modelo: la función «Model Ranker» procesa los pares de consulta-documento:
Envía la consulta original y los documentos candidatos a un servicio de modelos externo
El modelo de lenguaje evalúa la relevancia semántica entre la consulta y cada documento
Cada documento recibe una puntuación de relevancia basada en la comprensión semántica
Reordenación inteligente: los documentos se reordenan en función de las puntuaciones de relevancia generadas por el modelo
Resultados mejorados: tu aplicación recibe resultados ordenados por relevancia semántica, en lugar de solo por similitud vectorial
Elige un proveedor de modelos que se adapte a tus necesidades
Milvus es compatible con los siguientes proveedores de servicios de modelos para la reordenación, cada uno con características distintas:
Proveedor |
Ideal para |
Características |
Ejemplo de caso de uso |
|---|---|---|---|
vLLM |
Aplicaciones complejas que requieren una comprensión semántica profunda y personalización |
|
Plataforma de investigación jurídica que utiliza modelos específicos del ámbito jurídico capaces de comprender la terminología jurídica y las relaciones entre la jurisprudencia |
TEI |
Rápida implementación con un uso eficiente de los recursos |
|
Sistema de gestión de contenidos que requiere capacidades de reordenación eficientes con requisitos estándar |
Cohere |
Aplicaciones empresariales que dan prioridad a la fiabilidad y la facilidad de integración |
|
Plataforma de comercio electrónico que requiere una búsqueda de alta disponibilidad con un rendimiento constante de la API y catálogos de productos multilingües |
Voyage AI |
Aplicaciones RAG con requisitos específicos de rendimiento y contexto |
|
Base de datos de investigación con documentos de longitudes variables que requieren un control de rendimiento ajustado y una comprensión semántica especializada |
SiliconFlow |
Aplicaciones que procesan documentos largos con prioridades de rentabilidad |
|
Sistema de búsqueda de documentación técnica que procesa manuales y documentos extensos que requieren una segmentación inteligente y un control de solapamiento |
DashScope |
Aplicaciones que utilizan modelos de reordenación de Alibaba Cloud o Qwen |
|
Aplicaciones RAG que deseen reordenar candidatos con modelos de reordenación alojados en Alibaba Cloud |
Hugging Face |
Aplicaciones que utilizan modelos de similitud de frases de Hugging Face alojados |
|
Aplicaciones de búsqueda semántica que desean reordenar los textos candidatos con un modelo de Hugging Face sin tener que gestionar un servicio de inferencia independiente |
Para obtener información detallada sobre la implementación de cada servicio de modelo, consulta la documentación específica:
Implementación
Antes de implementar Model Ranker, asegúrate de que dispones de:
Una colección de Milvus con un campo «
VARCHAR» que contenga el texto que se va a volver a clasificarUn servicio de modelos externo en funcionamiento al que pueda acceder su instancia de Milvus
Una conectividad de red adecuada entre Milvus y el servicio de modelos elegido
Los «Model Rankers» se integran a la perfección tanto con las operaciones de búsqueda vectorial estándar como con las de búsqueda híbrida. La implementación consiste en crear un objeto «Function» que defina su configuración de reordenación y pasarlo a las operaciones de búsqueda.
Crear un clasificador de modelos
Para implementar la reclasificación mediante modelos, primero defina un objeto Function con la configuración adecuada. En este ejemplo, utilizamos TEI como proveedor de servicios:
from pymilvus import MilvusClient, Function, FunctionType
# Connect to your Milvus server
client = MilvusClient(
uri="http://localhost:19530" # Replace with your Milvus server URI
)
# Create a model ranker function
model_ranker = Function(
name="semantic_ranker", # Function identifier
input_field_names=["document"], # VARCHAR field to use for reranking
function_type=FunctionType.RERANK, # Must be set to RERANK
params={
"reranker": "model", # Specify model reranker. Must be "model"
"provider": "tei", # Choose provider: "tei", "vllm", etc.
"queries": ["machine learning for time series"], # Query text
"endpoint": "http://model-service:8080", # Model service endpoint
# "maxBatch": 32 # Optional: batch size for processing
}
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.ranker.ModelRanker;
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.build());
ModelRanker ranker = ModelRanker.builder()
.name("semantic_ranker")
.inputFieldNames(Collections.singletonList("document"))
.provider("tei")
.queries(Collections.singletonList("machine learning for time series"))
.endpoint("http://model-service:8080")
.build();
// nodejs
// go
# restful
Parámetro |
¿Es obligatorio? |
Descripción |
Valor / Ejemplo |
|---|---|---|---|
|
Sí |
Identificador de tu función que se utiliza al realizar búsquedas. |
|
|
Sí |
Nombre del campo de texto que se utilizará para la reclasificación. Debe ser un campo de tipo « |
|
|
Sí |
Especifica el tipo de función que se está creando. Debe establecerse en « |
|
|
Sí |
Un diccionario que contiene la configuración de la función de reordenación basada en modelos. Los parámetros disponibles (claves) varían en función del proveedor de servicios. |
|
|
Sí |
Debe establecerse en « |
|
|
Sí |
El proveedor de servicios de modelos que se utilizará para la reclasificación. |
|
|
Sí |
Lista de cadenas de consulta utilizadas por el modelo de reordenación para calcular las puntuaciones de relevancia. El número de cadenas de consulta debe coincidir exactamente con el número de consultas de la operación de búsqueda (incluso cuando se utilicen vectores de consulta en lugar de texto); de lo contrario, se generará un error. |
|
|
Sí |
URL del servicio del modelo. |
|
|
No |
Número máximo de documentos que se pueden procesar en un solo lote. Los valores más altos aumentan el rendimiento, pero requieren más memoria. |
|
Aplicar a la búsqueda vectorial estándar
Una vez definido el clasificador del modelo, puedes aplicarlo durante las operaciones de búsqueda pasándolo al parámetro «ranker»:
# Use the model ranker in standard vector search
results = client.search(
collection_name,
data=[your_query_vector], # Number of query vectors must match that specified in model_ranker.params["queries"]
anns_field="vector_field",
limit=10,
output_fields=["document"], # Include the text field in outputs
ranker=model_ranker, # Apply the model ranker here
consistency_level="Bounded"
)
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;
SearchReq searchReq = SearchReq.builder()
.collectionName(COLLECTION_NAME)
.data(Collections.singletonList(new EmbeddedText("machine learning for time series")))
.annsField("vector_field")
.limit(10)
.outputFields(Collections.singletonList(document))
.functionScore(FunctionScore.builder()
.addFunction(ranker)
.build())
.consistencyLevel(ConsistencyLevel.BOUNDED)
.build();
SearchResp searchResp = client.search(searchReq);
// nodejs
// go
# restful