Preparación de datos
download.sh:
process.py se define de la siguiente manera:
seq 0 9 | ....
(El script de Python anterior es muy lento (~2-10 minutos por archivo), consume mucha memoria (41 GB por archivo) y los archivos CSV resultantes son grandes (10 GB cada uno), así que ten cuidado. Si tienes suficiente RAM, aumenta el valor de -P1 para obtener más paralelismo. Si aun así sigue siendo demasiado lento, considera idear un procedimiento de ingestión mejor; quizá convirtiendo los archivos .npy a Parquet y luego haciendo el resto del procesamiento con ClickHouse.)
Crear tabla
id es solo ilustrativa y el script la rellena con valores no únicos.
Ejecuta una búsqueda de similitud vectorial por fuerza bruta
target es un array de 512 elementos y un parámetro del cliente.
Al final del artículo se mostrará una forma práctica de obtener arrays de este tipo.
Por ahora, podemos usar como target el embedding de una imagen aleatoria de un set de LEGO.
Resultado
Realiza una búsqueda aproximada de similitud vectorial con un índice de similitud vectorial
Crear embeddings con UDFs
target sin salir del cliente. Es importante usar el mismo modelo para crear los datos y los nuevos embeddings para las búsquedas. Los siguientes scripts utilizan el modelo ViT-B/32, que es también el que subyace al conjunto de datos.
Embeddings de texto
user_scripts/ de la ruta de datos de ClickHouse y hágalo ejecutable (chmod +x encode_text.py).
encode_text.py:
encode_text_function.xml en una ubicación referenciada por <user_defined_executable_functions_config>/path/to/*_function.xml</user_defined_executable_functions_config> en el archivo de configuración del servidor ClickHouse.
SET param_target=... y escribir consultas fácilmente. Como alternativa, la función encode_text() puede usarse directamente como argumento de la función cosineDistance :
encode_text() podría tardar unos segundos en calcular y generar el vector de embedding.
Embeddings de imágenes
encode_image.py
encode_image_function.xml