Identificateur de langueCompatible with Milvus v2.5.15+

Le site language_identifier est un tokenizer spécialisé conçu pour améliorer les capacités de recherche de texte de Milvus en automatisant le processus d'analyse linguistique. Sa fonction principale est de détecter la langue d'un champ de texte, puis d'appliquer dynamiquement un analyseur préconfiguré qui convient le mieux à cette langue. Cette fonction est particulièrement précieuse pour les applications qui traitent une grande variété de langues, car elle élimine la nécessité d'une affectation manuelle de la langue pour chaque entrée.

En acheminant intelligemment les données textuelles vers le pipeline de traitement approprié, le site language_identifier rationalise l'ingestion de données multilingues et garantit une tokenisation précise pour les opérations de recherche et d'extraction ultérieures.

Flux de travail pour la détection des langues

Le site language_identifier exécute une série d'étapes pour traiter une chaîne de texte, un flux de travail qui est essentiel pour que les utilisateurs comprennent comment le configurer correctement.

Language Detection Workflow Flux de travail de la détection de la langue

  1. Entrée : Le flux de travail commence par une chaîne de texte en entrée.

  2. Détection de la langue : Cette chaîne est d'abord transmise à un moteur de détection de la langue, qui tente d'identifier la langue. Milvus prend en charge deux moteurs : whatlang et lingua.

  3. Sélection de l'analyseur :

    • Succès : Si la langue est détectée avec succès, le système vérifie si le nom de la langue détectée a un analyseur correspondant configuré dans votre dictionnaire analyzers. Si une correspondance est trouvée, le système applique l'analyseur spécifié au texte d'entrée. Par exemple, un texte détecté en "mandarin" sera acheminé vers un tokenizer jieba.

    • Repli : Si la détection échoue, ou si une langue est détectée avec succès mais que vous n'avez pas fourni d'analyseur spécifique, le système utilise un analyseur par défaut préconfiguré. Il s'agit là d'un point de clarification crucial : l'analyseur default est une solution de repli à la fois en cas d'échec de la détection et en l'absence d'analyseur correspondant.

Une fois que l'analyseur approprié a été choisi, le texte est transformé en jetons et traité, ce qui complète le flux de travail.

Moteurs de détection linguistique disponibles

Milvus offre le choix entre deux moteurs de détection de la langue :

Le choix dépend des exigences spécifiques de performance et de précision de votre application.

Moteur

Vitesse

Précision

Format de sortie

Meilleur pour

whatlang

Rapide

Bon pour la plupart des langues

Noms de langues (par exemple, "English", "Mandarin", "Japanese")

Référence : Colonne "Langue" dans le tableau des langues prises en charge

Applications en temps réel où la vitesse est essentielle

lingua

Plus lent

Plus grande précision, en particulier pour les textes courts

Noms en anglais (par exemple, "English", "Chinese", "Japanese")

Référence : Liste des langues prises en charge

Applications pour lesquelles la précision est plus importante que la vitesse

La convention de dénomination du moteur est un élément essentiel à prendre en considération. Bien que les deux moteurs renvoient des noms de langue en anglais, ils utilisent des termes différents pour certaines langues (par exemple, whatlang renvoie à Mandarin, tandis que lingua renvoie à Chinese). La clé de l'analyseur doit correspondre exactement au nom renvoyé par le moteur de détection choisi.

Configuration

Pour utiliser correctement le tokenizer language_identifier, les étapes suivantes doivent être suivies pour définir et appliquer sa configuration.

Étape 1 : Choisissez vos langues et vos analyseurs

L'essentiel de la configuration de language_identifier consiste à adapter vos analyseurs aux langues spécifiques que vous envisagez de prendre en charge. Le système fonctionne en associant la langue détectée à l'analyseur approprié, cette étape est donc cruciale pour un traitement précis du texte.

Vous trouverez ci-dessous une correspondance recommandée entre les langues et les analyseurs Milvus appropriés. Ce tableau sert de passerelle entre la sortie du moteur de détection de la langue et l'outil le mieux adapté.

Langue (sortie du détecteur)

Analyseur recommandé

Description de la langue

English

type: english

Tokenisation de l'anglais standard avec stemming et filtrage des mots vides.

Mandarin (via whatlang) ou Chinese (via lingua)

tokenizer: jieba

Segmentation des mots chinois pour les textes non délimités par l'espace.

Japanese

tokenizer: icu

Un tokenizer robuste pour les écritures complexes, y compris le japonais.

French

type: standard, filter: ["lowercase", "asciifolding"]

Une configuration personnalisée qui gère les accents et les caractères français.

  • La correspondance est essentielle : Le nom de votre analyseur doit correspondre exactement à la langue de sortie du moteur de détection. Par exemple, si vous utilisez whatlang, la clé pour le texte chinois doit être Mandarin.

  • Meilleures pratiques : Le tableau ci-dessus fournit des configurations recommandées pour quelques langues courantes, mais il ne s'agit pas d'une liste exhaustive. Pour un guide plus complet sur le choix des analyseurs, reportez-vous à la section Choisir le bon analyseur pour votre cas d'utilisation.

  • Sortie du détecteur: Pour une liste complète des noms de langues renvoyés par les moteurs de détection, reportez-vous au tableau des langues prises en charge par Whatlang et à la liste des langues prises en charge par Lingua.

Etape 2 : Définir les paramètres de l'analyseur

Pour utiliser le tokenizer language_identifier dans Milvus, créez un dictionnaire contenant ces composants clés :

