Aperçu de Model RankerCompatible with Milvus 2.6.x
La recherche vectorielle traditionnelle classe les résultats uniquement en fonction de la similarité mathématique, c'est-à-dire de la proximité des vecteurs dans un espace à haute dimension. Bien qu'efficace, cette approche passe souvent à côté de la véritable pertinence sémantique. Pensez à la recherche de "meilleures pratiques pour l'optimisation des bases de données" : vous pourriez recevoir des documents avec une similarité vectorielle élevée qui mentionnent fréquemment ces termes, mais qui ne fournissent pas réellement de stratégies d'optimisation exploitables.
Model Ranker transforme la recherche Milvus en intégrant des modèles de langage avancés qui comprennent les relations sémantiques entre les requêtes et les documents. Au lieu de s'appuyer uniquement sur la similarité vectorielle, il évalue la signification du contenu et le contexte pour fournir des résultats plus intelligents et plus pertinents.
Limites
Les modèles de classement ne peuvent pas être utilisés avec les recherches par regroupement.
Les champs utilisés pour le reclassement des modèles doivent être de type texte (
VARCHAR).Chaque modèle de classement ne peut utiliser qu'un seul champ
VARCHARà la fois pour l'évaluation.
Fonctionnement
Les classificateurs de modèles intègrent les capacités de compréhension des modèles linguistiques dans le processus de recherche Milvus par le biais d'un flux de travail bien défini :
Vue d'ensemble des classificateurs de modèles
Requête initiale: Votre application envoie une requête à Milvus.
Recherche vectorielle: Milvus effectue une recherche vectorielle standard pour identifier les documents candidats.
Récupération des candidats: Le système identifie l'ensemble initial de documents candidats sur la base de la similarité vectorielle.
Évaluation du modèle: La fonction Model Ranker traite les paires requête-document :
Envoie la requête originale et les documents candidats à un service de modèle externe.
Le modèle linguistique évalue la pertinence sémantique entre la requête et chaque document.
Chaque document reçoit un score de pertinence basé sur la compréhension sémantique.
Réorganisation intelligente: Les documents sont réorganisés en fonction des scores de pertinence générés par le modèle.
Résultats améliorés: Votre application reçoit des résultats classés en fonction de la pertinence sémantique plutôt que de la simple similarité vectorielle.
Choisissez un fournisseur de modèles adapté à vos besoins
Milvus prend en charge les fournisseurs de services de modèle suivants pour le reclassement, chacun ayant des caractéristiques distinctes :
Fournisseur |
Meilleur pour |
Caractéristiques |
Exemple de cas d'utilisation |
|---|---|---|---|
vLLM |
Applications complexes nécessitant une compréhension sémantique approfondie et une personnalisation |
|
Plate-forme de recherche juridique déployant des modèles spécifiques à un domaine qui comprennent la terminologie juridique et les relations avec la jurisprudence |
TEI |
Mise en œuvre rapide avec utilisation efficace des ressources |
|
Système de gestion de contenu nécessitant des capacités de reclassement efficaces avec des exigences standard |
Cohérence |
Applications d'entreprise privilégiant la fiabilité et la facilité d'intégration |
|
Plateforme de commerce électronique nécessitant une recherche à haute disponibilité avec des performances API constantes et des catalogues de produits multilingues |
Voyage AI |
Applications RAG avec des exigences spécifiques en matière de performance et de contexte |
|
Base de données de recherche avec différentes longueurs de documents nécessitant un contrôle des performances très fin et une compréhension sémantique spécialisée |
SiliconFlow |
Applications traitant des documents longs avec des priorités de rentabilité |
|
Système de recherche de documentation technique traitant les manuels et documents longs qui nécessitent une segmentation intelligente et un contrôle des chevauchements. |
Pour des informations détaillées sur l'implémentation de chaque modèle de service, reportez-vous à la documentation correspondante :
Mise en œuvre
Avant d'implémenter Model Ranker, assurez-vous que vous disposez des éléments suivants
une collection Milvus avec un champ
VARCHARcontenant le texte à reclasserUn service de modèle externe en cours d'exécution accessible à votre instance Milvus
Une connectivité réseau appropriée entre Milvus et le service de modèle choisi.
Les classeurs de modèles s'intègrent parfaitement aux opérations de recherche vectorielle standard et de recherche hybride. La mise en œuvre implique la création d'un objet Function qui définit votre configuration de reclassement et le transmet aux opérations de recherche.
Créer un classeur de modèles
Pour mettre en œuvre un classeur de modèles, il faut d'abord définir un objet Function avec la configuration appropriée. Dans cet exemple, nous utilisons le TEI comme fournisseur de services :
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
Paramètre |
Nécessaire ? |
Description de l'objet |
Valeur / Exemple |
|---|---|---|---|
|
Oui |
Identifiant de la fonction utilisé lors de l'exécution des recherches. |
|
|
Oui |
Nom du champ de texte à utiliser pour le reclassement. Il doit s'agir d'un champ de type |
|
|
Oui |
Spécifie le type de fonction créée. Doit être défini sur |
|
|
Oui |
Dictionnaire contenant la configuration de la fonction de reclassement basée sur un modèle. Les paramètres disponibles (clés) varient en fonction du fournisseur de services. |
|
|
Oui |
Doit être défini sur |
|
|
Oui |
Le fournisseur de services de modélisation à utiliser pour le reclassement. |
|
|
Oui |
Liste des chaînes de requête utilisées par le modèle de reclassement pour calculer les scores de pertinence. Le nombre de chaînes de requête doit correspondre exactement au nombre de requêtes dans votre opération de recherche (même si vous utilisez des vecteurs de requête au lieu de texte), sinon une erreur sera signalée. |
|
|
Oui |
URL du service de modèle. |
|
|
Non |
Nombre maximal de documents à traiter en un seul lot. Des valeurs plus élevées augmentent le débit mais nécessitent plus de mémoire. |
|
Appliquer à la recherche vectorielle standard
Après avoir défini votre modèle de classement, vous pouvez l'appliquer lors des opérations de recherche en le passant au paramètre 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