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
expandpré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 viasynonyms_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
fastavecexpand: true→fast,speedyEntrée
fastavecexpand: false→speedy
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éehappy→happy,joyful,cheerful.Avec
expand: false, chaque occurrence est réécrite en premier token du groupe. Entréejoyful→happy; l'entréehappyest 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 |
|---|---|---|
|
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). |
- |
|
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. |
- |
|
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.