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à
expandconserva 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 tramitesynonyms_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
fastconexpand: true→fast,speedyIngresso
fastconexpand: false→speedy
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. Inputhappy→happy,joyful,cheerful.Con
expand: false, ogni occorrenza viene riscritta al primo token del gruppo. Ingressojoyful→happy; l'ingressohappyè 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 |
|---|---|---|
|
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). |
- |
|
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. |
- |
|
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.