继续上一篇的扩展:
Captain Jack:两个脑洞的工作方向思考了一些可能涉及到的主题:
这算是向量搜索工具应该具备的基本能力,否则很难产生高效的索引:
通过空间变换,形成高密度的聚类蔟是能够高效查询的基本前提。
否则的话:
同时,对于目前的聚类算法中的距离计算,很多也没有涉及业务特性。而距离的计算方式对于聚类结果会有绝对直接的影响。
目前大部分的针对 IVF 的优化还是在工程手段上,不过现在流行的 暴力破解机&万金油 – Deep Learning 似乎还没有进入到这个领域。
一般来说搜索的向量空间本身也是 DL 产生的,如果用 NN 来预测 query 在 IVF 分划中的概率分布,相对于之前的确定性的 IVF 计算,肯定会有更大的可操作空间,而且可以进一步的针对性优化这个概率分布的预测。
一个大规模的搜索,最终都会变成多阶段的零碎的小型搜索任务。如果想要提升吞吐量,这些小型任务需要更好的 batch化 && 并行化。
尤其是如果使用了 GPU 一类的专用硬件,即使单机,其中的通讯、调度、数据分片都需要有针对性的设计。
每个向量背后对应的数据项(无论是图片、商品、文章、人脸等等),都有很多确定的属性。
如果查询可以针对属性进行条件过滤就会大规模减少待选的项目,减少了数据量,那么就可以用更高召回的算法和设置,假设下:
全国范围内,仅仅考虑 (性别 && 年龄段),我们就可以将待选目标从 1.3b 降低到 75m 的规模。
不过这需要同时可以高效向量空间搜索和条件过滤的索引设计,否则可能反而效率下降。