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 :

Analyzer Workflow Flux de travail de l'analyseur

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

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

  • "user_id"['user', 'id']

  • "C++"['c']

standard analyseur

Utiliser un whitespace tokenizer ; combiner avec un alphanumonly filtre.

Sous-tokénisation

La recherche d'un composant d'une phrase de plusieurs mots ne renvoie pas les documents contenant la phrase complète.

"state-of-the-art"['state-of-the-art']

Analyseur avec un whitespace tokenizer

Utiliser un standard pour séparer la ponctuation et les espaces ; utilisez un filtre regex personnalisé.

Non-concordance des langues

Les résultats de la recherche pour une langue spécifique sont absurdes ou inexistants.

Texte chinois : "机器学习"['机器学习'] (un jeton)

english analyseur

Utilisez un analyseur spécifique à la langue, tel que chinese.

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 chinese intégré.

Documentation technique

❌ Non

La ponctuation est supprimée des termes tels que C++.

Créer un analyseur personnalisé avec un whitespace et un filtre alphanumonly filtre.

Langues séparées par des espaces comme le texte français/espagnol

⚠️ Peut-être

Les caractères accentués (café vs. cafe) peuvent ne pas correspondre.

Pour obtenir de meilleurs résultats, il est recommandé d'utiliser un analyseur personnalisé doté de la fonction asciifolding est recommandé pour obtenir de meilleurs résultats.

Langues multilingues ou inconnues

❌ Non

L'analyseur standard ne dispose pas de la logique spécifique à la langue nécessaire pour gérer les différents jeux de caractères et les règles de symbolisation.

Utilisez un analyseur personnalisé avec le icu pour une tokénisation sensible à l'unicode.

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

standard

La plupart des langues séparées par des espaces (anglais, français, allemand, espagnol, etc.)

  • Tokenizer : standard

  • Filtres : lowercase

Analyseur général pour le traitement initial du texte. Pour les scénarios monolingues, les analyseurs spécifiques à une langue (comme english) offrent de meilleures performances.

english

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.

  • Tokéniseur : standard

  • Filtres : lowercase, stemmer, stop

Recommandé pour les contenus en anglais uniquement par rapport à standard.

chinese

Chinois

  • Tokenizer : jieba

  • Filtres : cnalphanumonly

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,
)

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

standard

Divise le texte en fonction des espaces et des signes de ponctuation

Texte général, ponctuation mixte

  • Entrée : "Hello, world! Visit example.com"

  • Sortie : ['Hello', 'world', 'Visit', 'example', 'com']

whitespace

Fractionne uniquement sur les caractères d'espacement

Contenu prétraité, texte formaté par l'utilisateur

  • Entrée : "user_id = get_user_data()"

  • Sortie : ['user_id', '=', 'get_user_data()']

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

jieba

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.

  • Entrée : "机器学习是人工智能的一个分支"

  • Sortie : ['机器', '学习', '是', '人工', '智能', '人工智能', '的', '一个', '分支']

lindera

Analyse morphologique basée sur un dictionnaire pur avec dictionnaire chinois(cc-cedict)

Par rapport à jieba, traite le texte chinois de manière plus générique.

  • Entrée : "机器学习算法"

  • Sortie : ["机器", "学习", "算法"]

Japonais et coréen

Langue

Tokenizer

Options du dictionnaire

Meilleur pour

Exemples

Japonais

lindera

ipadic (usage général), ipadic-neologd (termes modernes), unidic (académique)

Analyse morphologique avec traitement des noms propres

  • Entrée : "東京都渋谷区"

  • Sortie : ["東京", "都", "渋谷", "区"]

Coréen

lindera

ko-dic

Analyse morphologique du coréen

  • Entrée : "안녕하세요"

  • Sortie : ["안녕", "하", "세요"]

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

icu

Tokénisation compatible avec Unicode (Composants internationaux pour Unicode)

Ecritures mixtes, langues inconnues, ou lorsque la tokénisation simple est suffisante

  • Entrée : "Hello 世界 مرحبا"

  • Sortie : ['Hello', ' ', '世界', ' ', 'مرحبا']

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

lowercase

Convertir tous les tokens en minuscules

Universel - s'applique à toutes les langues avec des distinctions de casse

  • Entrée : ["Apple", "iPhone"]

  • Sortie : [['apple'], ['iphone']]

stemmer

Réduire les mots à leur forme racine

Langues avec flexions de mots (anglais, français, allemand, etc.)

Pour l'anglais :

  • Entrée : ["running", "runs", "ran"]

  • Sortie : [['run'], ['run'], ['ran']]

stop

Supprimer les mots courants sans signification

La plupart des langues - particulièrement efficace pour les langues séparées par des espaces

  • Entrée : ["the", "quick", "brown", "fox"]

  • Sortie : [[], ['quick'], ['brown'], ['fox']]

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

asciifolding

Convertir les caractères accentués en équivalents ASCII

Contenu international, contenu généré par l'utilisateur

  • Entrée : ["café", "naïve", "résumé"]

  • Sortie : [['cafe'], ['naive'], ['resume']]

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

removepunct

Supprimer les jetons de ponctuation autonomes

Nettoyer la sortie des tokenizers jieba, lindera, icu, qui renvoient les ponctuations sous forme de jetons uniques.

  • Entrée : ["Hello", "!", "world"]

  • Sortie : [['Hello'], ['world']]

alphanumonly

Ne garder que les lettres et les chiffres

Contenu technique, traitement de texte propre

  • Entrée : ["user123", "test@email.com"]

  • Sortie : [['user123'], ['test', 'email', 'com']]

length

Suppression des mots-clés en dehors de la plage de longueur spécifiée

Filtrer le bruit (mots trop longs)

  • Entrée : ["a", "very", "extraordinarily"]

  • Sortie : [['a'], ['very'], []] (si max=10)

regex

Filtrage personnalisé basé sur des motifs

Exigences en matière de jetons spécifiques à un domaine

  • Entrée : ["test123", "prod456"]

  • Sortie : (si expr="^prod") [[], ['prod456']] (si expr="^prod")

Filtres spécifiques à une langue

Ces filtres gèrent des caractéristiques linguistiques spécifiques :

Filtre

Langue

Fonctionnement

Exemples de filtres

decompounder

Allemand

Divise les mots composés en composants consultables

  • Entrée : ["dampfschifffahrt"]

  • Sortie : [['dampf', 'schiff', 'fahrt']]

cnalphanumonly

Chinois

Conserve les caractères chinois + alphanumériques

  • Entrée : ["Hello", "世界", "123", "!@#"]

  • Sortie : [['Hello'], ['世界'], ['123'], []]

cncharonly

Chinois

Conserve uniquement les caractères chinois

  • Entrée : ["Hello", "世界", "123"]

  • Sortie : [[], ['世界'], []]

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

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.