IA: Pesquisa vetorial
Descrição
Seção intitulada “Descrição”IA: Pesquisa vetorial classifica as linhas de uma tabela pela proximidade de sua coluna Vector em relação a um vetor de consulta e grava as linhas mais próximas — com a distância que as classificou — em uma tabela de destino. Informe vários vetores de consulta e cada um recebe seu próprio conjunto de correspondências, tudo em uma única passagem pela tabela de origem e tudo em uma única tabela de saída.
A pesquisa é exata. Cada linha que passa pelo filtro da etapa é comparada com cada vetor de consulta, de modo que as correspondências são as linhas realmente mais próximas, e não uma aproximação — e o trabalho cresce com o número de linhas examinadas multiplicado pelo número de vetores de consulta. Não há índice vetorial para criar, ajustar ou usar como alternativa.
Origem e destino
Seção intitulada “Origem e destino”- Tabela a pesquisar — a tabela cujos vetores armazenados são pesquisados.
- Tabela de destino — a tabela em que as correspondências são gravadas.
Pesquisa
Seção intitulada “Pesquisa”- Coluna de vetor — a coluna Vector da tabela a pesquisar em relação à qual a distância é medida. Qualquer outro tipo de dados é recusado, com uma mensagem que nomeia a coluna e o tipo que ela realmente contém.
- Métrica de distância — Cosseno ou Euclidiana (L2). O cosseno mede o ângulo entre dois vetores e ignora suas magnitudes, o que é desejável para embeddings de texto; a euclidiana mede a distância em linha reta e leva a magnitude em conta. Em ambas, uma distância menor significa uma linha mais próxima. Cosseno é o padrão.
- Correspondências por consulta — quantas linhas mais próximas manter para cada vetor de consulta. O padrão é 10.
Vetores de consulta
Seção intitulada “Vetores de consulta”A guia Vetores de consulta aceita um array JSON com uma entrada por consulta, cada uma contendo um id e um
vector:
[ {"id": "q1", "vector": [0.1, 0.2, 0.3]}, {"id": "q2", "vector": [0.4, 0.5, 0.6]}]Cada consulta retorna seu próprio conjunto de correspondências, e o id é o que as identifica na saída. Os
ids devem ser exclusivos, todo valor deve ser um número finito e todo vetor de consulta deve conter o mesmo
número de valores que os vetores armazenados — uma distância só é definida entre vetores de mesma largura.
Uma divergência é recusada, com uma mensagem que nomeia a consulta, o número de valores que ela contém e a largura que a coluna
contém ou declara.
Selecionar subconjunto de dados
Seção intitulada “Selecionar subconjunto de dados”Um filtro restringe quais linhas são candidatas. As linhas são filtradas antes de serem classificadas, de modo que as correspondências são as linhas mais próximas que passam pelo filtro — e não as linhas mais próximas no geral, filtradas depois. Este é o principal controle sobre quanto trabalho a etapa faz; consulte Dimensionar uma pesquisa.
Colunas de saída
Seção intitulada “Colunas de saída”Cada correspondência é gravada como uma linha contendo as colunas que você selecionou na guia Seleção de dados da tabela, mais duas colunas calculadas cujos nomes você controla:
- Coluna do nome da consulta — o id do vetor de consulta a que esta linha responde. O padrão é
query_id. - Coluna de distância — a distância medida entre a correspondência e esse vetor de consulta. O padrão é
distance. Esta também é a chave de classificação.
O nome da consulta vem primeiro na saída, as colunas que você selecionou vêm em seguida e a distância vem por último. Os nomes das colunas de saída devem ser exclusivos.
Linhas que ficam de fora
Seção intitulada “Linhas que ficam de fora”Uma linha cuja distância não pode ser medida é excluída das correspondências, em vez de ser retornada como se fosse a mais próxima. Um vetor cuja magnitude estoura o intervalo de um float de 32 bits é o caso que você encontrará: nenhuma distância mensurável é retornada para ele e, como nada disponível ordena uma distância não mensurável por último, incluir essa linha colocaria no topo de todos os resultados as linhas sobre as quais a pesquisa menos sabe.
Execute o fluxo de trabalho com o Modo de diagnóstico ativado para ver a contagem. O log do fluxo de trabalho então informa quantas linhas cada consulta deixou de fora, ou declara que a etapa mediu todas as linhas que pesquisou. Obter essa contagem custa uma segunda passagem pela tabela, e por isso ela só é cobrada quando você a solicita; com o Modo de diagnóstico desativado, o log declara que as linhas não mensuráveis são deixadas de fora por projeto e indica o Modo de diagnóstico para obter o número.
Um vetor armazenado que contenha um valor ausente dentro do array é outra questão: nenhuma distância pode ser medida em relação a qualquer array que contenha um, portanto a pesquisa é recusada de imediato, com uma mensagem que nomeia a coluna, em vez de retornar silenciosamente um resultado parcial. Corrija ou remova essas linhas e execute novamente.
Dimensionar uma pesquisa
Seção intitulada “Dimensionar uma pesquisa”O custo de uma execução é o número de linhas candidatas multiplicado pelo número de vetores de consulta, e a etapa recusa uma pesquisa cujo total exceda dez bilhões de medições de distância — informando a contagem de linhas, a contagem de consultas e o limite — em vez de iniciar um trabalho que não pode terminar. Duas coisas mantêm uma pesquisa bem abaixo desse limite:
- Filtre pela fatia que importa. Restrinja os candidatos a uma entidade, um período ou um conjunto de documentos, em vez de varrer um corpus inteiro para responder a uma pergunta sobre parte dele.
- Divida a tabela pela dimensão pela qual você sempre filtra e pesquise a tabela relevante. Reduzir a contagem de candidatos é muito mais eficaz do que qualquer outra coisa disponível aqui.
Declarar uma Largura do vetor na coluna também ajuda: com ela declarada, a etapa obtém a largura da declaração, em vez de amostrar uma linha para descobri-la. Consulte Tipo de dados Vector.
Para que uma coluna Vector não pode ser usada
Seção intitulada “Para que uma coluna Vector não pode ser usada”Uma coluna Vector é recusada como chave de junção, como coluna de agrupamento e como alvo de agregação — nesta etapa e em todas as outras. A mensagem nomeia a coluna e o papel em que ela foi usada, tanto ao salvar a etapa quanto ao executar uma etapa salva anteriormente. Em vez disso, faça junções e agrupamentos pelas chaves de negócio ao lado do vetor. Levar um vetor por uma etapa como uma coluna de saída comum não há problema, assim como contar linhas e contar valores distintos.
Relacionados
Seção intitulada “Relacionados”- Tipo de dados Vector — declarar uma coluna Vector, definir sua largura e carregar embeddings nela
- Spatial Find Nearest (etapa) — o mesmo formato de vizinho mais próximo, sobre geometria em vez de embeddings
- Table Lookup (etapa) — traga colunas descritivas de volta para as linhas correspondentes
- Importar Parquet — carregue embeddings de um arquivo Parquet