结构体 faiss::ScalarQuantizer
-
struct ScalarQuantizer : public faiss::Quantizer
均匀量化器具有范围 [vmin, vmax]。 该范围对于所有维度可以相同(均匀),或者对于每个维度可以不同(默认)。
公共类型
-
enum QuantizerType
值
-
enumerator QT_8bit
每个分量 8 位
-
enumerator QT_4bit
每个分量 4 位
-
enumerator QT_8bit_uniform
相同,所有维度共享范围
-
enumerator QT_4bit_uniform
-
enumerator QT_fp16
-
enumerator QT_8bit_direct
uint8 的快速索引
-
enumerator QT_6bit
每个分量 6 位
-
enumerator QT_bf16
-
enumerator QT_8bit_direct_signed
范围从 [-128 到 127] 的有符号 int8 的快速索引
-
enumerator QT_8bit
-
enum RangeStat
均匀编码器可以使用不同的统计信息来估计 unform 编码器的可表示值的范围。这里 rs = rangestat_arg
值
-
enumerator RS_minmax
[min - rs*(max-min), max + rs*(max-min)]
-
enumerator RS_meanstd
[mean - std * rs, mean + std * rs]
-
enumerator RS_quantiles
[Q(rs), Q(1-rs)]
-
enumerator RS_optim
重建误差的交替优化
-
enumerator RS_minmax
公共函数
-
ScalarQuantizer(size_t d, QuantizerType qtype)
-
ScalarQuantizer()
-
void set_derived_sizes()
基于 qtype 和 d 更新内部值
-
virtual void train(size_t n, const float *x) override
训练量化器
- 参数:
x – 训练向量,大小 n * d
-
virtual void compute_codes(const float *x, uint8_t *codes, size_t n) const override
编码一组向量
- 参数:
x – 要编码的向量,大小 n * d
codes – 输出代码,大小 n * code_size
-
virtual void decode(const uint8_t *code, float *x, size_t n) const override
解码一组向量
- 参数:
codes – 要解码的代码,大小为 n * code_size
x – 输出向量,大小为 n * d
-
SQuantizer *select_quantizer() const
-
SQDistanceComputer *get_distance_computer(MetricType metric = METRIC_L2) const
-
InvertedListScanner *select_InvertedListScanner(MetricType mt, const Index *quantizer, bool store_pairs, const IDSelector *sel, bool by_residual = false) const
公共成员
-
QuantizerType qtype = QT_8bit
-
float rangestat_arg = 0
-
size_t bits = 0
每个标量代码的比特数
-
std::vector<float> trained
训练后的值(包括范围)
-
size_t d
输入向量的大小
-
size_t code_size
每个索引向量的字节数
-
struct SQDistanceComputer : public faiss::FlatCodesDistanceComputer
公共函数
-
inline SQDistanceComputer()
-
virtual float query_to_code(const uint8_t *code) const = 0
-
inline virtual float distance_to_code(const uint8_t *code) final
计算当前查询到编码向量的距离
-
inline virtual float operator()(idx_t i) override
计算向量 i 到当前查询的距离
-
virtual void set_query(const float *x) = 0
在计算距离之前调用。指针 x 在调用 operator () 时应保持有效。
-
inline virtual void distances_batch_4(const idx_t idx0, const idx_t idx1, const idx_t idx2, const idx_t idx3, float &dis0, float &dis1, float &dis2, float &dis3)
计算当前查询与 4 个存储向量之间的距离。某些 DistanceComputer 实现可能会从中受益匪浅。
公共成员
-
const float *q
-
const uint8_t *codes
-
size_t code_size
-
inline SQDistanceComputer()
-
struct SQuantizer
公共函数
-
virtual void encode_vector(const float *x, uint8_t *code) const = 0
-
virtual void decode_vector(const uint8_t *code, float *x) const = 0
-
inline virtual ~SQuantizer()
-
virtual void encode_vector(const float *x, uint8_t *code) const = 0
-
enum QuantizerType