Composants requis :

  • analyzers config set - Un dictionnaire contenant toutes les configurations de l'analyseur, qui doit inclure :

    • default - L'analyseur de secours utilisé lorsque la détection de la langue échoue ou qu'aucun analyseur correspondant n'est trouvé.

    • Analyseurs spécifiques à une langue - Chacun est défini comme <analyzer_name>: <analyzer_config>, où :

      • analyzer_name correspond à la sortie du moteur de détection que vous avez choisi (par exemple, "English", "Japanese")

      • analyzer_config suit le format standard des paramètres de l'analyseur (voir Vue d'ensemble de l'analyseur)

Composants facultatifs :

  • identifier - Spécifie le moteur de détection de la langue à utiliser (whatlang ou lingua). La valeur par défaut est whatlang si elle n'est pas spécifiée

  • mapping - Crée des alias personnalisés pour vos analyseurs, ce qui vous permet d'utiliser des noms descriptifs au lieu du format de sortie exact du moteur de détection.

Le tokenizer fonctionne en détectant d'abord la langue du texte d'entrée, puis en sélectionnant l'analyseur approprié à partir de votre configuration. Si la détection échoue ou s'il n'existe pas d'analyseur correspondant, il se rabat automatiquement sur votre analyseur default.

Les noms de vos analyseurs doivent correspondre exactement aux résultats du moteur de détection de la langue que vous avez choisi. Cette approche est plus simple et évite toute confusion potentielle.

Pour whatlang et lingua, utilisez les noms de langues tels qu'ils sont indiqués dans leurs documentations respectives :

analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",  # Must be `language_identifier`
        "identifier": "whatlang",  # or `lingua`
        "analyzers": {  # A set of analyzer configs
            "default": {
                "tokenizer": "standard"  # fallback if language detection fails
            },
            "English": {  # Analyzer name that matches whatlang output
                "type": "english"
            },
            "Mandarin": {  # Analyzer name that matches whatlang output
                "tokenizer": "jieba"
            }
        }
    }
}

Autre approche : Noms personnalisés avec correspondance

Si vous préférez utiliser des noms d'analyseurs personnalisés ou si vous devez maintenir la compatibilité avec des configurations existantes, vous pouvez utiliser le paramètre mapping. Celui-ci crée des alias pour vos analyseurs : les noms originaux du moteur de détection et vos noms personnalisés fonctionneront tous les deux.

analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "lingua",
        "analyzers": {
            "default": {
                "tokenizer": "standard"
            },
            "english_analyzer": {  # Custom analyzer name
                "type": "english"
            },
            "chinese_analyzer": {  # Custom analyzer name
                "tokenizer": "jieba"
            }
        },
        "mapping": {
            "English": "english_analyzer",   # Maps detection output to custom name
            "Chinese": "chinese_analyzer"
        }
    }
}

Après avoir défini analyzer_params, vous pouvez les appliquer à un champ VARCHAR lors de la définition d'un schéma de collecte. Cela permet à Milvus de traiter le texte de ce champ à l'aide de l'analyseur spécifié pour une tokenisation et un filtrage efficaces. Pour plus de détails, voir Exemple d'utilisation.

Exemples de configuration

Voici quelques configurations prêtes à l'emploi pour des scénarios courants. Chaque exemple comprend à la fois la configuration et le code de vérification afin que vous puissiez tester la configuration immédiatement.

Détection de l'anglais et du chinois

from pymilvus import MilvusClient

# Configuration
analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "whatlang",
        "analyzers": {
            "default": {"tokenizer": "standard"},
            "English": {"type": "english"},
            "Mandarin": {"tokenizer": "jieba"}
        }
    }
}

# Test the configuration
client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

# English text
result_en = client.run_analyzer("The Milvus vector database is built for scale!", analyzer_params)
print("English:", result_en)
# Output: 
# English: ['The', 'Milvus', 'vector', 'database', 'is', 'built', 'for', 'scale']

# Chinese text  
result_cn = client.run_analyzer("Milvus向量数据库专为大规模应用而设计", analyzer_params)
print("Chinese:", result_cn)
# Output: 
# Chinese: ['Milvus', '向量', '数据', '据库', '数据库', '专', '为', '大规', '规模', '大规模', '应用', '而', '设计']

Langues européennes avec normalisation des accents

# Configuration for French, German, Spanish, etc.
analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "lingua", 
        "analyzers": {
            "default": {"tokenizer": "standard"},
            "English": {"type": "english"},
            "French": {
                "tokenizer": "standard",
                "filter": ["lowercase", "asciifolding"]
            }
        }
    }
}

# Test with accented text
result_fr = client.run_analyzer("Café français très délicieux", analyzer_params)
print("French:", result_fr)
# Output: 
# French: ['cafe', 'francais', 'tres', 'delicieux']

Notes d'utilisation

  • Une seule langue par champ : Ce système fonctionne sur un champ en tant qu'unité de texte unique et homogène. Il est conçu pour traiter différentes langues dans différents enregistrements de données, par exemple un enregistrement contenant une phrase en anglais et le suivant contenant une phrase en français.

  • Pas de chaînes de langues mixtes : Il n'est pas conçu pour traiter une chaîne unique contenant du texte dans plusieurs langues. Par exemple, un champ VARCHAR contenant à la fois une phrase anglaise et une phrase japonaise entre guillemets sera traité comme une langue unique.

  • Traitement de la langue dominante : Dans les scénarios de langues mixtes, le moteur de détection identifiera probablement la langue dominante et l'analyseur correspondant sera appliqué à l'ensemble du texte. Il en résultera une tokenisation médiocre ou inexistante pour le texte étranger incorporé.