Sinónimo
El filtro synonym reescribe los tokens de acuerdo con un diccionario de sinónimos, de forma que los términos relacionados coincidan durante la búsqueda. Admite dos modos de funcionamiento y dos formas de suministrar el diccionario:
Modos de funcionamiento - el modo
expandconserva el token original y emite sinónimos adicionales junto a él; el modo de normalización (expand: false) reescribe los tokens a una forma canónica.Fuentes del diccionario: los diccionarios pequeños pueden incluirse en la configuración del filtro a través de la matriz
synonyms; los diccionarios grandes deben almacenarse como un recurso de archivo y referenciarse a través desynonyms_file.
Formato del diccionario
Un diccionario de sinónimos es un documento de texto sin formato (o matriz en línea) en el que cada línea define una regla. Se admiten dos formas de regla.
Regla de asignación
fast, quick => speedy
Los tokens de la izquierda (fast, quick) se reescriben en los tokens de la derecha (speedy). Se permiten varios objetivos:
small, little => tiny, compact
Con expand: true, los tokens originales se mantienen junto a los objetivos:
Entrada
fastconexpand: true→fast,speedyEntrada
fastconexpand: false→speedy
Grupo de equivalencia
happy, joyful, cheerful
Todos los tokens de la lista se consideran equivalentes:
Con
expand: true, cualquier aparición de cualquier token del grupo emite cada token del grupo. Entradahappy→happy,joyful,cheerful.Con
expand: false, cada ocurrencia se reescribe en el primer token del grupo. Entradajoyful→happy; la entradahappyya es el primer token y no se modifica.
Configuración
El filtro synonym es un filtro personalizado. Especifica "type": "synonym" junto con al menos uno de synonyms (en línea) o synonyms_file (externo), además de una bandera 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,
}
],
}
El filtro synonym acepta los siguientes parámetros.
Parámetro |
Descripción |
Por defecto |
|---|---|---|
|
Una matriz en línea de cadenas de reglas. Cada cadena utiliza el formato de diccionario descrito anteriormente. Adecuado para diccionarios pequeños (hasta unas pocas docenas de reglas). |
- |
|
Una referencia a un recurso de archivo que almacena reglas de sinónimos, una por línea. Utilícelo para diccionarios más grandes. Véase Archivo de diccionario externo más abajo. |
- |
|
Un indicador booleano que controla cómo se aplican las reglas. true conserva el token original y emite sinónimos junto a él; false reescribe los tokens a su forma canónica (el lado derecho de una correspondencia, o el primer token de un grupo de equivalencia). |
falso |
Puede especificar synonyms, synonyms_file, o ambos. Si se especifican ambos, el filtro fusiona las dos fuentes. El filtro funciona con los tokens producidos por el tokenizador; por lo tanto, debe combinarse con un tokenizador como el tokenizador estándar.
Archivo de diccionario externo
Para diccionarios de tamaño de producción, registre el archivo como un recurso de archivo remoto y haga referencia a él desde 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,
}],
}
Consulte Gestionar recursos de archivos para ver el flujo de trabajo completo (cargar, registrar, listar, eliminar) y el formulario alternativo "type": "local".
Ejemplos
Antes de aplicar el analizador a un esquema de colección, verifique su comportamiento con run_analyzer. Los siguientes ejemplos utilizan la matriz en línea synonyms por brevedad; sustitúyala por synonyms_file para diccionarios más grandes.
expand: true - conservar el original, añadir sinónimos
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']]
Tanto fast como happy se conservan; sus sinónimos se emiten junto a ellos.
expand: false - reescribir a forma canónica
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 regla de asignación reescribe fast en speedy. El grupo de equivalencia deja happy sin cambios porque es el primer token del grupo; una entrada que contenga joyful o cheerful se habría reescrito en happy.