向量搜索的一些主題
- 2020 年 7 月 5 日
- AI
繼續上一篇的擴展:
思考了一些可能涉及到的主題:
A. 針對向量空間的無監督分析&學習能力
這算是向量搜索工具應該具備的基本能力,否則很難產生高效的索引:
通過空間變換,形成高密度的聚類蔟是能夠高效查詢的基本前提。
否則的話:
- 通過暴力手段進行搜索
- 空間的劃分不夠合理,造成搜索速度慢,或者不能有效召回
同時,對於目前的聚類演算法中的距離計算,很多也沒有涉及業務特性。而距離的計算方式對於聚類結果會有絕對直接的影響。
B. IVF 性能的優化
目前大部分的針對 IVF 的優化還是在工程手段上,不過現在流行的 暴力破解機&萬金油 — Deep Learning 似乎還沒有進入到這個領域。
一般來說搜索的向量空間本身也是 DL 產生的,如果用 NN 來預測 query 在 IVF 分劃中的概率分布,相對於之前的確定性的 IVF 計算,肯定會有更大的可操作空間,而且可以進一步的針對性優化這個概率分布的預測。
C. 大量小查詢的並行能力
一個大規模的搜索,最終都會變成多階段的零碎的小型搜索任務。如果想要提升吞吐量,這些小型任務需要更好的 batch化 && 並行化。
尤其是如果使用了 GPU 一類的專用硬體,即使單機,其中的通訊、調度、數據分片都需要有針對性的設計。
D. 條件過濾的能力
每個向量背後對應的數據項(無論是圖片、商品、文章、人臉等等),都有很多確定的屬性。
如果查詢可以針對屬性進行條件過濾就會大規模減少待選的項目,減少了數據量,那麼就可以用更高召回的演算法和設置,假設下:
全國範圍內,僅僅考慮 (性別 && 年齡段),我們就可以將待選目標從 1.3b 降低到 75m 的規模。
不過這需要同時可以高效向量空間搜索和條件過濾的索引設計,否則可能反而效率下降。