IA: Pesquisa vetorial
Descrição
Seção intitulada “Descrição”IA: Pesquisa vetorial ordena as linhas de uma tabela consoante a proximidade da sua coluna Vector a um vetor de consulta e escreve as linhas mais próximas — com a distância que as classificou — numa tabela de destino. Se lhe indicar vários vetores de consulta, cada um recebe o seu próprio conjunto de correspondências, tudo numa única passagem pela tabela de origem e tudo numa única tabela de saída.
A pesquisa é exata. Cada linha que passa o filtro do passo é comparada com todos os vetores de consulta, pelo que as correspondências são as linhas verdadeiramente mais próximas e não uma aproximação — e o trabalho cresce com o número de linhas analisadas multiplicado pelo número de vetores de consulta. Não existe nenhum índice vetorial para construir, 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 onde as correspondências são escritas.
Pesquisa
Seção intitulada “Pesquisa”- Coluna de vetores — a coluna Vector da tabela a pesquisar em relação à qual a distância é medida. Qualquer outro tipo de dados é recusado, nomeando 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 as suas magnitudes, o que é o pretendido para incorporações de texto; a euclidiana mede a distância em linha reta e tem em conta a magnitude. Em ambas, uma distância menor significa uma linha mais próxima. O cosseno é a predefinição.
- Correspondências por consulta — quantas linhas mais próximas manter para cada vetor de consulta. A predefinição é 10.
Vetores de consulta
Seção intitulada “Vetores de consulta”O separador Vetores de consulta aceita uma matriz JSON com uma entrada por consulta, cada uma com 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 devolve o seu próprio conjunto de correspondências, e o id é o que as identifica na saída. Os
ids têm de ser únicos, todos os valores têm de ser números finitos e todos os vetores de consulta têm de ter o mesmo
número de valores que os vetores armazenados — só é possível definir uma distância entre vetores de igual largura.
Uma divergência é recusada, nomeando a consulta, o número de valores que contém e a largura que a coluna
tem ou declara.
Selecionar subconjunto de dados
Seção intitulada “Selecionar subconjunto de dados”Um filtro restringe as linhas que são candidatas. As linhas são filtradas antes de serem classificadas, pelo que as correspondências são as linhas mais próximas que passam o filtro — e não as linhas mais próximas no total, filtradas depois. Este é o principal controlo sobre a quantidade de trabalho que o passo faz; consulte Dimensionar uma pesquisa.
Colunas de saída
Seção intitulada “Colunas de saída”Cada correspondência é escrita como uma linha com as colunas que selecionou no separador Seleção de dados da tabela, mais duas colunas calculadas cujos nomes controla:
- Coluna do nome da consulta — o id do vetor de consulta a que esta linha responde. A predefinição é
query_id. - Coluna de distância — a distância medida entre a correspondência e esse vetor de consulta. A predefinição é
distance. É também a chave de classificação.
O nome da consulta vem primeiro na saída, seguem-se as colunas que selecionou e a distância vem em último. Os nomes das colunas de saída têm de ser únicos.
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 devolvida como se fosse a mais próxima. O caso que encontrará é o de um vetor cuja magnitude excede o intervalo de um número de vírgula flutuante de 32 bits: não é devolvida nenhuma distância mensurável para ele e, como nada disponível ordena uma distância não mensurável em último lugar, incluir uma linha dessas colocaria no topo de cada resultado 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 registo do fluxo de trabalho indica então quantas linhas cada consulta deixou de fora, ou declara que o passo mediu todas as linhas que pesquisou. Obter essa contagem custa uma segunda passagem pela tabela, pelo que só é cobrada quando a pede; com o Modo de diagnóstico desativado, o registo declara que as linhas não mensuráveis são deixadas de fora por conceção e remete-o para o Modo de diagnóstico para obter o número.
Um vetor armazenado com um valor em falta dentro da matriz é um caso diferente: não é possível medir nenhuma distância em relação a uma matriz que contenha um, pelo que a pesquisa é recusada de imediato, nomeando a coluna, em vez de devolver silenciosamente um resultado parcial. Corrija ou remova essas linhas e execute de novo.
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 o passo recusa uma pesquisa cujo total exceda dez mil milhões de medições de distância — indicando o número de linhas, o número de consultas e o limite — em vez de iniciar um trabalho que não consegue terminar. Duas coisas mantêm uma pesquisa bem dentro desse limite:
- Filtre para a fatia que interessa. Restrinja os candidatos a uma entidade, um período ou um conjunto de documentos em vez de analisar um corpus inteiro para responder a uma pergunta sobre parte dele.
- Divida a tabela pela dimensão por que filtra sempre e pesquise a tabela relevante. Reduzir o número 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, o passo obtém a largura da declaração em vez de amostrar uma linha para a descobrir. Consulte Tipo de dados Vector.
Para que não se pode usar uma coluna Vector
Seção intitulada “Para que não se pode usar uma coluna Vector”Uma coluna Vector é recusada como chave de junção, como coluna de agrupamento e como alvo de agregação — neste passo e em todos os outros. A mensagem nomeia a coluna e a função em que foi usada, tanto quando guarda o passo como quando um passo guardado anteriormente é executado. Junte e agrupe antes pelas chaves de negócio junto ao vetor. Transportar um vetor através de um passo como coluna de saída normal é permitido, tal como contar linhas e contar valores distintos.
Relacionados
Seção intitulada “Relacionados”- Tipo de dados Vector — declarar uma coluna Vector, definir a sua largura e carregar incorporações nela
- Spatial Find Nearest — a mesma forma de vizinho mais próximo sobre geometria em vez de incorporações
- Table Lookup — traga colunas descritivas de volta para as linhas correspondidas
- Import Parquet — carregue incorporações a partir de um ficheiro Parquet