Choisissez une stratégie de recherche EmbeddingList

Les stratégies de recherche EmbeddingList déterminent la manière dont Milvus construit un index approximatif de candidats pour la recherche EmbeddingList. La stratégie par défaut est « tokenann ». Vous pouvez passer à « muvera » ou « lemur » lorsque la liste d’embeddings est volumineuse, que TokenANN est trop coûteux ou qu’une représentation apprise/compressée au niveau des lignes est plus adaptée. Le résultat final est toujours produit par le reclassement MaxSim lorsque l’option « emb_list_rerank » est activée.

Pourquoi existe-t-il des stratégies de recherche ?

La liste d’embeddings (EmbeddingList) est conçue pour les lignes contenant plusieurs vecteurs, tels que les embeddings de tokens dans un document texte, les embeddings de patches dans un document visuel ou les embeddings de clips dans une vidéo. Au lieu de comparer un vecteur de requête à un vecteur de ligne, MaxSim compare une liste d’embeddings de requête à une liste d’embeddings de document et agrège les meilleures correspondances.

Cela offre une meilleure capacité de représentation, mais l’application exacte de MaxSim est coûteuse à grande échelle. Une recherche MaxSim par force brute nécessiterait de comparer les vecteurs de requête avec chaque vecteur de chaque ligne candidate. Cela s’avère généralement trop lent pour une recherche en production.

### Problème - Chaque ligne peut contenir de nombreux vecteurs. - L’application exacte de MaxSim sur toutes les lignes est coûteuse. - La taille de l’index et la latence de recherche peuvent augmenter rapidement.### Stratégie - Utiliser une méthode de récupération approximative en première étape. - Récupérer plus de candidats que le topK demandé. - Reclasser les candidats à l’aide d’un MaxSim exact.

En ce sens, la recherche « emb_list_strategy » est principalement une stratégie de construction d’index et de récupération de candidats. Elle est configurée lors de la construction de l’index et détermine comment l’ensemble de candidats ANN de première étape est généré. Des paramètres de recherche tels que « retrieval_ann_ratio » et « emb_list_rerank » contrôlent ensuite le nombre de candidats récupérés et l’application ou non du reclassement par MaxSim.


Stratégies disponibles

StratégieUnité de recherche de candidatsProblématique résolueMeilleur ajustementPrincipal compromis
tokenannVecteurs individuels au sein de chaque ligneConserve les vecteurs d'origine et évite les pertes liées à la compression.Recherche axée sur la qualité, listes d’embeddings courtes ou moyennes, embeddings à haut pouvoir de discrimination.Index plus volumineux et coût de recherche des candidats plus élevé.
muveraUn vecteur encodé par ligneCompresse une liste d’embeddings en une représentation FDE de dimension fixe sans apprentissage.Documents plus longs, vecteurs d’encodage à haute discrimination, cas où TokenANN est trop gourmand en ressources.La projection aléatoire introduit une perte d’approximation ; la dimension FDE affecte la latence.
lemurUn vecteur appris par ligneApprend une compression spécifique au corpus à partir de listes d’embeddings vers des vecteurs de ligne de dimension fixe.Embeddings à faible pouvoir de discrimination, recherche multimodale ou de documents visuels, listes d’embeddings volumineuses.Nécessite un apprentissage et peut être sensible à la distribution du corpus et au biais lié à la longueur des documents.

TokenANN

tokenann indexe chaque vecteur de la liste d’embeddings. Lors de la recherche, chaque vecteur de requête effectue une recherche ANN ; les vecteurs correspondants sont regroupés dans leurs lignes respectives, et les lignes candidates résultantes sont reclassées à l’aide de MaxSim.

