查询索引以获取最近的邻居

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

创建索引后,您可以运行查询以获取其最邻近项。

每个 DeployedIndex 都有一个 DEPLOYED_INDEX_SERVER_IP,您可以通过列出 IndexEndpoints 进行检索。如需查询 DeployedIndex,请连接到其在端口 10000 上的 DEPLOYED_INDEX_SERVER_IP,并调用 MatchBatchMatch 方法。

以下示例使用开源工具 grpc_cli 将 grpc 请求发送到已部署的索引服务器。在第一个示例中,使用 Match 方法来发送单个查询

./grpc_cli call ${DEPLOYED_INDEX_SERVER_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match '{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}'

在第二个示例中,将两个单独的查询组合到同一个 BatchMatch 请求中。

./grpc_cli call ${DEPLOYED_INDEX_SERVER_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.BatchMatch 'requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}, {deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.2,..]}]}]'

必须从运行在与服务对等的同一 VPC 中的客户端调用这些 API。

如需运行这些查询,您还可以使用适用于 Vertex AI 的 Python Cloud 客户端库。如需了解详情,请参阅客户端库说明

调整索引

调整索引需要设置影响已部署索引的性能的配置参数,尤其是召回率和延迟时间。这些参数是在首次创建索引时设置的。您可以使用暴力索引来衡量召回率。

影响召回率和延迟时间的配置参数

  1. distanceMeasureType

    支持以下值:

    • SQUARED_L2_DISTANCE:欧几里得 L2 距离
    • L1_DISTANCE:曼哈顿 L1 距离
    • COSINE_DISTANCE:余弦距离,定义为“1 - 余弦相似度”
    • DOT_PRODUCT_DISTANCE:vDot 乘积距离,定义为点积的负数。这是默认值。

    在大多数情况下,用于相似度匹配的嵌入向量使用指标学习模型(也称为 Siamese 网络或双塔模型)计算得出。这些模型使用距离指标来计算对比损失函数。理想情况下,匹配索引的 distanceMeasureType 参数的值会匹配生成嵌入向量的模型使用的距离度量。

  2. approximateNeighborsCount

    在执行精确重新排序之前使用近似搜索查找的默认邻数量。精确重新排序是一个过程,在该过程中通过费用更高的距离计算记录通过近似搜索算法返回的结果。增加该值会提高召回率,这会使延迟时间按比例增加。

  3. treeAhConfig.leafNodesToSearchPercent

    要为每个查询搜索的叶所占的百分比。增加该值会提高召回率,这也会使延迟时间按比例增加。默认值为 10 或 10% 的叶。

  4. treeAhConfig.leafNodeEmbeddingCount

    每个叶节点的嵌入数量。此数默认设置为 1000

    此参数与召回率不具有线性相关性。增加或减少 treeAhConfig.leafNodeEmbeddingCount 参数的值并不总是会增加或减少召回率。通过实验找出最佳值。更改 treeAhConfig.leafNodeEmbeddingCount 参数的值通常比更改其他参数的值影响小。

使用暴力破解来衡量召回率

如需获得确切的最近值,请将索引与暴力算法配合使用。暴力算法可提供 100% 召回率,但延迟时间较长。使用暴力索引来衡量召回率通常不是生产生产的理想选择,但您可能会发现,在评估各种索引选项的召回率时,这种做法会很有用。

如需创建使用暴力破解算法的索引,请在索引元数据中指定 brute_force_config

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer `gcloud auth print-access-token`" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/indexes \
-d '{
    displayName: "'${DISPLAY_NAME}'",
    description: "'${DESCRIPTION}'",
    metadata: {
       contentsDeltaUri: "'${INPUT_DIR}'",
       config: {
          dimensions: 100,
          approximateNeighborsCount: 150,
          distanceMeasureType: "DOT_PRODUCT_DISTANCE",
          featureNormType: "UNIT_L2_NORM",
          algorithmConfig: {
             bruteForceConfig: {}
          }
       },
    },
}'