ANNS
1.0.0
這是ANNS SOTA算法的非常基本的庫。它用C ++/C ++標準性誹謗編寫,可用於在高維空間中構建和查詢一個點索引。該庫提供了各種用於構建和查詢索引的算法。該圖書館旨在易於使用並提供相對較高的性能。
對於您來說,這是一個非常有用的工具,可以構建自己的ANNS索引雜物,而無需太多努力。
這是如何使用ANN庫來構建和查詢索引的一個示例。
DataSetWrapper< data_t > base, query;
GroundTruth gt;
base.load( " data/sift-128-euclidean.train.fvecs " );
query.load( " data/sift-128-euclidean.test.fvecs " );
gt.load( " data/sift-128-euclidean.cover.uniform-0-1.ivecs " );
const size_t k = 1 ;
utils::Timer timer;
// build index
HNSW< data_t , metrics::euclidean> index ( 32 , 128 );
index.set_num_threads( 24 );
timer.start();
index.build(base);
timer.stop();
cout << " Build time: " << timer.get() << endl;
// query with different parameters
ofstream out ( " hnsw_postfilter.csv " );
for ( size_t ef = 1 ; ef <= 128 ; ef++)
{
timer. reset ();
matrix_id_t knn;
matrix_di_t dis;
timer. start ();
index . search (query, k, ef, knn, dis);
timer. stop ();
out << timer. get () << " , " << gt. recall (k, knn) << endl;
}該庫中使用的所有數據集都在VECS -Format中,您可以從此處下載。我已經在ANN基準標准上建立了一個框架基礎,以下載數據集並將其轉換為VECS -Format。您可以在ANN/數據集中找到代碼。
如果您對ANN算法的三角洲開發感興趣,則可以從基於索引的類中吸入並實現自己的算法來保留原始API。例如
template < typename data_t , typename label_t , float (*distance)( const data_t *, const data_t *, size_t )>
class PostFilterHCNNG : public HCNNG < data_t , distance>
/* ... */