Choisir l'analyseur adapté à votre cas d'utilisation
Ce guide se concentre sur la prise de décision pratique pour la sélection de l'analyseur. Pour plus de détails techniques sur les composants de l'analyseur et sur la manière d'ajouter des paramètres d'analyse, consultez la section Vue d'ensemble de l'analyseur.
Comprendre les analyseurs en 2 minutes
Dans Milvus, un analyseur traite le texte stocké dans ce champ pour le rendre consultable à l'aide de fonctions telles que la recherche plein texte (BM25), la correspondance de phrases ou la correspondance de texte. Il s'agit d'un processeur de texte qui transforme votre contenu brut en jetons pouvant faire l'objet d'une recherche.
Un analyseur fonctionne selon un processus simple en deux étapes :
Flux de travail de l'analyseur
Tokenisation (obligatoire) : Cette première étape consiste à appliquer un tokenizer pour décomposer une chaîne de texte continue en unités discrètes et significatives appelées "tokens". La méthode de tokénisation peut varier considérablement en fonction de la langue et du type de contenu.
Filtrage des tokens (facultatif) : Après la tokénisation, des filtres sont appliqués pour modifier, supprimer ou affiner les tokens. Ces opérations peuvent inclure la conversion de tous les tokens en minuscules, la suppression des mots communs sans signification (tels que les mots vides) ou la réduction des mots à leur forme racine (stemming).
Exemple:
Input: "Hello World!"
1. Tokenization → ["Hello", "World", "!"]
2. Lowercase & Punctuation Filtering → ["hello", "world"]
Pourquoi le choix de l'analyseur est-il important ?
Le choix d'un mauvais analyseur peut rendre des documents pertinents introuvables ou renvoyer des résultats non pertinents.
Le tableau suivant résume les problèmes courants causés par un mauvais choix d'analyseur et fournit des solutions pratiques pour diagnostiquer les problèmes de recherche.
Problème |
Symptôme |
Exemple (entrée et sortie) |
Cause (mauvais analyseur) |
Solution (bon analyseur) |
|---|---|---|---|---|
Surtokénisation |
Les requêtes textuelles portant sur des termes techniques, des identifiants ou des URL ne parviennent pas à trouver les documents pertinents. |
|
|
Utiliser un |
Sous-tokénisation |
La recherche d'un composant d'une phrase de plusieurs mots ne renvoie pas les documents contenant la phrase complète. |
|
Analyseur avec un |
Utiliser un |
Non-concordance des langues |
Les résultats de la recherche pour une langue spécifique sont absurdes ou inexistants. |
Texte chinois : |
|
Utilisez un analyseur spécifique à la langue, tel que |
Première question : Faut-il choisir un analyseur ?
Pour de nombreux cas d'utilisation, vous n'avez pas besoin de faire quoi que ce soit de spécial. Déterminons si vous êtes l'un d'entre eux.
Comportement par défaut : standard analyzer
Si vous ne spécifiez pas d'analyseur lorsque vous utilisez des fonctions de recherche de texte comme la recherche en texte intégral, Milvus utilise automatiquement l'analyseur standard l'analyseur.
L'analyseur standard:
Divise le texte en fonction des espaces et de la ponctuation
Convertit tous les tokens en minuscules
Supprime un ensemble intégré de mots vides et la plupart des signes de ponctuation.
Exemple de transformation:
Input: "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']
Critères de décision : Vérification rapide
Utilisez ce tableau pour déterminer rapidement si l'analyseur par défaut de standard répond à vos besoins. Si ce n'est pas le cas, vous devrez choisir une autre voie.
Votre contenu |
L'analyseur standard convient-il ? |
Pourquoi ? |
Ce dont vous avez besoin |
|---|---|---|---|
Articles de blog en anglais |
Oui |
Le comportement par défaut est suffisant. |
Utiliser le comportement par défaut (pas de configuration nécessaire). |
Documents en chinois |
❌ Non |
Les mots chinois n'ont pas d'espace et seront traités comme un seul jeton. |
Utiliser un |
Documentation technique |
❌ Non |
La ponctuation est supprimée des termes tels que |
Créer un analyseur personnalisé avec un |
Langues séparées par des espaces comme le texte français/espagnol |
⚠️ Peut-être |
Les caractères accentués ( |
Pour obtenir de meilleurs résultats, il est recommandé d'utiliser un analyseur personnalisé doté de la fonction |
Langues multilingues ou inconnues |
❌ Non |
L'analyseur |
Utilisez un analyseur personnalisé avec le Vous pouvez également envisager de configurer des analyseurs multilingues ou un identificateur de langue pour une gestion plus précise du contenu multilingue. |
Si l'analyseur par défaut de standard ne peut pas répondre à vos besoins, vous devez en implémenter un autre. Deux possibilités s'offrent à vous :
Voie A : utiliser des analyseurs intégrés
Les analyseurs intégrés sont des solutions préconfigurées pour les langues courantes. Ils constituent le moyen le plus simple de démarrer lorsque l'analyseur standard par défaut n'est pas parfaitement adapté.
Analyseurs intégrés disponibles
Analyseur |
Support linguistique |
Composants |
Remarques |
|---|---|---|---|
La plupart des langues séparées par des espaces (anglais, français, allemand, espagnol, etc.) |
|
Analyseur général pour le traitement initial du texte. Pour les scénarios monolingues, les analyseurs spécifiques à une langue (comme |
|
Dédié à l'anglais, cet analyseur applique un stemming et supprime les mots vides afin d'améliorer la correspondance sémantique avec l'anglais. |
|
Recommandé pour les contenus en anglais uniquement par rapport à |
|
Chinois |
|
Utilise actuellement le dictionnaire de chinois simplifié par défaut. |
Exemple de mise en œuvre
Pour utiliser un analyseur intégré, il suffit de spécifier son type à l'adresse analyzer_params lors de la définition du schéma du champ.
# Using built-in English analyzer
analyzer_params = {
"type": "english"
}
# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
)
Pour plus de détails, voir Recherche plein texte, Correspondance de texte ou Correspondance de phrases.
Voie B : Créer un analyseur personnalisé
Lorsque les options intégrées ne répondent pas à vos besoins, vous pouvez créer un analyseur personnalisé en combinant un tokenizer avec un ensemble de filtres. Cela vous permet de contrôler entièrement le pipeline de traitement du texte.
Étape 1 : Sélectionner le tokenizer en fonction de la langue
Choisissez votre tokenizer en fonction de la langue principale de votre contenu :
Langues occidentales
Pour les langues séparées par des espaces, vous disposez des options suivantes :
Tokenizer |
Fonctionnement |
Meilleur pour |
Exemples |
|---|---|---|---|
Divise le texte en fonction des espaces et des signes de ponctuation |
Texte général, ponctuation mixte |
|
|
Fractionne uniquement sur les caractères d'espacement |
Contenu prétraité, texte formaté par l'utilisateur |
|
Langues d'Asie de l'Est
Les langues basées sur un dictionnaire nécessitent des tokenizers spécialisés pour une segmentation correcte des mots :
Chinois
Tokéniseur |
Fonctionnement |
Ce qui convient le mieux |
Exemples d'application |
|---|---|---|---|
Segmentation basée sur le dictionnaire chinois avec algorithme intelligent |
Recommandé pour le contenu chinois - combine un dictionnaire et des algorithmes intelligents, spécialement conçus pour le chinois. |
|
|
Analyse morphologique basée sur un dictionnaire pur avec dictionnaire chinois(cc-cedict) |
Par rapport à |
|
Japonais et coréen
Langue |
Tokenizer |
Options du dictionnaire |
Meilleur pour |
Exemples |
|---|---|---|---|---|
Japonais |
ipadic (usage général), ipadic-neologd (termes modernes), unidic (académique) |
Analyse morphologique avec traitement des noms propres |
|
|
Coréen |
Analyse morphologique du coréen |
|
Langues multilingues ou inconnues
Pour les contenus où les langues sont imprévisibles ou mélangées dans les documents :
Tokenizer |
Fonctionnement |
Ce qui convient le mieux |
Exemples d'utilisation |
|---|---|---|---|
Tokénisation compatible avec Unicode (Composants internationaux pour Unicode) |
Ecritures mixtes, langues inconnues, ou lorsque la tokénisation simple est suffisante |
|
Quand utiliser icu:
Langues mixtes pour lesquelles l'identification de la langue n'est pas pratique.
Vous ne voulez pas vous encombrer d'analyseurs multilingues ou d'identificateurs de langue.
Le contenu a une langue principale avec des mots étrangers occasionnels qui contribuent peu au sens général (par exemple, un texte en anglais avec des noms de marques sporadiques ou des termes techniques en japonais ou en français).
Autres approches: Pour un traitement plus précis du contenu multilingue, envisagez d'utiliser des analyseurs multilingues ou l'identificateur de langue. Pour plus d'informations, reportez-vous à la section Analyseurs multilingues ou à l'identificateur de langue.
Étape 2 : ajouter des filtres pour plus de précision
Après avoir sélectionné votre tokenizer, appliquez des filtres en fonction de vos exigences de recherche spécifiques et des caractéristiques du contenu.
Filtres couramment utilisés
Ces filtres sont essentiels pour la plupart des configurations de langues séparées par un espace (anglais, français, allemand, espagnol, etc.) et améliorent considérablement la qualité de la recherche :
Filtre |
Fonctionnement |
Quand l'utiliser |
Exemples de filtres |
|---|---|---|---|
Convertir tous les tokens en minuscules |
Universel - s'applique à toutes les langues avec des distinctions de casse |
|
|
Réduire les mots à leur forme racine |
Langues avec flexions de mots (anglais, français, allemand, etc.) |
Pour l'anglais :
|
|
Supprimer les mots courants sans signification |
La plupart des langues - particulièrement efficace pour les langues séparées par des espaces |
|
Pour les langues d'Asie de l'Est (chinois, japonais, coréen, etc.), il est préférable d'utiliser des filtres spécifiques à la langue. Ces langues utilisent généralement des approches différentes pour le traitement des textes et peuvent ne pas bénéficier de manière significative de la troncature.
Filtres de normalisation de texte
Ces filtres normalisent les variations de texte afin d'améliorer la cohérence des correspondances :
Filtre |
Fonctionnement |
Quand l'utiliser |
Exemples |
|---|---|---|---|
Convertir les caractères accentués en équivalents ASCII |
Contenu international, contenu généré par l'utilisateur |
|
Filtrage des tokens
Contrôlez les jetons qui sont conservés en fonction du contenu ou de la longueur des caractères :
Filtre |
Comment cela fonctionne-t-il ? |
Quand l'utiliser |
Exemples |
|---|---|---|---|
Supprimer les jetons de ponctuation autonomes |
Nettoyer la sortie des tokenizers |
|
|
Ne garder que les lettres et les chiffres |
Contenu technique, traitement de texte propre |
|
|
Suppression des mots-clés en dehors de la plage de longueur spécifiée |
Filtrer le bruit (mots trop longs) |
|
|
Filtrage personnalisé basé sur des motifs |
Exigences en matière de jetons spécifiques à un domaine |
|
Filtres spécifiques à une langue
Ces filtres gèrent des caractéristiques linguistiques spécifiques :
Filtre |
Langue |
Fonctionnement |
Exemples de filtres |
|---|---|---|---|
Allemand |
Divise les mots composés en composants consultables |
|
|
Chinois |
Conserve les caractères chinois + alphanumériques |
|
|
Chinois |
Conserve uniquement les caractères chinois |
|
Étape 3 : Combiner et mettre en œuvre
Pour créer votre analyseur personnalisé, vous définissez le tokenizer et une liste de filtres dans le dictionnaire analyzer_params. Les filtres sont appliqués dans l'ordre de la liste.
# Example: A custom analyzer for technical content
analyzer_params = {
"tokenizer": "whitespace",
"filter": ["lowercase", "alphanumonly"]
}
# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
)
Finale : Testez avec run_analyzer
Validez toujours votre configuration avant de l'appliquer à une collection :
# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"
# Run analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)
Problèmes courants à vérifier :
Sur-tokénisation: Les termes techniques sont divisés de manière incorrecte.
Sous-tokénisation: Phrases mal séparées
Jetons manquants: Termes importants filtrés
Pour une utilisation détaillée, voir run_analyzer.
Configurations recommandées par cas d'utilisation
Cette section présente les configurations de tokenizer et de filtre recommandées pour les cas d'utilisation courants lors de l'utilisation d'analyseurs dans Milvus. Choisissez la combinaison qui correspond le mieux à votre type de contenu et à vos exigences de recherche.
Avant d'appliquer un analyseur à votre collection, nous vous recommandons d'utiliser run_analyzer pour tester et valider les performances de l'analyse de texte.
Langues avec accents (français, espagnol, allemand, etc.)
Utilisez un tokenizer standard avec une conversion en minuscules, un stemming spécifique à la langue et une suppression des mots vides. Cette configuration fonctionne également pour d'autres langues européennes en modifiant les paramètres language et stop_words.
# French example
analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding", # Handle accent marks
{
"type": "stemmer",
"language": "french"
},
{
"type": "stop",
"stop_words": ["_french_"]
}
]
}
# For other languages, modify the language parameter:
# "language": "spanish" for Spanish
# "language": "german" for German
# "stop_words": ["_spanish_"] or ["_german_"] accordingly
Contenu en anglais
Pour le traitement de textes en anglais avec un filtrage complet. Vous pouvez également utiliser l'analyseur english intégré :
analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "english"
},
{
"type": "stop",
"stop_words": ["_english_"]
}
]
}
# Equivalent built-in shortcut:
analyzer_params = {
"type": "english"
}
Contenu chinois
Utilisez le tokenizer jieba et appliquez un filtre de caractères pour ne conserver que les caractères chinois, les lettres latines et les chiffres.
analyzer_params = {
"tokenizer": "jieba",
"filter": ["cnalphanumonly"]
}
# Equivalent built-in shortcut:
analyzer_params = {
"type": "chinese"
}
Pour le chinois simplifié, cnalphanumonly supprime tous les tokens à l'exception des caractères chinois, du texte alphanumérique et des chiffres. Cela permet d'éviter que la ponctuation n'affecte la qualité de la recherche.
Contenu japonais
Utilisez le tokenizer lindera avec le dictionnaire japonais et les filtres pour nettoyer la ponctuation et contrôler la longueur des jetons :
analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict": "ipadic" # Options: ipadic, ipadic-neologd, unidic
},
"filter": [
"removepunct", # Remove standalone punctuation
{
"type": "length",
"min": 1,
"max": 20
}
]
}
Contenu coréen
Similaire au japonais, en utilisant le tokenizer lindera avec un dictionnaire coréen :
analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict": "ko-dic"
},
"filter": [
"removepunct",
{
"type": "length",
"min": 1,
"max": 20
}
]
}
Contenu mixte ou multilingue
Lorsque vous travaillez sur des contenus multilingues ou utilisant des scripts de manière imprévisible, commencez par utiliser l'analyseur icu. Cet analyseur compatible avec Unicode gère efficacement les scripts et les symboles mixtes.
Configuration multilingue de base (pas de troncature):
analyzer_params = {
"tokenizer": "icu",
"filter": ["lowercase", "asciifolding"]
}
Traitement multilingue avancé:
Pour un meilleur contrôle du comportement des jetons dans différentes langues :
Utilisez une configuration d'analyseur multilingue. Pour plus d'informations, reportez-vous à la section Analyseurs multilingues.
Implémentez un identifiant de langue dans votre contenu. Pour plus d'informations, reportez-vous à la section Identificateur de langue.
Intégrer des fonctions d'extraction de texte
Après avoir sélectionné votre analyseur, vous pouvez l'intégrer aux fonctions de recherche de texte fournies par Milvus.
Recherche de texte intégral
Les analyseurs ont un impact direct sur la recherche de texte intégral basée sur la BM25 grâce à la génération de vecteurs épars. Utilisez le même analyseur pour l'indexation et l'interrogation afin de garantir une tokénisation cohérente. Les analyseurs spécifiques à une langue offrent généralement un meilleur score BM25 que les analyseurs génériques. Pour plus de détails sur la mise en œuvre, reportez-vous à la section Recherche plein texte.
Correspondance de texte
Les opérations de correspondance de texte effectuent une correspondance exacte entre les requêtes et le contenu indexé sur la base des résultats de l'analyseur. Pour plus de détails sur l'implémentation, reportez-vous à la section Correspondance de texte.
Correspondance de phrases
La correspondance de phrases nécessite une tokénisation cohérente des expressions à plusieurs mots afin de préserver les limites et le sens des phrases. Pour plus de détails sur l'implémentation, reportez-vous à la section Correspondance de phrases.