Sinonimo

Il filtro synonym riscrive i token in base a un dizionario di sinonimi, in modo che i termini correlati corrispondano durante la ricerca. Supporta due modalità di funzionamento e due modi di fornire il dizionario:

  • Modalità di funzionamento - la modalità expand conserva il token originale ed emette sinonimi aggiuntivi accanto ad esso; la modalità di normalizzazione (expand: false) riscrive i token in una forma canonica.

  • Sorgenti dei dizionari - I dizionari di piccole dimensioni possono essere inseriti nella configurazione del filtro tramite l'array synonyms; i dizionari di grandi dimensioni devono essere memorizzati come risorse di file e referenziati tramite synonyms_file.

Formato del dizionario

Un dizionario dei sinonimi è un documento di testo semplice (o un array inline) in cui ogni riga definisce una regola. Sono supportate due forme di regole.

Regola di mappatura

fast, quick => speedy

I token a sinistra (fast, quick) si riscrivono ai token a destra (speedy). Sono ammessi più target:

small, little => tiny, compact

Con expand: true, i token originali vengono mantenuti insieme ai target:

  • Ingresso fast con expand: truefast, speedy

  • Ingresso fast con expand: falsespeedy

Gruppo di equivalenza

happy, joyful, cheerful

Tutti i token elencati sono considerati equivalenti:

  • Con expand: true, ogni occorrenza di un qualsiasi token del gruppo emette ogni token del gruppo. Input happyhappy, joyful, cheerful.

  • Con expand: false, ogni occorrenza viene riscritta al primo token del gruppo. Ingresso joyfulhappy; l'ingresso happy è già il primo token e non viene modificato.

Configurazione

Il filtro synonym è un filtro personalizzato. Specifica "type": "synonym" insieme ad almeno uno degli elementi synonyms (inline) o synonyms_file (external), oltre a un flag expand.

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,
        }
    ],
}

Il filtro synonym accetta i seguenti parametri.

Parametro

Descrizione

Predefinito

synonyms

Un array inline di stringhe di regole. Ogni stringa utilizza il formato del dizionario descritto sopra. Adatto per piccoli dizionari (fino a poche decine di regole).

-

synonyms_file

Un riferimento a una risorsa file che memorizza le regole dei sinonimi, una per riga. Da usare per dizionari più grandi. Vedere File dizionario esterno di seguito.

-

expand

Un flag booleano che controlla l'applicazione delle regole. true conserva il token originale ed emette i sinonimi accanto ad esso; false riscrive i token nella loro forma canonica (il lato destro di una mappatura o il primo token di un gruppo di equivalenza).

falso

Si può specificare synonyms, synonyms_file, o entrambi. Quando entrambi sono presenti, il filtro fonde le due fonti. Il filtro opera sui token prodotti dal tokenizer; deve quindi essere combinato con un tokenizer come quello standard.

File dizionario esterno

Per i dizionari di dimensioni di produzione, registrare il file come risorsa file remota e fare riferimento ad esso da synonyms_file.

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,
    }],
}

Vedere Gestione delle risorse di file per il flusso di lavoro completo (caricare, registrare, elencare, rimuovere) e per il modulo alternativo "type": "local".

Esempi

Prima di applicare l'analizzatore a uno schema di raccolta, verificarne il comportamento con run_analyzer. Gli esempi seguenti utilizzano l'array inline synonyms per brevità; sostituirlo con synonyms_file per dizionari più grandi.

expand: true - mantenere l'originale, aggiungere sinonimi

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

Sia fast che happy vengono conservati; i loro sinonimi vengono emessi insieme.

expand: false - riscrivere in forma canonica

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

La regola di mappatura riscrive fast in speedy. Il gruppo di equivalenza lascia happy invariato perché è il primo token del gruppo; un input contenente joyful o cheerful sarebbe stato riscritto in happy.