Utilisez TokenANN lorsque la qualité est la priorité absolue. Il s’agit de l’approximation la plus proche du calcul MaxSim d’origine, car il conserve tous les vecteurs disponibles dans l’index de première étape.

  • Convient particulièrement : aux fragments de texte courts, aux lignes comportant un nombre faible ou modéré de vecteurs, à une forte séparation sémantique au niveau des tokens, aux bases de référence sensibles à la qualité.

  • Moins adapté : documents très longs, pages visuelles comportant des milliers de vecteurs de patch, contraintes strictes en matière de mémoire ou de latence.

  • Comportement au niveau des éléments : TokenANN peut extraire des candidats à partir de vecteurs individuels avant de les regrouper en lignes. Le résultat final de la recherche dans EmbeddingList reste au niveau des lignes après le calcul du score MaxSim.

MUVERA

muvera encode chaque liste d’embeddings en un vecteur de dimension fixe à l’aide de projections aléatoires. Cela transforme la recherche de première étape en une recherche vectorielle standard au niveau des lignes. Les candidats sont ensuite reclassés avec MaxSim.

Utilisez MUVERA lorsque TokenANN est trop gourmand en ressources mais que vous ne souhaitez pas passer par une étape d’entraînement. Il s’agit d’un compromis pratique entre qualité et coût.

  • Convient particulièrement : aux documents textuels longs, aux espaces d’embedding à haute discrimination, aux charges de travail nécessitant une taille d’index inférieure à celle de TokenANN.

  • Moins adapté : aux espaces d’embedding à faible pouvoir de discrimination ou aux cas où la représentation FDE devient trop haute en dimension pour le budget de latence.

  • Paramètres importants :muvera_num_projections, muvera_num_repeats et muvera_seed.

LEMUR

lemur entraîne un modèle pour compresser chaque liste d’embeddings en une représentation de dimension fixe. La recherche ANN de première étape s’effectue sur les vecteurs appris au niveau des lignes, et les candidats sont reclassés à l’aide de MaxSim.

Utilisez LEMUR lorsque la compression apprise justifie le coût de l’entraînement. Il peut donner de bons résultats pour les espaces d’embedding à faible discrimination et la recherche multimodale, mais il doit être validé par rapport au corpus cible car il peut être sensible à la distribution de la longueur des documents.

  • Convient particulièrement : recherche de documents visuels, représentations de patches multimodaux, espaces d’embeddings à faible discrimination, grandes listes d’embeddings pour lesquelles TokenANN n’est pas pratique.

  • Moins adapté : corpus changeant fréquemment, embeddings à forte discrimination avec des longueurs de documents très asymétriques, charges de travail pour lesquelles le coût d’entraînement est inacceptable.

  • Paramètres importants :lemur_hidden_dim, lemur_num_train_samples, lemur_num_epochs, lemur_batch_size, lemur_learning_rate, lemur_seed et lemur_num_layers.


Comportement et configuration par défaut

La stratégie EmbeddingList par défaut dans Knowhere est tokenann. Si vous ne spécifiez pas emb_list_strategy, Knowhere utilise TokenANN. Les valeurs par défaut lors de la recherche incluent retrieval_ann_ratio=3.0 et emb_list_rerank=true.

Éléments de configuration par stratégie

Le tableau suivant répertorie les éléments de configuration spécifiques à chaque stratégie. Dans Milvus, les éléments de configuration à la compilation sont généralement transmis dans le map params lors de la création d’un index. Si vous avez besoin de valeurs par défaut côté serveur, celles-ci doivent être définies dans le fichier de configuration de Milvus, sous la section knowhere.

