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
expandpreserva 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 desynonyms_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
fastcomexpand: true→fast,speedyEntrada
fastcomexpand: false→speedy
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. Entradahappy→happy,joyful,cheerful.Com
expand: false, cada ocorrência é reescrita para o primeiro token do grupo. Entradajoyful→happy; a entradahappyjá é 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 |
|---|---|---|
|
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). |
- |
|
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. |
- |
|
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.