Choisissez l'analyseur adapté à votre cas d'utilisation
Ce guide se concentre sur les aspects pratiques de la prise de décision pour le choix d’un analyseur. Pour plus de détails techniques sur les composants des analyseurs et sur la manière d’ajouter des paramètres d’analyse, consultez la section Présentation des analyseurs.
Comprendre les analyseurs en 2 minutes
Dans Milvus, un analyseur traite le texte stocké dans ce champ afin de le rendre consultable pour des fonctionnalités telles que la recherche en texte intégral (BM25), la correspondance de phrases ou la correspondance de texte. Considérez-le comme un processeur de texte qui transforme votre contenu brut en tokens consultables.
Un analyseur fonctionne selon un pipeline simple en deux étapes :
Flux de travail de l’analyseur
Tokenisation (obligatoire) : cette étape initiale consiste à appliquer un tokeniseur pour diviser une chaîne de texte continue en unités distinctes et significatives appelées « tokens ». La méthode de tokenisation peut varier considérablement en fonction de la langue et du type de contenu.
Filtrage des tokens (facultatif) : après la tokenisation, 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 de mots courants 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 analyseur inadapté 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 propose des solutions concrètes pour diagnostiquer les problèmes de recherche.
Problème |
Symptôme |
Exemple (entrée et sortie) |
Cause (mauvais analyseur) |
Solution (bon analyseur) |
|---|---|---|---|---|
Tokenisation excessive |
Les requêtes textuelles portant sur des termes techniques, des identifiants ou des URL ne permettent pas de trouver de documents pertinents. |
|
|
Utilisez un |
Sous-tokenisation |
La recherche d’un élément d’une expression composée de plusieurs mots ne renvoie pas les documents contenant l’expression complète. |
|
Analyseur avec un |
Utilisez un |
Incohérences linguistiques |
Les résultats de recherche pour une langue spécifique n'ont aucun sens ou sont inexistants. |
Texte en chinois : |
|
Utilisez un analyseur spécifique à la langue, tel que |
Incompatibilité entre les méthodes de saisie |
Les utilisateurs saisissent du pinyin, mais le texte indexé utilise des caractères chinois. |
Texte en chinois : |
Analyseur ne générant que des tokens de caractères chinois |
Utilisez un analyseur personnalisé avec le |
Première question : devez-vous choisir un analyseur ?
Dans de nombreux cas d'utilisation, vous n'avez rien de particulier à faire. Voyons si c'est votre cas.
Comportement par défaut : l'analyseur « standard »
Si vous ne spécifiez pas d’analyseur lorsque vous utilisez des fonctionnalités de recherche de texte telles que la recherche en texte intégral, Milvus utilise automatiquement l’ standard analyseur par défaut.
L'analyseur « standard » :
Divise le texte en fonction des espaces et des signes de ponctuation
Convertit tous les tokens en minuscules
Supprime un ensemble intégré de mots vides courants de l’anglais 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 : une vérification rapide
Utilisez ce tableau pour déterminer rapidement si l’analyseur par défaut « standard » répond à vos besoins. Si ce n’est pas le cas, vous devrez choisir une autre approche.
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. |
Utilisez les paramètres par défaut (aucune configuration nécessaire). |
Documents en chinois |
❌ Non |
Les mots chinois ne comportent pas d'espaces et seront traités comme un seul token. |
Utilisez un |
Documents en arabe |
❌ Non |
textes arabes peuvent comporter des variantes de lettres, des signes diacritiques, des tatweel, des chiffres arabo-indiens et des mots vides courants en arabe qui nécessitent un traitement spécifique à la langue. |
Utilisez un |
Documents en thaï |
❌ Non |
Le texte thaï ne comporte généralement pas d'espaces entre les mots ; il nécessite donc une segmentation des mots spécifique à la langue. |
Utilisez un |
Documentation technique |
❌ Non |
La ponctuation est supprimée des termes tels que « |
Créez un analyseur personnalisé à l'aide d'un |
Langues utilisant des espaces comme séparateurs, telles que le français ou l'espagnol |
⚠️ Attention |
que les caractères accentués ( |
Un analyseur personnalisé utilisant le |
Langues multilingues ou inconnues |
❌ Non |
L'analyseur |
Utilisez un analyseur personnalisé avec le Vous pouvez également envisager de configurer des analyseurs multilingues ou un identifiant de langue pour une gestion plus précise du contenu multilingue. |
Si l’analyseur par défaut « standard » ne répond pas à vos besoins, vous devez en implémenter un autre. Deux options s’offrent à vous :
Option A : Utiliser les 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 ne convient pas parfaitement.
Analyseurs intégrés disponibles
Analyseur |
Langage pris en charge |
Composants |
Remarques |
|---|---|---|---|
La plupart des langues utilisant des espaces pour séparer les mots (anglais, français, allemand, espagnol, etc.) |
|
Analyseur polyvalent pour le traitement initial du texte. Dans les scénarios monolingues, les analyseurs spécifiques à une langue (tels que |
|
Dédié à l'anglais, il applique le lemmatisation et la suppression des mots vides pour une meilleure correspondance sémantique en anglais |
|
Recommandé pour les contenus exclusivement en anglais plutôt que |
|
Chinois |
|
Utilise actuellement le dictionnaire de chinois simplifié par défaut. |
|
Arabe |
|
Recommandé pour les textes en arabe plutôt que |
|
Thaï |
|
Recommandé pour les textes en thaï plutôt que |
Exemple d'implémentation
Pour utiliser un analyseur intégré, il suffit de spécifier son type dans l'analyzer_params lors de la définition du schéma de votre 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 sur son utilisation, reportez-vous aux sections Recherche en texte intégral, Correspondance de texte ou Correspondance de phrase.
Méthode 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 tokeniseur avec un ensemble de filtres. Cela vous offre un contrôle total sur le pipeline de traitement du texte.
Étape 1 : Sélectionnez le tokeniseur en fonction de la langue
Choisissez votre tokenizer en fonction de la langue principale de votre contenu :
Langues occidentales
Pour les langues utilisant des espaces comme séparateurs, vous disposez des options suivantes :
Tokeniseur |
Fonctionnement |
Idéal pour |
Exemples |
|---|---|---|---|
Divise le texte en fonction des espaces et des signes de ponctuation |
Texte général, ponctuation variée |
|
|
Segmente uniquement en fonction des espaces |
Contenu pré-traité, texte formaté par l'utilisateur |
|
Langues d'Asie de l'Est
Les langues qui n’utilisent pas systématiquement d’espaces entre les mots nécessitent des tokeniseurs spécialisés pour une segmentation correcte des mots :
Chinois
Tokeniseur |
Fonctionnement |
Idéal pour |
Exemples |
|---|---|---|---|
Segmentation basée sur un dictionnaire chinois et un algorithme intelligent |
Recommandé pour les contenus en chinois: combine un dictionnaire et des algorithmes intelligents, spécialement conçus pour le chinois |
|
|
Analyse morphologique pure basée sur un dictionnaire chinois (cc-cedict) |
Par rapport à |
|
Thaï
Pour la plupart des textes en thaï, utilisez l'analyseur intégré thai . N'utilisez le thai seulement lorsque vous devez créer un pipeline d'analyseurs personnalisé.
Tokeniseur |
Fonctionnement |
Idéal pour |
Exemples |
|---|---|---|---|
Segmente le texte thaï en tokens de mots et filtre les segments composés uniquement d’espaces et de signes de ponctuation |
Pipelines d'analyse personnalisés pour les textes en thaï ou mixtes (thaï/anglais) |
|
Japonais et coréen
Langue |
Tokeniseur |
Options du dictionnaire |
Idéal pour |
Exemples |
|---|---|---|---|---|
Japonais |
ipadic (usage général), ipadic-neologd (termes modernes), unidic (académique) |
Analyse morphologique avec prise en charge des noms propres |
|
|
Coréen |
Analyse morphologique du coréen |
|
Langues multilingues ou inconnues
Pour les contenus dont les langues sont imprévisibles ou mélangées au sein d'un même document :
Tokeniseur |
Fonctionnement |
Idéal pour |
Exemples |
|---|---|---|---|
Tokenisation compatible Unicode (International Components for Unicode) |
Écritures mixtes, langues inconnues ou lorsque la tokenisation simple suffit |
|
Quand utiliser icu:
Langues mixtes pour lesquelles l’identification de la langue est impossible.
Vous souhaitez éviter la charge supplémentaire liée aux analyseurs multilingues ou à l'identificateur de langue.
Le contenu comporte une langue principale avec, occasionnellement, des mots étrangers qui n’influent que peu sur le sens global (par exemple, un texte en anglais comportant sporadiquement des noms de marque 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 de détails, reportez-vous aux sections Analyseurs multilingues ou Identificateur de langue.
Étape 2 : Ajouter des filtres pour améliorer la précision
Après avoir sélectionné votre tokeniseur, appliquez des filtres en fonction de vos besoins de recherche spécifiques et des caractéristiques de votre contenu.
Filtres couramment utilisés
Ces filtres sont essentiels pour la plupart des configurations linguistiques séparées par des espaces (anglais, français, allemand, espagnol, etc.) et améliorent considérablement la qualité de la recherche :
Filtre |
Fonctionnement |
Quand l'utiliser |
Exemples |
|---|---|---|---|
Convertir tous les tokens en minuscules |
Universel : s'applique à toutes les langues distinguant les majuscules et les minuscules |
|
|
Réduire les mots à leur forme de base |
Langues avec des déclinaisons (anglais, français, allemand, etc.) |
Pour l'anglais :
|
|
Supprimer les mots courants sans signification |
La plupart des langues – particulièrement efficace pour les langues où les mots sont séparés par des espaces |
|
Pour les langues d'Asie de l'Est (chinois, japonais, coréen, etc.), privilégiez plutôt des filtres spécifiques à ces langues. Ces langues utilisent généralement des approches différentes pour le traitement du texte et ne tirent pas forcément un grand bénéfice de la réduction lexicale.
Filtres de normalisation du texte
Ces filtres uniformisent les variations du texte afin d'améliorer la cohérence des correspondances :
Filtre |
Fonctionnement |
Quand l'utiliser |
Exemples |
|---|---|---|---|
Convertir les caractères accentués en leurs équivalents ASCII |
Contenu international, contenu généré par les utilisateurs |
|
Filtrage des tokens
Contrôler quels tokens sont conservés en fonction du contenu ou de la longueur des caractères :
Filtrer |
Fonctionnement |
Quand l'utiliser |
Exemples |
|---|---|---|---|
Supprimer les tokens de ponctuation isolés |
Nettoyer le résultat des tokeniseurs |
|
|
Ne conserver que les lettres et les chiffres |
Contenu technique, traitement du texte épuré |
|
|
Supprimer les tokens ne respectant pas la plage de longueur spécifiée |
Filtrer le bruit (tokens trop longs) |
|
|
Filtrage personnalisé basé sur des modèles |
Exigences spécifiques au domaine concernant les tokens |
|
Filtres spécifiques à une langue
Ces filtres prennent en charge les caractéristiques spécifiques à chaque langage :
Filtre |
Langue |
Fonctionnement |
Exemples |
|---|---|---|---|
Allemand |
Divise les mots composés en éléments pouvant faire l'objet d'une recherche |
|
|
Chinois |
Conserve les caractères chinois et les caractères alphanumériques |
|
|
Chinois |
Conserve uniquement les caractères chinois |
|
|
Chinois |
Génère des formes de tokens en pinyin pour les tokens chinois |
|
Étape 3 : Combiner et implémenter
Pour créer votre analyseur personnalisé, vous devez définir le tokenizer et une liste de filtres dans le dictionnaire « analyzer_params ». Les filtres sont appliqués dans l'ordre dans lequel ils sont répertoriés.
# 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,
)
Étape finale : test avec run_analyzer
Vérifiez 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-tokenisation: les termes techniques sont incorrectement segmentés
Sous-tokenisation: les expressions ne sont pas séparées correctement
Token manquants: des termes importants sont filtrés
Pour une utilisation détaillée, consultez run_analyzer.
Configurations recommandées par cas d'utilisation
Cette section présente les configurations recommandées pour les tokeniseurs et les filtres dans le cadre des cas d’utilisation courants avec les analyseurs de Milvus. Choisissez la combinaison la mieux adaptée à votre type de contenu et à vos besoins en matière 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 comportant des accents (français, espagnol, allemand, etc.)
Utilisez un tokenizer « standard » avec conversion en minuscules, lemmatisation spécifique à la langue et 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 intégré english :
analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "english"
},
{
"type": "stop",
"stop_words": ["_english_"]
}
]
}
# Equivalent built-in shortcut:
analyzer_params = {
"type": "english"
}
Contenu en 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 empêche la ponctuation d’affecter la qualité de la recherche.
Si les utilisateurs sont susceptibles d’effectuer des recherches sur du texte chinois en saisissant du pinyin, utilisez un analyseur personnalisé avec le tokeniseur « jieba » et le pinyin filtre au lieu de l’analyseur « chinese » intégré.
analyzer_params = {
"tokenizer": "jieba",
"filter": ["pinyin"]
}
Contenu japonais
Utilisez le tokeniseur « lindera » avec le dictionnaire japonais et des filtres pour nettoyer la ponctuation et contrôler la longueur des tokens :
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
Comme pour le japonais, utilisez le tokenizer « lindera » avec le 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 avec du contenu couvrant plusieurs langues ou utilisant des scripts de manière imprévisible, commencez par utiliser l’analyseur icu. Cet analyseur compatible Unicode gère efficacement les scripts et symboles mixtes.
Configuration multilingue de base (sans lemmatisation):
analyzer_params = {
"tokenizer": "icu",
"filter": ["lowercase", "asciifolding"]
}
Traitement multilingue avancé:
Pour un meilleur contrôle du comportement des tokens dans différentes langues :
Utilisez une configuration d’analyseur multilingue. Pour plus de détails, consultez la section Analyseurs multilingues.
Implémentez un identifiant de langue sur votre contenu. Pour plus de détails, consultez la section « Identifiant de langue ».
Intégration aux fonctionnalités de recherche de texte
Après avoir sélectionné votre analyseur, vous pouvez l'intégrer aux fonctionnalités de recherche de texte fournies par Milvus.
Recherche en texte intégral
Les analyseurs ont un impact direct sur la recherche en texte intégral basée sur l’algorithme BM25 grâce à la génération de vecteurs clairsemés. Utilisez le même analyseur pour l’indexation et les requêtes afin de garantir une tokenisation 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, consultez la section « Recherche en texte intégral ».
Correspondance de texte
Les opérations de correspondance de texte effectuent une correspondance exacte des tokens entre les requêtes et le contenu indexé, en fonction du résultat de votre analyseur. Pour plus de détails sur la mise en œuvre, consultez la section « Correspondance de texte ».
Correspondance de phrases
La correspondance de phrases nécessite une tokenisation cohérente des expressions composées de plusieurs mots afin de préserver les limites et le sens des phrases. Pour plus de détails sur la mise en œuvre, consultez la section « Correspondance de phrases ».