通常來說,面向向量的相似性檢索的方法分為精確檢索和近似檢索兩類。
精確檢索的本質就是線性查詢。線性查詢通過在整個向量空間內,遍歷所有已存向量計算其與檢索向量的距離,通常是計算歐幾里德距離或者點積。歐氏距離最近的向量或者點積最大的向量就是相似度最高的向量。線性查詢演算法簡單,不需要建立額外的資料結構和儲存空間。
例如,通過使用例如 intel 架構下的 mkl 或者使用 nvidia gpu 的 cublas 等平行計算庫加速,對於中小規模的向量集的相似性檢索是合適的。但是,由於線性查詢的時間複雜度是 o(nd),其中 n 是向量集的規模,d 是向量的維度,隨著向量集的規模的增大或者向量維度的增加,線性查詢就會顯得力不從心。
目前,市場上的特徵向量檢索工具主要包括以下幾種:
參考:影象檢索:基於內容的影象檢索技術
海量稠密向量相似度檢索工具
不管是做深度學習影象領域還是nlp領域或者推薦系統,最後embedding完的向量是海量高維稠密向量,在這些向量中查詢或者排序是乙個非常耗時的操作,下面提供幾個簡單高效的工具 1 annoy python環境下使用非常簡單,但是索引一旦建立就不能動態增加,增加item需要重新構建索引,在海量資料場景...
文字檢索演算法
純c語言實現。這個函式的功能是檢索檔案中的單詞,並定位到那一行,並輸出出現數目。演算法感覺難度不是特別大,但我這個演算法效率並不高,準備以後寫個效率更高的。函式的第二個引數可以刪除,在這裡並沒有什麼用。void word count file file,int line no,char word 統...
檢索樹 刪除演算法
為了記錄下檢索樹刪除演算法,我來發個部落格開心一下。如何刪除檢索樹中的元素?想要刪除檢索樹中的結點,步驟 找到要刪除結點 刪除結點 if x q data 向左搜尋 else 向右搜尋 if p 未找到 return 0 if p rson p沒有右兒子,用左兒子代替p else 如果p是其父結點的...