Preparação dos dados
download.sh abaixo para isso:
process.py é definido da seguinte maneira:
seq 0 9 | ....
(O script em Python acima é muito lento (~2 a 10 minutos por arquivo), consome muita memória (41 GB por arquivo), e os arquivos CSV resultantes são grandes (10 GB cada), então tenha cuidado. Se você tiver RAM suficiente, aumente o valor de -P1 para obter mais paralelismo. Se isso ainda for muito lento, considere adotar um processo de ingestão melhor — talvez convertendo os arquivos .npy para Parquet e depois fazendo todo o restante do processamento com ClickHouse.)
Criar tabela
id é apenas ilustrativa e é preenchida pelo script com valores repetidos.
Faça uma busca por similaridade vetorial por força bruta
target é um array de 512 elementos e um parâmetro fornecido pelo cliente.
Uma forma conveniente de obter arrays desse tipo será apresentada no final do artigo.
Por enquanto, podemos usar o embedding de uma imagem aleatória de um conjunto LEGO como target.
Resultado
Execute uma busca vetorial aproximada por similaridade com um índice de similaridade vetorial
Criando embeddings com UDFs
target sem sair do cliente. É importante usar o mesmo modelo para criar os dados e os novos embeddings usados nas buscas. Os scripts a seguir utilizam o modelo ViT-B/32, que também é a base do conjunto de dados.
Embeddings de texto
user_scripts/ do caminho de dados do ClickHouse e torne-o executável (chmod +x encode_text.py).
encode_text.py:
encode_text_function.xml em um local indicado por <user_defined_executable_functions_config>/path/to/*_function.xml</user_defined_executable_functions_config> no arquivo de configuração do servidor ClickHouse.
SET param_target=... e escrever consultas com facilidade. Como alternativa, a função encode_text() pode ser usada diretamente como argumento da função cosineDistance :
encode_text() pode levar alguns segundos para calcular e gerar o vetor de embedding.
Embeddings de imagem
encode_image.py
encode_image_function.xml