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