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 :

Model Ranker Overview Vue d'ensemble des classificateurs de modèles

  1. Requête initiale: Votre application envoie une requête à Milvus.

  2. Recherche vectorielle: Milvus effectue une recherche vectorielle standard pour identifier les documents candidats.

  3. Récupération des candidats: Le système identifie l'ensemble initial de documents candidats sur la base de la similarité vectorielle.

  4. É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.

  5. Réorganisation intelligente: Les documents sont réorganisés en fonction des scores de pertinence générés par le modèle.

  6. 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

  • Prise en charge de divers modèles linguistiques de grande taille

  • Options de déploiement flexibles

  • Exigences de calcul plus élevées

  • Potentiel de personnalisation plus important

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

  • Service léger optimisé pour les opérations textuelles

  • Déploiement plus facile avec des besoins en ressources moindres

  • Modèles de reclassement pré-optimisés

  • Frais d'infrastructure minimes

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

  • Fiabilité et évolutivité de niveau entreprise

  • Service géré sans maintenance de l'infrastructure

  • Capacités de relecture multilingue

  • Limitation de la vitesse et gestion des erreurs intégrées

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

  • Modèles spécialement formés pour les tâches de reranking

  • Contrôles granulaires de la troncature pour diverses longueurs de documents

  • Inférence optimisée pour les charges de travail de production

  • Variantes de modèles multiples (rerank-2, rerank-lite, etc.)

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é

  • Traitement avancé des morceaux de documents avec chevauchement configurable

  • Notation basée sur les morceaux (le morceau ayant obtenu la meilleure note représente le document)

  • Prise en charge de divers modèles de reclassement

  • Rentabilité grâce à des variantes du modèle standard et du modèle pro

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 VARCHAR contenant le texte à reclasser

  • Un 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

name

Oui

Identifiant de la fonction utilisé lors de l'exécution des recherches.

"semantic_ranker"

input_field_names

Oui

Nom du champ de texte à utiliser pour le reclassement.

Il doit s'agir d'un champ de type VARCHAR.

["document"]

function_type

Oui

Spécifie le type de fonction créée.

Doit être défini sur RERANK pour tous les classeurs de modèles.

FunctionType.RERANK

params

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.

{...}

params.reranker

Oui

Doit être défini sur "model" pour activer la fonction de reclassement des modèles.

"model"

params.provider

Oui

Le fournisseur de services de modélisation à utiliser pour le reclassement.

"tei"

params.queries

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.

["search query"]

params.endpoint

Oui

URL du service de modèle.

"http://localhost:8080"

max_client_batch_size

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.

32 (par défaut)

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