Page 52 - 《软件学报》2026年第3期
P. 52
王嘉翼 等: 向量数据库的 K 近邻图高效更新方法 1015
表 1 实验数据集
属性 Stack Wiki DigiFace
数据类型 文本 文本 图像
数据规模 1 000 000 1 000 000 144 000
平均词数 296 715 N/A
嵌入维度 768 768 768
微调前100近邻平均距离 0.941 0.927 6.35
微调后100近邻平均距离 0.985 0.976 8.74
文本语义表示方面, 本文采用 Sentence Transformer 中的 all-mpnet-base-v2 模型提取文本的语义嵌入, 每个嵌
入向量维度为 768. 我们使用 STS (semantic textual similarity) 数据集对该模型进行微调. STS 数据集由大量句子对
组成, 每对句子被标注了一个从 0 到 5 的相似度得分, 反映两个句子在语义上的接近程度. 该数据集覆盖了同义句、
翻译句和含义相近或相异的表达形式, 非常适合作为文本嵌入模型的微调数据. 对嵌入模型使用 STS 数据集进行
微调, 能够提升模型对语义相似度的判断能力. 这对于语义搜索、同义句检测和其他文本理解任务的应用具有重
要意义.
图像的嵌入向量方面, 本文采用 ViT (vision Transformer) 模型 [22] 计算图像的嵌入, 采用在 ImageNet-21K 上进
行过预训练的 vit-base-patch16-224-in21k 作为微调前的模型. DigiFace 数据集提供了不同图片中人物身份的标记,
我们使用数据集 DigiFace 中未被用于嵌入向量计算的部分, 使用对比学习对预训练的嵌入模型进行微调.
−5
10 , 默认以 16 的批大小 (batch size) 对嵌入模
在微调过程中, 我们采用余弦相似度损失函数, 设置学习率为
型训练 1 个轮次.
对于乘积量化, 我们设定划分数 M = 4, 即将每个 768 维嵌入向量分为 4 个子向量, 每个子向量聚类数 c = 256,
并在预处理阶段对每个子向量选取前 40%, 即 λ = 0.4c = 102 个距离最接近的聚类中心. 检查阈值默认 取 θ 0.2.
为了全面评估本文方法的效果, 我们将本文方法与以下 3 种基线进行对比.
● Stale: 直接使用微调前的嵌入向量构建的 K 近邻图, 未做任何调整.
● NN-descent: 在微调后的嵌入向量上, 从头执行 NN-descent 算法构建 K 近邻图.
● NN-descent-init: 以微调前的嵌入向量上建立的 K 近邻图作为初始图, 在微调后的嵌入向量上继续执行 NN-
descent 算法对 K 近邻图进行优化.
评估指标方面, 我们使用召回率 (Recall@100, 即前 100 个真实邻居中被正确检索出的比例) 衡量不同方法得
出的 K 近邻图的准确性, 数值越高表示 K 近邻图越准确. 我们使用欧氏距离衡量向量间的距离 (由于本文使用的
嵌入模型中, 嵌入向量会被标准化为单位长度, 使用欧氏距离与 Cosine 距离等价). 为了评估建立出的 K 近邻图结
构上与真实的 K 近邻图的差异, 我们还计算了各个节点度数的均方根误差 (root mean square error, RMSE) 进行评
估. 此外, 为评估不同方法的执行效率, 我们记录每种方法在微调后调整 K 近邻图所耗费的时间, 时间消耗越短表
示方法越高效.
所有实验均在一台 Ubuntu 服务器上完成, 服务器的配置参数为 256 GB 内存、4 张 NVIDIA RTX 3090 显卡,
以及 Intel(R) Xeon(R) Gold 6242R CPU @ 3.10 GHz 处理器.
4.2 K 近邻图准确度比较
本文对比分析了在嵌入向量微调后, K 近邻图执行更新 3 min 时, 不同方法所生成的 K 近邻图的召回率, 结果
如图 7 所示. 实验结果表明, FastAdjust 在各个数据集上均显著优于未对 K 近邻图进行调整的 Stale 以及采用 NN-
descent 进行增量更新的方法. 以 Stack 数据集为例, FastAdjust 的召回率达到了 96.4%, 而 Stale、NN-descent 和
NN-descent-init 的召回率分别仅为 84%、85% 和 89%.
Stale 方法的召回率较低, 主要原因在于其仍使用微调前的嵌入向量构建的 K 近邻图. 由于微调后向量的空间
分布已发生改变, 原有的邻居关系失去了准确性, 导致检索性能下降. NN-descent 方法虽然重新构建了 K 近邻图,