StratégieÉlément de configurationÉtapeValeur par défautQuand le modifier
tokenannemb_list_strategy="tokenann"Création de l'indextokenannÀ utiliser explicitement lorsque vous souhaitez le comportement d'indexation par vecteur d'éléments par défaut ou lorsque DiskANN est utilisé.
muveraemb_list_strategy="muvera"Création d'indextokenannÀ utiliser lorsque vous souhaitez une récupération codée au niveau des lignes sans apprentissage.
muveramuvera_num_projectionsCréation d'index4Contrôle le nombre de projections SimHash. Des valeurs plus élevées créent davantage de compartiments et peuvent améliorer la qualité du codage, mais augmentent la dimensionnalité codée.
muveramuvera_num_repeatsCréation d’index7Contrôle le nombre de codages FDE indépendants qui sont concaténés. Des valeurs plus élevées peuvent améliorer la robustesse, mais augmentent le coût de l'indexation et de la recherche.
muveramuvera_seedCréation d'index42À définir pour obtenir des projections aléatoires reproductibles, notamment lors de tests et de comparaisons de performances.
lemuremb_list_strategy="lemur"Création d’indextokenannÀ utiliser lorsque la compression au niveau des lignes apprise est censée fonctionner mieux que la projection aléatoire fixe.
lemurlemur_hidden_dimCréation d’index256Contrôle la taille de la représentation compressée. Augmentez cette valeur pour plus de capacité ; diminuez-la pour réduire l'utilisation de la mémoire et accélérer la récupération.
lemurlemur_num_train_samplesCréation d’index20000Augmentez ce paramètre lorsque le corpus est varié et que la compression apprise est sous-adaptée ; ne le réduisez que pour les petits tests ou pour accélérer la création des index.
lemurlemur_num_epochsCréation d’index50Augmentez si l'entraînement n'a pas convergé ; réduisez lorsque le temps de création est la principale contrainte.
lemurlemur_batch_sizeCréation d'index512Ajustez en fonction du débit d’entraînement et de l’utilisation de la mémoire.
lemurlemur_learning_rateCréation d'index0.001Ajuster lorsque l'entraînement est instable ou converge trop lentement.
lemurlemur_seedCréation d'index42À définir pour obtenir des cycles d'entraînement reproductibles.
lemurlemur_num_layersCréation d'index2N'augmentez cette valeur que lorsque le corpus nécessite un extracteur de caractéristiques plus expressif et que vous pouvez vous permettre un coût d'entraînement supplémentaire.
Toutes les stratégiesretrieval_ann_ratioRecherche3.0Augmentez ce paramètre pour récupérer davantage de candidats de première étape et améliorer le rappel ; diminuez-le pour réduire la latence.
Toutes les stratégiesemb_list_rerankRecherchetrueLaissez cette option activée pour le reclassement MaxSim. Ne la désactivez que pour les expériences contrôlées où la qualité du réseau neuronal artificiel (ANN) de première étape est mesurée directement.

Configurer la stratégie dans Milvus

Dans Milvus, la stratégie est transmise en tant que paramètre d’index lors de la création d’un index sur un champ EmbeddingList, tel qu’un sous-champ vectoriel 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,
    },
)

Pour LEMUR, fournissez les paramètres d'entraînement de LEMUR dans la même carte d'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,
}

Configurer les valeurs par défaut côté serveur dans Milvus

Milvus peut également renseign milvus.yaml s d’index à partir de ` `. La section concernée est ` knowhere`. Les paramètres sont organisés par type d’index et par étape, selon le modèle ` knowhere.<INDEX_TYPE>.<stage>.<parameter>`. Les paramètres d’index fournis par l’utilisateur ont priorité sur ces valeurs par défaut.

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

Privilégiez les paramètres par index pour la sélection de la stratégie. Une valeur par défaut du fichier de configuration de Milvus s’applique de manière générale aux index de ce type et de cette étape. Utilisez les paramètres de create_index lorsque différentes collections ou différents champs nécessitent des stratégies EmbeddingList différentes.

Configurer la récupération des candidats au moment de la recherche

La stratégie détermine la manière dont l’index est construit. Au moment de la recherche, utilisez retrieval_ann_ratio pour contrôler le nombre de candidats de première étape récupérés avant le reclassement MaxSim. Des valeurs plus élevées améliorent généralement le rappel, mais augmentent la latence.

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,
)
ParamètreÉtapeValeur par défautSignification
emb_list_strategyConstruction de l'indextokenannDétermine la manière dont les candidats de la liste EmbeddingList sont indexés et récupérés.
retrieval_ann_ratioRecherche3.0Facteur d’expansion des candidats pour le premier tour de l’ANN.
emb_list_rerankRecherchetrueDétermine s’il faut reclasser les candidats récupérés à l’aide de MaxSim.

