هذه مكتبة أساسية للغاية لخوارزميات Anns Sota. يتم كتابته في C ++/C ++ القياسي القياسي ويمكن استخدامه لبناء والاستعلام عن فهرس النقاط في مساحة عالية الأبعاد. توفر المكتبة مجموعة متنوعة من الخوارزميات لبناء الفهرس والاستعلام عنه. تم تصميم المكتبة لتكون سهلة الاستخدام وتوفير أداء مرتفع نسبيا.
إنها أداة مفيدة للغاية بالنسبة لك لإنشاء alogrithm index anns الخاص بك دون جهد كبير.
هذا مثال على كيفية استخدام مكتبة Anns لبناء فهرس والاستعلام عنه.
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 -Benchmark ، لتنزيل مجموعات البيانات وتحويلها إلى VECS -Format. يمكنك العثور على الرمز في ANNS/DataSet.
إذا كنت مهتمًا بتطوير دلتا لخوارزمية ANN ، فيمكنك Intert من فئة قائمة على الفهرس وتنفيذ الخوارزمية الخاصة بك للحفاظ على واجهة برمجة التطبيقات الأصلية. على سبيل المثال
template < typename data_t , typename label_t , float (*distance)( const data_t *, const data_t *, size_t )>
class PostFilterHCNNG : public HCNNG < data_t , distance>
/* ... */