SprachidentifikatorCompatible with Milvus v2.5.15+

language_identifier ist ein spezieller Tokenizer, der die Textsuchfunktionen von Milvus durch die Automatisierung des Sprachanalyseprozesses verbessert. Seine Hauptfunktion besteht darin, die Sprache eines Textfeldes zu erkennen und dann dynamisch einen vorkonfigurierten Analysator anzuwenden, der für diese Sprache am besten geeignet ist. Dies ist besonders wertvoll für Anwendungen, die eine Vielzahl von Sprachen verarbeiten, da die manuelle Sprachzuweisung für jede einzelne Eingabe entfällt.

Durch die intelligente Weiterleitung von Textdaten an die entsprechende Verarbeitungspipeline rationalisiert language_identifier die Aufnahme mehrsprachiger Daten und gewährleistet eine genaue Tokenisierung für nachfolgende Such- und Abrufvorgänge.

Arbeitsablauf der Spracherkennung

language_identifier führt eine Reihe von Schritten durch, um einen Textstring zu verarbeiten. Dieser Arbeitsablauf ist für die Benutzer entscheidend, um zu verstehen, wie er richtig konfiguriert wird.

Language Detection Workflow Spracherkennungs-Workflow

  1. Eingabe: Der Arbeitsablauf beginnt mit einer Textzeichenfolge als Eingabe.

  2. Erkennung der Sprache: Diese Zeichenkette wird zunächst an eine Spracherkennungsmaschine weitergeleitet, die versucht, die Sprache zu identifizieren. Milvus unterstützt zwei Engines: whatlang und lingua.

  3. Auswahl des Analyzers:

    • Erfolg: Wenn die Sprache erfolgreich erkannt wurde, prüft das System, ob für den erkannten Sprachnamen ein entsprechender Analyzer in Ihrem analyzers Wörterbuch konfiguriert ist. Wenn eine Übereinstimmung gefunden wird, wendet das System den angegebenen Analyzer auf den Eingabetext an. Zum Beispiel würde ein erkannter "Mandarin"-Text an einen jieba Tokenizer weitergeleitet werden.

    • Fallback: Wenn die Erkennung fehlschlägt oder wenn eine Sprache erfolgreich erkannt wurde, Sie aber kein spezifisches Analyseprogramm dafür angegeben haben, verwendet das System standardmäßig ein vorkonfiguriertes Standard-Analyseprogramm. Dies ist ein wichtiger Punkt zur Klarstellung; das Analysegerät default ist ein Fallback sowohl für den Fall, dass die Erkennung fehlschlägt als auch für den Fall, dass kein passendes Analysegerät vorhanden ist.

Nachdem das passende Analyseprogramm ausgewählt wurde, wird der Text tokenisiert und verarbeitet, womit der Arbeitsablauf abgeschlossen ist.

Verfügbare Spracherkennungsprogramme

Milvus bietet die Wahl zwischen zwei Spracherkennungsprogrammen:

Die Auswahl hängt von den spezifischen Leistungs- und Genauigkeitsanforderungen Ihrer Anwendung ab.

Motor

Geschwindigkeit

Genauigkeit

Ausgabeformat

Am besten für

whatlang

Schnell

Gut für die meisten Sprachen

Sprachennamen (z. B. "English", "Mandarin", "Japanese")

Referenz: Spalte Sprache in der Tabelle der unterstützten Sprachen

Echtzeitanwendungen, bei denen es auf Geschwindigkeit ankommt

lingua

Langsamer

Höhere Präzision, insbesondere bei kurzen Texten

Namen in englischer Sprache (z. B. "English", "Chinese", "Japanese")

Referenz: Liste der unterstützten Sprachen

Anwendungen, bei denen die Genauigkeit wichtiger ist als die Geschwindigkeit

Ein wichtiger Aspekt ist die Namenskonvention der Suchmaschine. Beide Suchmaschinen liefern zwar englische Sprachnamen, verwenden aber für einige Sprachen unterschiedliche Begriffe (z. B. whatlang liefert Mandarin, während lingua Chinese liefert). Der Schlüssel des Analysators muss genau mit dem Namen übereinstimmen, der von der gewählten Erkennungsmaschine zurückgegeben wird.

Konfiguration

Um den language_identifier Tokenizer korrekt zu verwenden, müssen die folgenden Schritte durchgeführt werden, um seine Konfiguration zu definieren und anzuwenden.

Schritt 1: Wählen Sie Ihre Sprachen und Analysatoren

Das Kernstück der Einrichtung von language_identifier ist die Anpassung der Analysatoren an die spezifischen Sprachen, die Sie unterstützen wollen. Das System arbeitet, indem es die erkannte Sprache mit dem richtigen Analysator abgleicht, daher ist dieser Schritt entscheidend für eine genaue Textverarbeitung.

Im Folgenden finden Sie eine empfohlene Zuordnung von Sprachen zu geeigneten Milvus-Analysatoren. Diese Tabelle dient als Brücke zwischen der Ausgabe der Spracherkennungsmaschine und dem besten Werkzeug für die Aufgabe.

Sprache (Detektorausgabe)

Empfohlener Analyzer

