向量搜索的一些主題

  • 2020 年 7 月 5 日
  • AI

繼續上一篇的擴展:

Captain Jack:兩個腦洞的工作方向zhuanlan.zhihu.com圖標

思考了一些可能涉及到的主題:

A. 針對向量空間的無監督分析&學習能力

這算是向量搜索工具應該具備的基本能力,否則很難產生高效的索引:

通過空間變換,形成高密度的聚類蔟是能夠高效查詢的基本前提。

否則的話:

  1. 通過暴力手段進行搜索
  2. 空間的劃分不夠合理,造成搜索速度慢,或者不能有效召回

同時,對於目前的聚類演算法中的距離計算,很多也沒有涉及業務特性。而距離的計算方式對於聚類結果會有絕對直接的影響。

B. IVF 性能的優化

目前大部分的針對 IVF 的優化還是在工程手段上,不過現在流行的 暴力破解機&萬金油 — Deep Learning 似乎還沒有進入到這個領域。

一般來說搜索的向量空間本身也是 DL 產生的,如果用 NN 來預測 query 在 IVF 分劃中的概率分布,相對於之前的確定性的 IVF 計算,肯定會有更大的可操作空間,而且可以進一步的針對性優化這個概率分布的預測。

C. 大量小查詢的並行能力

一個大規模的搜索,最終都會變成多階段的零碎的小型搜索任務。如果想要提升吞吐量,這些小型任務需要更好的 batch化 && 並行化。

尤其是如果使用了 GPU 一類的專用硬體,即使單機,其中的通訊、調度、數據分片都需要有針對性的設計。

D. 條件過濾的能力

每個向量背後對應的數據項(無論是圖片、商品、文章、人臉等等),都有很多確定的屬性。

如果查詢可以針對屬性進行條件過濾就會大規模減少待選的項目,減少了數據量,那麼就可以用更高召回的演算法和設置,假設下:

全國範圍內,僅僅考慮 (性別 && ​年齡段),我們就可以將待選目標從 1.3b 降低到 75m 的規模。

不過這需要同時可以高效向量空間搜索和條件過濾的索引設計,否則可能反而效率下降。