数据准备
download.sh 脚本:
process.py 的定义如下:
seq 0 9 | ...。
(上面的 python 脚本非常慢 (每个文件约需 2–10 分钟) ,占用大量内存 (每个文件 41 GB) ,生成的 csv 文件也很大 (每个 10 GB) ,因此请务必谨慎。如果你有足够的 RAM,可以增大 -P1 的值以提高并行度。如果这样仍然太慢,可以考虑采用更好的摄取流程——例如先将 .npy 文件转换为 Parquet,然后再用 ClickHouse 完成其余处理。)
创建表
id 列仅作示意,脚本会为其填入非唯一值。
运行穷举向量相似度搜索
target 是一个包含 512 个元素的数组,也是一个客户端参数。
文末会介绍一种便捷的方式来获取这类数组。
现在,我们可以先把一张随机 LEGO 套装图片的嵌入向量作为 target。
结果
使用向量相似度索引执行近似向量相似度搜索
使用 UDF 创建嵌入向量
target 向量,而无需离开客户端。务必使用同一个模型来生成数据以及用于搜索的新嵌入向量。以下脚本使用 ViT-B/32 模型,底层数据集也是基于该模型构建的。
文本嵌入向量
user_scripts/ 目录,并将其设为可执行文件 (chmod +x encode_text.py) 。
encode_text.py:
<user_defined_executable_functions_config>/path/to/*_function.xml</user_defined_executable_functions_config> 指定的位置创建 encode_text_function.xml。
SET param_target=... 中,这样就能轻松编写查询。或者,也可以直接将 encode_text() 函数作为 cosineDistance 函数的参数使用:
encode_text() UDF 本身可能需要几秒钟才能完成计算并生成嵌入向量。
图像嵌入向量
encode_image.py
encode_image_function.xml