Synonym

Der Filter synonym schreibt Token entsprechend einem Synonymwörterbuch um, so dass verwandte Begriffe bei der Suche übereinstimmen. Er unterstützt zwei Betriebsarten und zwei Arten der Bereitstellung des Wörterbuchs:

  • Betriebsarten - im Modus expand wird das ursprüngliche Token beibehalten und es werden zusätzliche Synonyme daneben ausgegeben; im Normalisierungsmodus (expand: false) werden Token in eine kanonische Form umgeschrieben.

  • Wörterbuchquellen - kleine Wörterbücher können über das Array synonyms in die Filterkonfiguration eingefügt werden; große Wörterbücher sollten als Dateiressource gespeichert und über synonyms_file referenziert werden.

Format des Wörterbuchs

Ein Synonymwörterbuch ist ein Klartextdokument (oder ein Inline-Array), in dem jede Zeile eine Regel definiert. Es werden zwei Regelformen unterstützt.

Mapping-Regel

fast, quick => speedy

Die Token auf der linken Seite (fast, quick) werden auf die Token auf der rechten Seite (speedy) umgeschrieben. Mehrere Ziele sind erlaubt:

small, little => tiny, compact

Bei expand: true werden die ursprünglichen Zeichen neben den Zielen beibehalten:

  • Eingabe fast mit expand: truefast, speedy

  • Eingabe fast mit expand: falsespeedy

Äquivalenzgruppe

happy, joyful, cheerful

Alle aufgeführten Zeichen werden als gleichwertig betrachtet:

  • Mit expand: true gibt jedes Vorkommen eines beliebigen Tokens in der Gruppe jedes Token in der Gruppe aus. Eingabe happyhappy, joyful, cheerful.

  • Mit expand: false wird jedes Vorkommen auf das erste Token in der Gruppe umgeschrieben. Eingabe joyfulhappy; die Eingabe happy ist bereits das erste Token und bleibt unverändert.

Konfiguration

Der Filter synonym ist ein benutzerdefinierter Filter. Geben Sie "type": "synonym" zusammen mit mindestens einem von synonyms (inline) oder synonyms_file (extern) sowie einem expand Flag an.

analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        {
            "type": "synonym",
            "synonyms": [                       # inline rules (optional)
                "fast, quick => speedy",
                "happy, joyful, cheerful",
            ],
            "synonyms_file": {                  # external rules (optional)
                "type": "remote",
                "resource_name": "en_synonyms",
                "file_name": "synonyms.txt",
            },
            "expand": True,
        }
    ],
}

Der Filter synonym akzeptiert die folgenden Parameter.

Parameter

Beschreibung

Voreinstellung

synonyms

Ein Inline-Array von Regelzeichenketten. Jede Zeichenkette verwendet das oben beschriebene Wörterbuchformat. Geeignet für kleine Wörterbücher (bis zu ein paar Dutzend Regeln).

-

synonyms_file

Ein Verweis auf eine Dateiressource, die Synonymregeln speichert, eine pro Zeile. Für größere Wörterbücher zu verwenden. Siehe Externe Wörterbuchdatei unten.

-

expand

Ein boolesches Flag, das steuert, wie die Regeln angewendet werden. true bewahrt das ursprüngliche Token und gibt daneben Synonyme aus; false schreibt Token in ihre kanonische Form um (die rechte Seite einer Abbildung oder das erste Token einer Äquivalenzgruppe).

false

Sie können synonyms, synonyms_file, oder beides angeben. Wenn beides vorhanden ist, führt der Filter die beiden Quellen zusammen. Der Filter arbeitet mit Token, die vom Tokenizer erzeugt werden; er muss daher mit einem Tokenizer wie dem Standard-Tokenizer kombiniert werden.

Externe Wörterbuchdatei

Für Wörterbücher in Produktionsgröße registrieren Sie die Datei als externe Dateiressource und referenzieren sie von synonyms_file aus.

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

# Register the file once, then reference it from any analyzer that needs it.
client.add_file_resource(
    name="en_synonyms",
    path="file/synonyms.txt",     # full S3 object key, including rootPath
)

analyzer_params = {
    "tokenizer": "standard",
    "filter": [{
        "type": "synonym",
        "synonyms_file": {
            "type": "remote",
            "resource_name": "en_synonyms",
            "file_name": "synonyms.txt",
        },
        "expand": True,
    }],
}

Unter Dateiressourcen verwalten finden Sie den vollständigen Arbeitsablauf (Hochladen, Registrieren, Auflisten, Entfernen) und das alternative Formular "type": "local".

Beispiele

Bevor Sie den Analyzer auf ein Auflistungsschema anwenden, überprüfen Sie sein Verhalten mit run_analyzer. Die folgenden Beispiele verwenden der Kürze halber das Inline-Array synonyms; für größere Wörterbücher ersetzen Sie es durch synonyms_file.

expand: true - das Original beibehalten, Synonyme hinzufügen

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

analyzer_params = {
    "tokenizer": "standard",
    "filter": [{
        "type": "synonym",
        "synonyms": [
            "fast, quick => speedy",
            "happy, joyful, cheerful",
        ],
        "expand": True,
    }],
}

print(client.run_analyzer(["a fast car"], analyzer_params))
# → [['a', 'fast', 'speedy', 'car']]

print(client.run_analyzer(["i am happy today"], analyzer_params))
# → [['i', 'am', 'happy', 'joyful', 'cheerful', 'today']]

Sowohl fast als auch happy werden beibehalten; ihre Synonyme werden daneben ausgegeben.

expand: false - Umschreiben in kanonische Form

analyzer_params_norm = {
    "tokenizer": "standard",
    "filter": [{
        "type": "synonym",
        "synonyms": [
            "fast, quick => speedy",
            "happy, joyful, cheerful",
        ],
        "expand": False,
    }],
}

print(client.run_analyzer(["a fast car"], analyzer_params_norm))
# → [['a', 'speedy', 'car']]

print(client.run_analyzer(["i am happy today"], analyzer_params_norm))
# → [['i', 'am', 'happy', 'today']]

Die Zuordnungsregel schreibt fast in speedy um. Die Äquivalenzgruppe lässt happy unverändert, da es das erste Token der Gruppe ist; eine Eingabe, die joyful oder cheerful enthält, wäre in happy umgeschrieben worden.