Remarques de compatibilité : MUVERA et LEMUR prennent actuellement en charge les données fp32 dans Knowhere. DiskANN ne prend en charge EmbeddingList qu’avec la stratégie TokenANN. Si vous utilisez des types de vecteurs autres que fp32 ou DiskANN, vérifiez la prise en charge de la stratégie avant de modifier la valeur par défaut.


Comment choisir une stratégie

Il n’existe pas de stratégie universellement optimale. Faites votre choix en fonction de la longueur de la liste d’embedding, de la capacité de discrimination de l’espace d’embedding, du budget de latence, de la taille de l’index et de la possibilité ou non de réaliser une étape d’entraînement.

QuestionSignalPoint de départ recommandé
Avez-vous besoin d’une base de référence de haute qualité ?Vous souhaitez évaluer la meilleure approximation pratique avant d’optimiser le coût.tokenann
Le nombre de vecteurs par ligne est-il faible ou modéré ?Chaque ligne contient un petit nombre de vecteurs de tokens, de patches ou de clips.tokenann
TokANN est-il trop volumineux ou trop lent ?La taille de l'index ou la latence de récupération au premier niveau constitue le goulot d'étranglement.muvera
Souhaitez-vous une compression sans apprentissage ?Vous avez besoin d’un modèle opérationnel plus simple et d’un encodage reproductible.muvera
L'espace d'embedding présente-t-il une faible capacité de discrimination ?Les candidats ANN au niveau des tokens sont bruités, et la projection aléatoire ne préserve pas suffisamment le signal.lemur
La charge de travail est-elle visuelle ou multimodale ?Les lignes contiennent de nombreux vecteurs de patchs, et TokenANN est trop coûteux.lemur ou muvera
La longueur des documents est-elle très asymétrique ?Certaines lignes contiennent bien plus de vecteurs que d’autres.Commencez par muvera; vérifiez attentivement lemur.

Workflow d'évaluation suggéré

  1. Commencez par utiliser tokenann comme référence de qualité lorsque la taille de l'ensemble de données le permet.

  2. Exécutez les mêmes requêtes avec muvera et comparez le rappel, le nDCG, la latence et la taille de l'index.

  3. Essayez lemur lorsque la liste d’embeddings est volumineuse, que l’espace d’embedding est bruité ou que la charge de travail est visuelle ou multimodale.

  4. Ajustez la valeur de « retrieval_ann_ratio » avant de modifier trop de paramètres de compilation. Augmentez-la si le rappel est faible ; réduisez-la si la latence est trop élevée.

  5. Effectuez toujours des validations sur des requêtes représentatives et des distributions de longueur de documents représentatives. Une stratégie qui fonctionne sur des textes courts peut ne pas fonctionner sur des documents visuels ou des corpus à longue traîne.

### Priorité à la qualité : commencez par « tokenann ». Utilisez-le comme référence pour évaluer la qualité de l’approximation MaxSim.### Équilibré : essayez muvera lorsque vous avez besoin d’un coût réduit sans ajouter de pipeline d’entraînement.### Compression : essayez lemur lorsque la compression apprise au niveau des lignes est susceptible de surpasser la projection aléatoire fixe.

Références utilisées pour ce projet

  • Tests Milvus pour emb_list_strategy, retrieval_ann_ratio et emb_list_rerank.

  • Gestion des fichiers de configuration Milvus pour les valeurs par défaut des index côté serveur dans la section « knowhere ».

  • Définitions des paramètres Knowhere pour les valeurs par défaut et les noms de stratégies prises en charge.

  • Vérifications de compatibilité Knowhere pour MUVERA/LEMUR (fp32 uniquement) et la prise en charge de DiskANN (TokenANN uniquement).

  • Notes d’évaluation internes comparant TokenANN, MUVERA et LEMUR pour la recherche de candidats MaxSim.

Remarque concernant la publication : avant toute publication externe, vérifiez quels paramètres sont officiellement pris en charge dans la version cible de Milvus et si le produit souhaite exposer l’ensemble des paramètres Knowhere de bas niveau ou seulement un sous-ensemble documenté plus restreint.