精炼#

最近邻搜索的候选精炼方法

#include <cuvs/neighbors/refine.hpp>

namespace cuvs::neighbors

索引#

void refine(
raft::resources const &handle,
raft::device_matrix_view<const float, int64_t, raft::row_major> dataset,
raft::device_matrix_view<const float, int64_t, raft::row_major> queries,
raft::device_matrix_view<const int64_t, int64_t, raft::row_major> neighbor_candidates,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> indices,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的设备矩阵 [n_rows, dims]

  • queries[in] 查询向量的设备矩阵 [n_queris, dims]

  • neighbor_candidates[in] 候选向量的索引 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的设备矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的设备矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
raft::device_matrix_view<const float, int64_t, raft::row_major> dataset,
raft::device_matrix_view<const float, int64_t, raft::row_major> queries,
raft::device_matrix_view<const uint32_t, int64_t, raft::row_major> neighbor_candidates,
raft::device_matrix_view<uint32_t, int64_t, raft::row_major> indices,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的设备矩阵 [n_rows, dims]

  • queries[in] 查询向量的设备矩阵 [n_queris, dims]

  • neighbor_candidates[in] 候选向量的索引 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的设备矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的设备矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
raft::device_matrix_view<const half, int64_t, raft::row_major> dataset,
raft::device_matrix_view<const half, int64_t, raft::row_major> queries,
raft::device_matrix_view<const int64_t, int64_t, raft::row_major> neighbor_candidates,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> indices,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的设备矩阵 [n_rows, dims]

  • queries[in] 查询向量的设备矩阵 [n_queris, dims]

  • neighbor_candidates[in] 候选向量的索引 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的设备矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的设备矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
raft::device_matrix_view<const int8_t, int64_t, raft::row_major> dataset,
raft::device_matrix_view<const int8_t, int64_t, raft::row_major> queries,
raft::device_matrix_view<const int64_t, int64_t, raft::row_major> neighbor_candidates,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> indices,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的设备矩阵 [n_rows, dims]

  • queries[in] 查询向量的设备矩阵 [n_queris, dims]

  • neighbor_candidates[in] 候选向量的索引 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的设备矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的设备矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
raft::device_matrix_view<const uint8_t, int64_t, raft::row_major> dataset,
raft::device_matrix_view<const uint8_t, int64_t, raft::row_major> queries,
raft::device_matrix_view<const int64_t, int64_t, raft::row_major> neighbor_candidates,
raft::device_matrix_view<int64_t, int64_t, raft::row_major> indices,
raft::device_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的设备矩阵 [n_rows, dims]

  • queries[in] 查询向量的设备矩阵 [n_queris, dims]

  • neighbor_candidates[in] 候选向量的索引 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的设备矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的设备矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
raft::host_matrix_view<const float, int64_t, raft::row_major> dataset,
raft::host_matrix_view<const float, int64_t, raft::row_major> queries,
raft::host_matrix_view<const int64_t, int64_t, raft::row_major> neighbor_candidates,
raft::host_matrix_view<int64_t, int64_t, raft::row_major> indices,
raft::host_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的主机矩阵 [n_rows, dims]

  • queries[in] 查询向量的主机矩阵 [n_queris, dims]

  • neighbor_candidates[in] 包含候选向量索引的主机矩阵 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的主机矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的主机矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
raft::host_matrix_view<const float, int64_t, raft::row_major> dataset,
raft::host_matrix_view<const float, int64_t, raft::row_major> queries,
neighbor_candidates[in] 包含候选向量索引的主机矩阵 [n_queries, n_candidates],其中 n_candidates >= k,
indices[out] 存储精炼后索引的主机矩阵 [n_queries, k],
raft::host_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的主机矩阵 [n_rows, dims]

  • queries[in] 查询向量的主机矩阵 [n_queris, dims]

  • neighbor_candidates[in] 包含候选向量索引的主机矩阵 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的主机矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的主机矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
dataset[in] 存储数据集的主机矩阵 [n_rows, dims],
queries[in] 查询向量的主机矩阵 [n_queris, dims],
raft::host_matrix_view<const int64_t, int64_t, raft::row_major> neighbor_candidates,
raft::host_matrix_view<int64_t, int64_t, raft::row_major> indices,
raft::host_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的主机矩阵 [n_rows, dims]

  • queries[in] 查询向量的主机矩阵 [n_queris, dims]

  • neighbor_candidates[in] 包含候选向量索引的主机矩阵 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的主机矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的主机矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
dataset[in] 存储数据集的主机矩阵 [n_rows, dims],
queries[in] 查询向量的主机矩阵 [n_queris, dims],
raft::host_matrix_view<const int64_t, int64_t, raft::row_major> neighbor_candidates,
raft::host_matrix_view<int64_t, int64_t, raft::row_major> indices,
raft::host_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的主机矩阵 [n_rows, dims]

  • queries[in] 查询向量的主机矩阵 [n_queris, dims]

  • neighbor_candidates[in] 包含候选向量索引的主机矩阵 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的主机矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的主机矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)

void refine(
raft::resources const &handle,
dataset[in] 存储数据集的主机矩阵 [n_rows, dims],
queries[in] 查询向量的主机矩阵 [n_queris, dims],
raft::host_matrix_view<const int64_t, int64_t, raft::row_major> neighbor_candidates,
raft::host_matrix_view<int64_t, int64_t, raft::row_major> indices,
raft::host_matrix_view<float, int64_t, raft::row_major> distances,
cuvs::distance::DistanceType metric = cuvs::distance::DistanceType::L2Unexpanded
)#

精炼最近邻搜索。

精炼是一种在近似最近邻 (NN) 搜索之后进行的操作。近似搜索已经为每个查询选择了 n_candidates 个候选邻居。我们将其缩小到 k 个邻居。对于每个查询,我们计算查询与其 n_candidates 个候选邻居之间的精确距离,并选择 k 个最近的邻居。

返回 k 个最近邻及其距离。

示例用法

using namespace cuvs::neighbors;
// use default index parameters
ivf_pq::index_params index_params;
// create and fill the index from a [N, D] dataset
auto index = ivf_pq::build(handle, index_params, dataset);
// use default search parameters
ivf_pq::search_params search_params;
// search m = 4 * k nearest neighbours for each of the N queries
ivf_pq::search(handle, search_params, index, queries, neighbor_candidates,
               out_dists_tmp);
// refine it to the k nearest one
refine(handle, dataset, queries, neighbor_candidates, out_indices, out_dists,
        index.metric());

参数:
  • handle[in] raft 句柄

  • dataset[in] 存储数据集的主机矩阵 [n_rows, dims]

  • queries[in] 查询向量的主机矩阵 [n_queris, dims]

  • neighbor_candidates[in] 包含候选向量索引的主机矩阵 [n_queries, n_candidates],其中 n_candidates >= k

  • indices[out] 存储精炼后索引的主机矩阵 [n_queries, k]

  • distances[out] 存储精炼后距离的主机矩阵 [n_queries, k]

  • metric[in] 要使用的距离度量。默认为欧氏距离 (L2)