Beschreibung

English

type: english

Standard-Englisch-Tokenisierung mit Stemming und Stoppwort-Filterung.

Mandarin (über whatlang) oder Chinese (über lingua)

tokenizer: jieba

Chinesische Wortsegmentierung für nicht durch Leerzeichen getrennten Text.

Japanese

tokenizer: icu

Ein robuster Tokenisierer für komplexe Skripte, einschließlich Japanisch.

French

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

Eine benutzerdefinierte Konfiguration, die französische Akzente und Zeichen verarbeitet.

Schritt 2: Definieren Sie analyzer_params

Um den language_identifier Tokenizer in Milvus zu verwenden, erstellen Sie ein Wörterbuch mit diesen Schlüsselkomponenten:

Erforderliche Komponenten:

  • analyzers config set - Ein Wörterbuch, das alle Analyzer-Konfigurationen enthält, die enthalten müssen:

    • default - Den Fallback-Analyzer, der verwendet wird, wenn die Spracherkennung fehlschlägt oder kein passender Analyzer gefunden wird

    • Sprachspezifische Analyzer - Jeder definiert als <analyzer_name>: <analyzer_config>, wobei:

      • analyzer_name mit der Ausgabe der gewählten Erkennungsmaschine übereinstimmt (z. B. "English", "Japanese")

      • analyzer_config dem Standard-Analyzer-Parameterformat folgt (siehe Analyzer-Übersicht)

Optionale Komponenten:

  • identifier - Gibt an, welches Spracherkennungsmodul verwendet werden soll (whatlang oder lingua). Standardmäßig wird whatlang verwendet, wenn nichts angegeben wird.

  • mapping - Erstellt benutzerdefinierte Aliase für Ihre Analyzer, die es Ihnen ermöglichen, beschreibende Namen anstelle des genauen Ausgabeformats der Erkennungsmaschine zu verwenden

Der Tokenizer erkennt zunächst die Sprache des Eingabetextes und wählt dann das entsprechende Analyseprogramm aus Ihrer Konfiguration aus. Wenn die Erkennung fehlschlägt oder kein passender Analyzer vorhanden ist, wird automatisch auf Ihren default Analyzer zurückgegriffen.

Die Namen Ihrer Analysatoren sollten genau mit der Ausgabe des von Ihnen gewählten Spracherkennungsprogramms übereinstimmen. Dieser Ansatz ist einfacher und vermeidet mögliche Verwechslungen.

Verwenden Sie sowohl für whatlang als auch für lingua die Sprachnamen, wie sie in der jeweiligen Dokumentation angegeben sind:

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"
            }
        }
    }
}

Alternative Vorgehensweise: Benutzerdefinierte Namen mit Mapping

Wenn Sie es vorziehen, benutzerdefinierte Analyzernamen zu verwenden oder die Kompatibilität mit bestehenden Konfigurationen aufrechtzuerhalten, können Sie den Parameter mapping verwenden. Dadurch werden Aliase für Ihre Analysatoren erstellt - sowohl die ursprünglichen Namen der Erkennungsmaschine als auch Ihre benutzerdefinierten Namen werden funktionieren.

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"
        }
    }
}

Nachdem Sie analyzer_params definiert haben, können Sie sie bei der Definition eines Sammelschemas auf ein VARCHAR Feld anwenden. Dadurch kann Milvus den Text in diesem Feld unter Verwendung des angegebenen Analysators für eine effiziente Tokenisierung und Filterung verarbeiten. Weitere Einzelheiten finden Sie unter Verwendung von Beispielen.

Beispiele

Hier finden Sie einige gebrauchsfertige Konfigurationen für gängige Szenarien. Jedes Beispiel enthält sowohl die Konfiguration als auch den Verifizierungscode, damit Sie die Einrichtung sofort testen können.

Erkennung von Englisch und Chinesisch

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', '向量', '数据', '据库', '数据库', '专', '为', '大规', '规模', '大规模', '应用', '而', '设计']

Europäische Sprachen mit Akzentnormalisierung

# 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']

Hinweise zur Verwendung

  • Eine Sprache pro Feld: Ein Feld wird als eine einzige, homogene Texteinheit betrachtet. Sie ist so konzipiert, dass sie verschiedene Sprachen in verschiedenen Datensätzen verarbeiten kann, z. B. wenn ein Datensatz einen englischen Satz und der nächste einen französischen Satz enthält.

  • Keine gemischtsprachigen Strings: Es ist nicht dafür ausgelegt, eine einzelne Zeichenfolge zu verarbeiten, die Text in mehreren Sprachen enthält. So wird beispielsweise ein einzelnes Feld VARCHAR, das sowohl einen englischen Satz als auch eine japanische Phrase in Anführungszeichen enthält, als eine einzige Sprache verarbeitet.

  • Verarbeitung der dominanten Sprache: In gemischtsprachigen Szenarien wird die Erkennungsmaschine wahrscheinlich die dominante Sprache identifizieren, und der entsprechende Analysator wird auf den gesamten Text angewendet. Dies führt dazu, dass der eingebettete Fremdtext nur unzureichend oder gar nicht tokenisiert wird.