faiss 0.1.7 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +7 -7
- data/ext/faiss/ext.cpp +1 -1
- data/ext/faiss/extconf.rb +8 -2
- data/ext/faiss/index.cpp +102 -69
- data/ext/faiss/index_binary.cpp +24 -30
- data/ext/faiss/kmeans.cpp +20 -16
- data/ext/faiss/numo.hpp +867 -0
- data/ext/faiss/pca_matrix.cpp +13 -14
- data/ext/faiss/product_quantizer.cpp +23 -24
- data/ext/faiss/utils.cpp +10 -37
- data/ext/faiss/utils.h +2 -13
- data/lib/faiss/version.rb +1 -1
- data/lib/faiss.rb +0 -5
- data/vendor/faiss/faiss/AutoTune.cpp +292 -291
- data/vendor/faiss/faiss/AutoTune.h +55 -56
- data/vendor/faiss/faiss/Clustering.cpp +334 -195
- data/vendor/faiss/faiss/Clustering.h +88 -35
- data/vendor/faiss/faiss/IVFlib.cpp +171 -195
- data/vendor/faiss/faiss/IVFlib.h +48 -51
- data/vendor/faiss/faiss/Index.cpp +85 -103
- data/vendor/faiss/faiss/Index.h +54 -48
- data/vendor/faiss/faiss/Index2Layer.cpp +139 -164
- data/vendor/faiss/faiss/Index2Layer.h +22 -22
- data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
- data/vendor/faiss/faiss/IndexBinary.h +140 -132
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
- data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
- data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
- data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
- data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
- data/vendor/faiss/faiss/IndexFlat.cpp +116 -147
- data/vendor/faiss/faiss/IndexFlat.h +35 -46
- data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
- data/vendor/faiss/faiss/IndexHNSW.h +57 -41
- data/vendor/faiss/faiss/IndexIVF.cpp +474 -454
- data/vendor/faiss/faiss/IndexIVF.h +146 -113
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +248 -250
- data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +457 -516
- data/vendor/faiss/faiss/IndexIVFPQ.h +74 -66
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
- data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +125 -133
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +19 -21
- data/vendor/faiss/faiss/IndexLSH.cpp +75 -96
- data/vendor/faiss/faiss/IndexLSH.h +21 -26
- data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
- data/vendor/faiss/faiss/IndexLattice.h +11 -16
- data/vendor/faiss/faiss/IndexNNDescent.cpp +231 -0
- data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
- data/vendor/faiss/faiss/IndexNSG.cpp +303 -0
- data/vendor/faiss/faiss/IndexNSG.h +85 -0
- data/vendor/faiss/faiss/IndexPQ.cpp +405 -464
- data/vendor/faiss/faiss/IndexPQ.h +64 -67
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
- data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
- data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
- data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
- data/vendor/faiss/faiss/IndexRefine.cpp +115 -131
- data/vendor/faiss/faiss/IndexRefine.h +22 -23
- data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
- data/vendor/faiss/faiss/IndexReplicas.h +62 -56
- data/vendor/faiss/faiss/IndexResidual.cpp +291 -0
- data/vendor/faiss/faiss/IndexResidual.h +152 -0
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +120 -155
- data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -45
- data/vendor/faiss/faiss/IndexShards.cpp +256 -240
- data/vendor/faiss/faiss/IndexShards.h +85 -73
- data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
- data/vendor/faiss/faiss/MatrixStats.h +7 -10
- data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
- data/vendor/faiss/faiss/MetaIndexes.h +40 -34
- data/vendor/faiss/faiss/MetricType.h +7 -7
- data/vendor/faiss/faiss/VectorTransform.cpp +652 -474
- data/vendor/faiss/faiss/VectorTransform.h +61 -89
- data/vendor/faiss/faiss/clone_index.cpp +77 -73
- data/vendor/faiss/faiss/clone_index.h +4 -9
- data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
- data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +197 -170
- data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
- data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
- data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
- data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
- data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
- data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
- data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
- data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
- data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
- data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
- data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
- data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
- data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
- data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
- data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
- data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
- data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
- data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
- data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
- data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
- data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
- data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
- data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
- data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
- data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
- data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
- data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
- data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
- data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +270 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +115 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
- data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
- data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
- data/vendor/faiss/faiss/impl/FaissException.h +41 -29
- data/vendor/faiss/faiss/impl/HNSW.cpp +595 -611
- data/vendor/faiss/faiss/impl/HNSW.h +179 -200
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +672 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +172 -0
- data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
- data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
- data/vendor/faiss/faiss/impl/NSG.cpp +682 -0
- data/vendor/faiss/faiss/impl/NSG.h +199 -0
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
- data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
- data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
- data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +448 -0
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +130 -0
- data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +648 -701
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
- data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
- data/vendor/faiss/faiss/impl/index_read.cpp +547 -479
- data/vendor/faiss/faiss/impl/index_write.cpp +497 -407
- data/vendor/faiss/faiss/impl/io.cpp +75 -94
- data/vendor/faiss/faiss/impl/io.h +31 -41
- data/vendor/faiss/faiss/impl/io_macros.h +40 -29
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
- data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
- data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
- data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
- data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
- data/vendor/faiss/faiss/index_factory.cpp +269 -218
- data/vendor/faiss/faiss/index_factory.h +6 -7
- data/vendor/faiss/faiss/index_io.h +23 -26
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
- data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
- data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
- data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
- data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
- data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
- data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
- data/vendor/faiss/faiss/utils/Heap.h +186 -209
- data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
- data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
- data/vendor/faiss/faiss/utils/distances.cpp +301 -310
- data/vendor/faiss/faiss/utils/distances.h +133 -118
- data/vendor/faiss/faiss/utils/distances_simd.cpp +456 -516
- data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
- data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
- data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
- data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
- data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
- data/vendor/faiss/faiss/utils/hamming.h +62 -85
- data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
- data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
- data/vendor/faiss/faiss/utils/partitioning.h +26 -21
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
- data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
- data/vendor/faiss/faiss/utils/random.cpp +39 -63
- data/vendor/faiss/faiss/utils/random.h +13 -16
- data/vendor/faiss/faiss/utils/simdlib.h +4 -2
- data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
- data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
- data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
- data/vendor/faiss/faiss/utils/utils.cpp +304 -287
- data/vendor/faiss/faiss/utils/utils.h +53 -48
- metadata +26 -12
- data/lib/faiss/index.rb +0 -20
- data/lib/faiss/index_binary.rb +0 -20
- data/lib/faiss/kmeans.rb +0 -15
- data/lib/faiss/pca_matrix.rb +0 -15
- data/lib/faiss/product_quantizer.rb +0 -22
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
// -*- c++ -*-
|
|
9
|
-
|
|
10
8
|
#ifndef FAISS_INDEX_PQ_H
|
|
11
9
|
#define FAISS_INDEX_PQ_H
|
|
12
10
|
|
|
@@ -15,18 +13,15 @@
|
|
|
15
13
|
#include <vector>
|
|
16
14
|
|
|
17
15
|
#include <faiss/Index.h>
|
|
18
|
-
#include <faiss/impl/ProductQuantizer.h>
|
|
19
16
|
#include <faiss/impl/PolysemousTraining.h>
|
|
17
|
+
#include <faiss/impl/ProductQuantizer.h>
|
|
20
18
|
#include <faiss/impl/platform_macros.h>
|
|
21
19
|
|
|
22
|
-
|
|
23
20
|
namespace faiss {
|
|
24
21
|
|
|
25
|
-
|
|
26
22
|
/** Index based on a product quantizer. Stored vectors are
|
|
27
23
|
* approximated by PQ codes. */
|
|
28
|
-
struct IndexPQ: Index {
|
|
29
|
-
|
|
24
|
+
struct IndexPQ : Index {
|
|
30
25
|
/// The product quantizer used to encode the vectors
|
|
31
26
|
ProductQuantizer pq;
|
|
32
27
|
|
|
@@ -39,23 +34,23 @@ struct IndexPQ: Index {
|
|
|
39
34
|
* @param M number of subquantizers
|
|
40
35
|
* @param nbits number of bit per subvector index
|
|
41
36
|
*/
|
|
42
|
-
IndexPQ
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
IndexPQ(int d, ///< dimensionality of the input vectors
|
|
38
|
+
size_t M, ///< number of subquantizers
|
|
39
|
+
size_t nbits, ///< number of bit per subvector index
|
|
40
|
+
MetricType metric = METRIC_L2);
|
|
46
41
|
|
|
47
|
-
IndexPQ
|
|
42
|
+
IndexPQ();
|
|
48
43
|
|
|
49
44
|
void train(idx_t n, const float* x) override;
|
|
50
45
|
|
|
51
46
|
void add(idx_t n, const float* x) override;
|
|
52
47
|
|
|
53
48
|
void search(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
idx_t n,
|
|
50
|
+
const float* x,
|
|
51
|
+
idx_t k,
|
|
52
|
+
float* distances,
|
|
53
|
+
idx_t* labels) const override;
|
|
59
54
|
|
|
60
55
|
void reset() override;
|
|
61
56
|
|
|
@@ -66,16 +61,13 @@ struct IndexPQ: Index {
|
|
|
66
61
|
size_t remove_ids(const IDSelector& sel) override;
|
|
67
62
|
|
|
68
63
|
/* The standalone codec interface */
|
|
69
|
-
size_t sa_code_size
|
|
64
|
+
size_t sa_code_size() const override;
|
|
70
65
|
|
|
71
|
-
void sa_encode
|
|
72
|
-
uint8_t *bytes) const override;
|
|
66
|
+
void sa_encode(idx_t n, const float* x, uint8_t* bytes) const override;
|
|
73
67
|
|
|
74
|
-
void sa_decode
|
|
75
|
-
float *x) const override;
|
|
68
|
+
void sa_decode(idx_t n, const uint8_t* bytes, float* x) const override;
|
|
76
69
|
|
|
77
|
-
|
|
78
|
-
DistanceComputer * get_distance_computer() const override;
|
|
70
|
+
DistanceComputer* get_distance_computer() const override;
|
|
79
71
|
|
|
80
72
|
/******************************************************
|
|
81
73
|
* Polysemous codes implementation
|
|
@@ -87,12 +79,12 @@ struct IndexPQ: Index {
|
|
|
87
79
|
|
|
88
80
|
/// how to perform the search in search_core
|
|
89
81
|
enum Search_type_t {
|
|
90
|
-
ST_PQ,
|
|
91
|
-
ST_HE,
|
|
92
|
-
ST_generalized_HE,
|
|
93
|
-
ST_SDC,
|
|
94
|
-
ST_polysemous,
|
|
95
|
-
ST_polysemous_generalize,
|
|
82
|
+
ST_PQ, ///< asymmetric product quantizer (default)
|
|
83
|
+
ST_HE, ///< Hamming distance on codes
|
|
84
|
+
ST_generalized_HE, ///< nb of same codes
|
|
85
|
+
ST_SDC, ///< symmetric product quantizer (SDC)
|
|
86
|
+
ST_polysemous, ///< HE filter (using ht) + PQ combination
|
|
87
|
+
ST_polysemous_generalize, ///< Filter on generalized Hamming
|
|
96
88
|
};
|
|
97
89
|
|
|
98
90
|
Search_type_t search_type;
|
|
@@ -105,16 +97,23 @@ struct IndexPQ: Index {
|
|
|
105
97
|
int polysemous_ht;
|
|
106
98
|
|
|
107
99
|
// actual polysemous search
|
|
108
|
-
void search_core_polysemous
|
|
109
|
-
|
|
100
|
+
void search_core_polysemous(
|
|
101
|
+
idx_t n,
|
|
102
|
+
const float* x,
|
|
103
|
+
idx_t k,
|
|
104
|
+
float* distances,
|
|
105
|
+
idx_t* labels) const;
|
|
110
106
|
|
|
111
107
|
/// prepare query for a polysemous search, but instead of
|
|
112
108
|
/// computing the result, just get the histogram of Hamming
|
|
113
109
|
/// distances. May be computed on a provided dataset if xb != NULL
|
|
114
110
|
/// @param dist_histogram (M * nbits + 1)
|
|
115
|
-
void hamming_distance_histogram
|
|
116
|
-
|
|
117
|
-
|
|
111
|
+
void hamming_distance_histogram(
|
|
112
|
+
idx_t n,
|
|
113
|
+
const float* x,
|
|
114
|
+
idx_t nb,
|
|
115
|
+
const float* xb,
|
|
116
|
+
int64_t* dist_histogram);
|
|
118
117
|
|
|
119
118
|
/** compute pairwise distances between queries and database
|
|
120
119
|
*
|
|
@@ -122,80 +121,78 @@ struct IndexPQ: Index {
|
|
|
122
121
|
* @param x query vector, size n * d
|
|
123
122
|
* @param dis output distances, size n * ntotal
|
|
124
123
|
*/
|
|
125
|
-
void hamming_distance_table
|
|
126
|
-
int32_t *dis) const;
|
|
127
|
-
|
|
124
|
+
void hamming_distance_table(idx_t n, const float* x, int32_t* dis) const;
|
|
128
125
|
};
|
|
129
126
|
|
|
130
|
-
|
|
131
127
|
/// statistics are robust to internal threading, but not if
|
|
132
128
|
/// IndexPQ::search is called by multiple threads
|
|
133
129
|
struct IndexPQStats {
|
|
134
|
-
size_t nq;
|
|
135
|
-
size_t ncode;
|
|
130
|
+
size_t nq; // nb of queries run
|
|
131
|
+
size_t ncode; // nb of codes visited
|
|
136
132
|
|
|
137
133
|
size_t n_hamming_pass; // nb of passed Hamming distance tests (for polysemy)
|
|
138
134
|
|
|
139
|
-
IndexPQStats
|
|
140
|
-
|
|
135
|
+
IndexPQStats() {
|
|
136
|
+
reset();
|
|
137
|
+
}
|
|
138
|
+
void reset();
|
|
141
139
|
};
|
|
142
140
|
|
|
143
141
|
FAISS_API extern IndexPQStats indexPQ_stats;
|
|
144
142
|
|
|
145
|
-
|
|
146
|
-
|
|
147
143
|
/** Quantizer where centroids are virtual: they are the Cartesian
|
|
148
144
|
* product of sub-centroids. */
|
|
149
|
-
struct MultiIndexQuantizer: Index
|
|
145
|
+
struct MultiIndexQuantizer : Index {
|
|
150
146
|
ProductQuantizer pq;
|
|
151
147
|
|
|
152
|
-
MultiIndexQuantizer
|
|
153
|
-
|
|
154
|
-
|
|
148
|
+
MultiIndexQuantizer(
|
|
149
|
+
int d, ///< dimension of the input vectors
|
|
150
|
+
size_t M, ///< number of subquantizers
|
|
151
|
+
size_t nbits); ///< number of bit per subvector index
|
|
155
152
|
|
|
156
153
|
void train(idx_t n, const float* x) override;
|
|
157
154
|
|
|
158
155
|
void search(
|
|
159
|
-
|
|
160
|
-
|
|
156
|
+
idx_t n,
|
|
157
|
+
const float* x,
|
|
158
|
+
idx_t k,
|
|
159
|
+
float* distances,
|
|
160
|
+
idx_t* labels) const override;
|
|
161
161
|
|
|
162
162
|
/// add and reset will crash at runtime
|
|
163
163
|
void add(idx_t n, const float* x) override;
|
|
164
164
|
void reset() override;
|
|
165
165
|
|
|
166
|
-
MultiIndexQuantizer
|
|
166
|
+
MultiIndexQuantizer() {}
|
|
167
167
|
|
|
168
168
|
void reconstruct(idx_t key, float* recons) const override;
|
|
169
169
|
};
|
|
170
170
|
|
|
171
|
-
|
|
172
171
|
/** MultiIndexQuantizer where the PQ assignmnet is performed by sub-indexes
|
|
173
172
|
*/
|
|
174
|
-
struct MultiIndexQuantizer2: MultiIndexQuantizer {
|
|
175
|
-
|
|
173
|
+
struct MultiIndexQuantizer2 : MultiIndexQuantizer {
|
|
176
174
|
/// M Indexes on d / M dimensions
|
|
177
175
|
std::vector<Index*> assign_indexes;
|
|
178
176
|
bool own_fields;
|
|
179
177
|
|
|
180
|
-
MultiIndexQuantizer2
|
|
181
|
-
int d, size_t M, size_t nbits,
|
|
182
|
-
Index **indexes);
|
|
178
|
+
MultiIndexQuantizer2(int d, size_t M, size_t nbits, Index** indexes);
|
|
183
179
|
|
|
184
|
-
MultiIndexQuantizer2
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
180
|
+
MultiIndexQuantizer2(
|
|
181
|
+
int d,
|
|
182
|
+
size_t nbits,
|
|
183
|
+
Index* assign_index_0,
|
|
184
|
+
Index* assign_index_1);
|
|
188
185
|
|
|
189
186
|
void train(idx_t n, const float* x) override;
|
|
190
187
|
|
|
191
188
|
void search(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
189
|
+
idx_t n,
|
|
190
|
+
const float* x,
|
|
191
|
+
idx_t k,
|
|
192
|
+
float* distances,
|
|
193
|
+
idx_t* labels) const override;
|
|
195
194
|
};
|
|
196
195
|
|
|
197
|
-
|
|
198
196
|
} // namespace faiss
|
|
199
197
|
|
|
200
|
-
|
|
201
198
|
#endif
|