鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

Initialize

接口定义

  1. Status ScannInterface::Initialize(ConstSpan<float> dataset, DatapointIndex n_points, const std::string& config, int training_threads);
  2. Status ScannInterface::Initialize(ConstSpan<float> dataset, DatapointIndex n_points, const std::string& config, int training_threads, GmmUtils::KMeansParams kmOpt);
  3. Status ScannInterface::Initialize(ConstSpan<float> dataset, DatapointIndex n_points, const std::string& config, int training_threads, GmmUtils::KMeansParams kmOpt, float filter_thr, int filter_type);

接口用途

  1. 用于构建索引(与开源算法方法保持一致)。
  2. 用于构建索引,第2种Initialize重载函数,为IVF和PQ中的KMeans聚类设置额外参数用于调优(相比开源算法新增方法)。
  3. 用于构建索引,第3种Initialize重载函数,为IVF和PQ中的KMeans聚类和Component filtering设置额外参数(相比开源算法新增方法)。

参数说明

参数名称

数据类型

描述

取值范围

dataset

ConstSpan<float>

底库向量。

限制非空。

n_points

DatapointIndex

底库向量的数量。

限制与dataset的长度保持一致,其中“dataset”表示底库向量。

config

const std::string&

构建索引所需的配置文件,包含所有配置参数。

-

training_threads

int

构建索引时的线程数。

大于等于1。

kmOpt

GmmUtils::KMeansParams

配置KMeans的调优参数。

-

filter_thr

float

过滤阈值。

[0, 1],默认为0。

filter_type

int

过滤类型。

  • 0:根据向量中0的元素个数进行过滤。默认为0。
  • 1:根据向量中各个数与均值偏差大小进行过滤。

config_pbtxt

const std::string&

加载索引所需的配置文件。

-

scann_assets_pbtxt

const std::string&

索引文件列表。

-

其中,“kmOpt”的结构体KMeansParams包含以下参数,参数说明如表1所示。
struct KMeansTunableExtraParams {
        int32_t iter;
        int32_t sample;
        int32_t init; 
};

struct KMeansParams { 
        KMeansTunableExtraParams ivf; 
        KMeansTunableExtraParams pq; 
};
表1 KMeansParams包含的参数说明

参数名称

数据类型

描述

取值范围

iter

int32_t

表示K-Means算法的迭代次数。

[0, MAXINT],默认为0。

sample

int32_t

表示采样子集的大小。

-

init

int32_t

表示K-Means聚类中心的初始化方式。

{0,1,2,3},默认为0。

  • 1:基于“平均距离”初始化。
  • 2:K-Means++初始化。
  • 3:随机初始化。
  • 0:不开启PQ中KMeans优化。

“config”由create_config.py结合如表2所示的参数生成。

表2 参数说明

参数名称

数据类型

描述

取值范围

n_leaves

int

IVF分区总子空间个数。

大于等于1。

nb

int32_t

底库向量的数量。

限制与dataset的长度保持一致,其中“dataset”表示底库向量。

metricType

std::string

向量的距离类型。

“dot_product”“squared_l2”

dims_per_block

int

PQ量化合并维度数。

[1, dim],其中“dim”表示底库向量的维度。

avq_threshold

float

不对称分桶参数,仅对L2(squared_l2)数据集生效。

[0,1]

dim

int32_t

底库向量的维度。

限制与dataset的维度保持一致,其中“dataset”表示底库向量。

topK

int

最终返回结果数量。

大于等于1。

soar_lambda

float

控制正交性的参数,仅对IP(dot product)数据集生效。

大于0,当值为“-1”时表示不开启此参数。

overretrieve_factor

float

指定过检索因子,与“soar_lambda”一起使用,仅对IP(dot_product)数据集生效。

[1,2],当值为“-1”时表示不开启此参数。

“config”生成指令如下:
python create_config.py  + std::to_string(n_leaves) + " "
                         + std::to_string(nb) + " "
                         + metricType + " "
                         + std::to_string(dims_per_block) + " "
                         + std::to_string(avq_threshold) + " "
                         + std::to_string(dim) + " "
                         + std::to_string(topK) + " "
                         + std::to_string(soar_lambda) + " "
                         + std::to_string(overretrieve_factor)

返回值

数据类型

说明

Status

表示方法执行状态,通过status.ok()判断是否成功。