facebook 類似性搜索庫 faiss

faiss

我的理解:c++

https://github.com/facebookresearch/faiss 上把代碼clone下來,make編譯git

咱們將CNN中通過若干個卷積/激勵/池化層後獲得的激活映射(向量形式)存儲到硬盤上,github

Faiss是一個高效的類似性搜索和密集向量聚類的庫。它包含了搜索任意大小的向量集合的算法,這些算法可能不適合RAM。它還包含用於評估和參數優化的支持代碼。Faiss是用c++編寫的,帶有Python/numpy的完整包裝。一些最有用的算法是在GPU上實現的。它是由Facebook人工智能研究開發的。算法

稀疏向量:0和1表示的向量docker

密集向量:實數表示的向量服務器


介紹函數

Faiss包含了幾種類似搜索的方法。它假設實例被表示爲向量,並由一個整數來標識,而且向量能夠與L2距離或點乘積進行比較。與查詢向量類似的向量是那些具備最低L2距離或與查詢向量有最高的點積的向量。它也支持餘弦類似,由於這是標準化向量上的點積。優化


大多數的方法,像那些基於二進制矢量和壓縮量化碼的方法,僅僅使用矢量的壓縮表示,不須要保留原向量。這一般以不那麼精確的搜索爲代價,但這些方法能夠在單個服務器上的主存中擴展到數十億個向量。人工智能


GPU實現能夠接受CPU或GPU內存的輸入。在帶有GPU的服務器上,GPU索引可使用drop-in替換CPU索引(例如,用GpuIndexFlatL2替換IndexFlatL2),並自動處理GPU內存的副本。可是若是輸入和輸出都駐留在GPU上,結果將會更快。支持單一和多gpu的使用。spa


建築

庫主要是在c++中實現的,經過CUDA提供可選的GPU支持,以及一個可選的Python接口。CPU版本須要一個BLAS庫。它使用Makefile編譯,並能夠在docker映像中打包。看到安裝。

 

工做方式

Faiss是圍繞一個索引類型構建的,它存儲了一組向量,並提供了一個函數,用L2和/或點積向量比較來搜索它們。有些索引類型是簡單的基線,例如精確搜索。大多數可用的索引結構對應於各類各樣的權衡。


搜索時間

搜索質量

每一個索引向量使用的內存。

培訓時間

非監督培訓須要外部數據。

可選的GPU實現提供了可能的(截至2017年3月)最快的精確和近似(壓縮域)最近鄰搜索實現的高維向量,最快的勞埃德的k-means,和最快的小k選擇算法已知。這裏詳細介紹了實現。


完整的文檔作

如下爲文件的入口點:


完整的文檔,包括教程,FAQ和故障排除部分能夠在wiki頁面上找到。

doxygen文檔提供了每一個類的信息。

爲了複製咱們的研究論文,多義代碼和十億級類似搜索與gpu,請參考基準的README。

 

加入社區

公開討論作或問題,有一個Facebook公開討論組在https://www.facebook.com/groups/faissusers/

咱們監視存儲庫的問題頁面。你能夠報告錯誤,提出問題,等等。

相關文章
相關標籤/搜索