Synonyme

Le filtre synonym réécrit les mots en fonction d'un dictionnaire de synonymes, de sorte que les termes apparentés correspondent lors de la recherche. Il prend en charge deux modes de fonctionnement et deux façons de fournir le dictionnaire :

  • Modes de fonctionnement - le mode expand préserve l'élément original et émet des synonymes supplémentaires en même temps que lui ; le mode de normalisation (expand: false) réécrit les éléments sous une forme canonique.

  • Sources du dictionnaire - les petits dictionnaires peuvent être intégrés dans la configuration du filtre via le tableau synonyms; les grands dictionnaires doivent être stockés dans un fichier et référencés via synonyms_file.

Format du dictionnaire

Un dictionnaire de synonymes est un document en texte brut (ou un tableau en ligne) dans lequel chaque ligne définit une règle. Deux formes de règles sont prises en charge.

Règle de correspondance

fast, quick => speedy

Les mots-clés de gauche (fast, quick) se réécrivent en mots-clés de droite (speedy). Plusieurs cibles sont autorisées :

small, little => tiny, compact

Avec expand: true, les jetons d'origine sont conservés à côté des cibles :

  • Entrée fast avec expand: truefast, speedy

  • Entrée fast avec expand: falsespeedy

Groupe d'équivalence

happy, joyful, cheerful

Tous les éléments énumérés sont considérés comme équivalents :

  • Avec expand: true, toute occurrence d'un token du groupe émet tous les tokens du groupe. Entrée happyhappy, joyful, cheerful.

  • Avec expand: false, chaque occurrence est réécrite en premier token du groupe. Entrée joyfulhappy; l'entrée happy est déjà le premier token et reste inchangée.

Configuration

Le filtre synonym est un filtre personnalisé. Spécifiez "type": "synonym" avec au moins l'un des éléments suivants : synonyms (en ligne) ou synonyms_file (externe), ainsi que l'indicateur 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,
        }
    ],
}

Le filtre synonym accepte les paramètres suivants.

Paramètre

Description

Défaut

synonyms

Un tableau de chaînes de règles en ligne. Chaque chaîne utilise le format de dictionnaire décrit ci-dessus. Convient aux petits dictionnaires (jusqu'à quelques dizaines de règles).

-

synonyms_file

Une référence à un fichier de ressources qui stocke les règles de synonymes, une par ligne. À utiliser pour les dictionnaires plus importants. Voir Fichier de dictionnaire externe ci-dessous.

-

expand

Un indicateur booléen qui contrôle la manière dont les règles s'appliquent. true préserve l'élément original et émet des synonymes à côté ; false réécrit les éléments à leur forme canonique (le côté droit d'une correspondance, ou le premier élément d'un groupe d'équivalence).

false

Vous pouvez spécifier synonyms, synonyms_file, ou les deux. Si les deux sont présents, le filtre fusionne les deux sources. Le filtre opère sur les jetons produits par le tokenizer ; il doit donc être combiné avec un tokenizer tel que le tokenizer standard.

Fichier dictionnaire externe

Pour les dictionnaires de taille de production, enregistrez le fichier en tant que ressource de fichier distante et faites-y référence à partir de 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,
    }],
}

Voir Gérer les ressources de fichiers pour le flux de travail complet (télécharger, enregistrer, lister, supprimer) et pour le formulaire alternatif "type": "local".

Exemples

Avant d'appliquer l'analyseur à un schéma de collection, vérifiez son comportement à l'aide de run_analyzer. Les exemples suivants utilisent le tableau en ligne synonyms par souci de concision ; remplacez-le par synonyms_file pour les dictionnaires plus volumineux.

expand: true - conserver l'original, ajouter des synonymes

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

fast et happy sont conservés ; leurs synonymes sont émis en même temps.

expand: false - réécriture sous forme canonique

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 règle de correspondance réécrit fast en speedy. Le groupe d'équivalence laisse happy inchangé parce qu'il s'agit du premier token du groupe ; une entrée contenant joyful ou cheerful aurait été réécrite en happy.