Sinónimo

O filtro synonym reescreve os tokens de acordo com um dicionário de sinónimos, para que os termos relacionados coincidam durante a pesquisa. Suporta dois modos de funcionamento e duas formas de fornecer o dicionário:

  • Modos de operação - o modo expand preserva o token original e emite sinónimos adicionais juntamente com ele; o modo de normalização (expand: false) reescreve os tokens para uma forma canónica.

  • Fontes do dicionário - os dicionários pequenos podem ser incluídos na configuração do filtro através do array synonyms; os dicionários grandes devem ser armazenados como um recurso de ficheiro e referenciados através de synonyms_file.

Formato do dicionário

Um dicionário de sinónimos é um documento de texto simples (ou matriz em linha) em que cada linha define uma regra. São suportadas duas formas de regras.

Regra de mapeamento

fast, quick => speedy

Os tokens à esquerda (fast, quick) reescrevem para os tokens à direita (speedy). São permitidos vários alvos:

small, little => tiny, compact

Com expand: true, os tokens originais são mantidos ao lado dos alvos:

  • Entrada fast com expand: truefast, speedy

  • Entrada fast com expand: falsespeedy

Grupo de equivalência

happy, joyful, cheerful

Todos os símbolos listados são considerados equivalentes:

  • Com expand: true, qualquer ocorrência de qualquer marcador do grupo emite todos os marcadores do grupo. Entrada happyhappy, joyful, cheerful.

  • Com expand: false, cada ocorrência é reescrita para o primeiro token do grupo. Entrada joyfulhappy; a entrada happy já é o primeiro token e permanece inalterada.

Configuração

O filtro synonym é um filtro personalizado. Especifique "type": "synonym" juntamente com pelo menos um de synonyms (em linha) ou synonyms_file (externo), mais um sinalizador 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,
        }
    ],
}

O filtro synonym aceita os seguintes parâmetros.

Parâmetro

Descrição

Predefinição

synonyms

Uma matriz em linha de cadeias de regras. Cada cadeia utiliza o formato de dicionário descrito acima. Adequado para pequenos dicionários (até algumas dezenas de regras).

-

synonyms_file

Uma referência a um recurso de ficheiro que armazena regras de sinónimos, uma por linha. Utilizar para dicionários maiores. Veja Arquivo de dicionário externo abaixo.

-

expand

Um sinalizador booleano que controla como as regras se aplicam. true preserva o token original e emite sinónimos ao lado dele; false reescreve os tokens para a sua forma canónica (o lado direito de um mapeamento, ou o primeiro token de um grupo de equivalência).

false

Pode especificar synonyms, synonyms_file, ou ambos. Quando ambos estão presentes, o filtro funde as duas fontes. O filtro opera em tokens produzidos pelo tokenizador; ele deve, portanto, ser combinado com um tokenizador, como o tokenizador padrão.

Ficheiro de dicionário externo

Para dicionários de tamanho de produção, registre o arquivo como um recurso de arquivo remoto e faça referência a ele em 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 Gerir recursos de ficheiros para o fluxo de trabalho completo (carregar, registar, listar, remover) e para o formulário alternativo "type": "local".

Exemplos

Antes de aplicar o analisador a um esquema de coleção, verifique o seu comportamento com run_analyzer. Os exemplos a seguir usam a matriz em linha synonyms por brevidade; substitua por synonyms_file para dicionários maiores.

expand: true - manter o original, adicionar 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 são preservados; os seus sinónimos são emitidos em conjunto.

expand: false - reescrever para 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']]

A regra de mapeamento reescreve fast para speedy. O grupo de equivalência deixa happy inalterado porque é o primeiro token do grupo; uma entrada contendo joyful ou cheerful teria sido reescrita para happy.