Dies ist eine sehr grundlegende Bibliothek von Anns SOTA -Algorithmen. Es ist in C ++/C ++ Standard-Libarary geschrieben und kann zum Erstellen und Abfragen eines Punktes im hochdimensionalen Raum verwendet werden. Die Bibliothek bietet eine Vielzahl von Algorithmen zum Erstellen und Abfragen des Index. Die Bibliothek ist so konzipiert, dass sie einfach zu bedienen ist und relativ hohe Leistung liefern kann.
Es ist ein sehr nützliches Werkzeug für Sie, um Ihren eigenen ANNS -Index -Alogrithmus ohne allzu viel Aufwand zu erstellen.
Dies ist ein Beispiel dafür, wie die Anns -Bibliothek verwendet wird, um einen Index zu erstellen und abzufragen.
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;
}Alle in dieser Bibliothek verwendeten Datensätze befinden sich im VECS -Format, den Sie von hier herunterladen können. Ich habe eine Framework -Basis auf Ann -Benchmark erstellt, um die Datensätze herunterzuladen und sie in VECS -Format umzuwandeln. Sie finden den Code in Anns/Datensatz.
Wenn Sie an der Delta-Entwicklung des Ann-Algorithmus interessiert sind, können Sie aus einer indexbasierten Klasse in der Lage sein und Ihren eigenen Algorithmus implementieren, um die ursprüngliche API zu führen. Zum Beispiel
template < typename data_t , typename label_t , float (*distance)( const data_t *, const data_t *, size_t )>
class PostFilterHCNNG : public HCNNG < data_t , distance>
/* ... */