Pesquisa

Similaridade semântica com seletividade focada

Por que a pesquisa semântica precisa de seletividade?

Até agora, considerávamos uma incorporação de vetor como uma entidade completa e autônoma, focada inteiramente no significado que ela codifica. Embora isso permita a pesquisa semântica, muitas vezes com um alto grau de similaridadeele permanece limitado à semelhança entre a consulta e os embeddings do conjunto de dados.

Não se pode confiar na oferta de pesquisa de similaridade de vetores para satisfazer predicados exatos. A pré-filtragem tem como objetivo abordar exatamente essa lacuna, buscando vetores semelhantes somente entre aqueles que satisfazem alguns critérios de filtragem.

É o equivalente de incorporação de limitar sua pesquisa, seja para um emprego ou uma propriedade, a um local. Digamos que você queira uma propriedade à beira-mar em um estado específico. Você também deseja limitar sua pesquisa àquelas com três quartos ou mais. Combinar as listagens sem um método de filtragem para esses critérios é quase inviável devido ao grande número de listagens.

Com a pré-filtragem, você pode limitar sua pesquisa a um local específico, restringindo o espaço de pesquisa a propriedades elegíveis por meio de consultas geoespaciais e numéricas. Uma pesquisa de similaridade vetorial para propriedades "em frente à praia", "à beira da praia" e "à beira-mar" será realizada nesse subconjunto limitado.

A pré-filtragem permitirá que os usuários especifiquem consultas de filtro como parte do atributo kNN na consulta, sendo que somente os resultados serão considerados elegíveis para serem retornados pela consulta kNN. Simplificando, o usuário agora pode usar a sintaxe familiar de consulta do FTS para restringir os documentos sobre os quais será realizada uma pesquisa kNN.

Quando aplicar a pré-filtragem?

Como o nome sugere, os embeddings são filtrados por metadados antes de a pesquisa de similaridade. Isso é diferente da pós-filtragem, em que uma pesquisa kNN é seguida pela filtragem de metadados. A pré-filtragem oferece uma chance muito maior de retornar k ocorrências, supondo que haja pelo menos esses documentos que passam pelo estágio de filtragem.

Como isso funciona

Antes de entrarmos na essência da pré-filtragem com o kNN, vamos entender como um vetor e um índice de texto completo são co-localizados no índice do serviço Search. Cada índice do Search tem uma ou mais partições, cada uma das quais tem um ou mais segmentos. Cada um desses segmentos é um arquivo, e o arquivo é dividido em seções separadas, uma por tipo de índice. A visualização de um segmento como uma unidade autônoma com conteúdo de texto e vetor de um lote de documentos indexado será útil para entender como a pré-filtragem funciona no nível do segmento.

Semantic Similarity with Focused SelectivityUma consideração importante ao construí-lo foi que ele deveria ser agnóstico de predicados no momento da pesquisa. Essencialmente, isso significa que a filtragem no índice vetorial deve funcionar da mesma forma, independentemente do predicado de texto completo. Um predicado de texto sobre um campo de texto não deve ser diferente de um predicado numérico sobre outro.

Para isso, os números de documentos, identificadores exclusivos de um documento, são usados para demarcar quais documentos são elegíveis para a consulta kNN. Todas as consultas FTS, sejam elas de texto, numéricas ou geoespaciais, se resumem a identificar as ocorrências pelo número do documento. O uso de números de documentos significa que não precisamos alterar nossa estratégia de indexação para vetores e limitá-la a uma alteração no tempo de pesquisa.

Fase 1: Filtragem de metadados

Como um segmento é essencialmente um lote imutável de documentos, com seu texto e conteúdo vetorial indexados, a consulta de metadados de texto completo retorna todos os documentos elegíveis em nível de segmento. Seus números de documentos são então passados para o índice de vetores para recuperar os vetores elegíveis mais próximos.

Semantic Similarity with Focused Selectivity

Fase 2: pesquisa kNN

Semantic Similarity with Focused Selectivity O algoritmo atual que escolhe o nprobe clusters mais próximos do vetor de consulta em um índice IVF é essencialmente voando às cegas pois não leva em conta os clusters próximos com poucos ou nenhum documento qualificado. No momento da pesquisa, a seleção de clusters a serem investigados agora precisa conta para a distribuição de ocorrências filtradas por metadados em todo o índice.

Um grupo mais próximo do vetor de consulta pode ter muito menos ocorrências elegíveis do que um vetor muito mais distante.

Levar em conta a distribuição de acertos do filtro e, ao mesmo tempo, manter a recuperação alta significa que não podemos fazer a varredura de clusters somente com base na densidade de acertos do filtro. O que isso significa é que tentamos minimizar os cálculos de distância para vetores inelegíveis, mesmo quando examinamos quantos clusters forem necessários para retornar o k vizinhos mais próximos.

Anteriormente, nprobe foi definido como o limite absoluto para o número de clusters examinados. Agora, trata-se mais de um número mínimo de clusters a serem examinados, supondo que menos clusters tenham vetores qualificados suficientes. Em casos de distribuição esparsa de acertos de filtros, em que cada cluster tem relativamente poucos vetores qualificados, nossa busca pelos k vizinhos mais próximos pode nos levar a varre muito mais do que os clusters do nprobe. Tanto o kNN filtrado quanto o não filtrado examinam os clusters em ordem crescente de distância do vetor de consulta, sendo que a diferença está no fato de examinar um subconjunto de vetores em um número potencialmente maior de clusters.

Quando o índice de vetores retorna os vetores mais semelhantes em um nível de segmento, eles são agregados em um nível de índice global semelhante ao que é feito para o kNN sem filtragem.

Como usar isso

Vamos pegar um balde, marcos históricos. Este é um exemplo de documento:

Criar um índice, teste, que indexa o incorporação, id e cidade campos.

Minha primeira consulta é uma incorporação do Royal Engineers Museum em Gillingham:

Os que mais se aproximam são o London Fire Brigade Museum, o Verulamium Museum em St Albans e o RAF Museum em Londres.

Agora queremos pesquisar museus semelhantes em Glasgow, ou seja, o campo cidade deve ter um valor Glasgow.

Veja como fica a consulta filtrada, com o filtro cláusula adicionada:

Como esperado, os resultados agora estão limitados aos de Glasgow, sendo os mais próximos a Kelvingrove Art Gallery and Museum e o Riverside Museum.

Como visto neste exemplo, uma consulta kNN filtrada oferece a vantagem de selecionar os documentos para uma pesquisa de similaridade usando as boas e velhas consultas FTS.

Continue aprendendo


Free Cloud NoSQL DBaaS

 

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Aditi Ahuja, engenheira de software

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.