Page 127 - 《软件学报》2026年第3期
P. 127

1090                                                       软件学报  2026  年第  37  卷第  3  期


                 节深入地剖析这些现象, 揭示其背后的原因, 从而为第                3  节的优化方法提供理论基础与数据支撑.
                  2.1   实验设置
                    在批量插入相似数据场景下, 为分析            HNSW  索引性能下降的原因, 本节设计了对比实验, 模拟该场景来评估
                 索引的性能和量化索引内部的结构特征. 实验从宏观性能指标与微观拓扑结构两个维度, 定量地揭示影响                                  HNSW
                 索引召回率的原因. 我们选择了多个广泛使用的代表性向量数据集, 包括                       GIST1M [41,42] 、MSong (Million Song) [43]
                 和  Enron [44]  (详见第  4.1  节). 这些数据集在维度、分布特性和内在结构上存在显著差异, 覆盖了较多实际应用场
                 景. 接下来, 我们将详细阐述数据处理、负载构建与评价指标这                   3  个方面的内容.
                    ● 生成相似数据与划分数据集. 为模拟真实应用中的批量插入场景, 本节提出了构造相似数据的方法. 相似数
                 据在较小的距离空间内存在微小变化, 因此采用一种基于维度扰动的数据生成方法. 该方法以原始数据集中的向
                 量作为母向量, 为其生成距离上较近的相似向量. 该生成过程如下: (1) 扰动窗口: 对于选定的母向量                          v∈R , 确定一
                                                                                                 d
                 个待扰动的维度子空间, 其宽度          w  由一个预设比例     r w  (默认为  0.3) 控制, w  的计算方式为  w = ⌊r w ·d⌋. 为模拟真实
                 数据中特征重要性分布的随机性, 窗口起始维度                d star 从均匀分布  U 1 中采样确定; (2) 引入有界均匀扰动: 在维度
                                                          t
                 窗口  [d start , d start +w) 内, 对每个维度添加服从均匀分布  U 2 的随机扰动, 窗口外的维度值保持不变. 该方法生成的向
                 量为实验中的更新向量. (3) 构造查询集: 将以上扰动机制应用到原始查询集, 生成用于评估检索性能的相似查
                 询集.
                    ● 构建批量插入相似数据场景. 在持续写入相似数据 (上述方式产生相似数据) 时, 为精确捕捉                          HNSW  索引在
                 性能以及索引结构上的变化情况, 本节设计了一种增量式的写入负载与评估流程. 该流程实现了多次批量插入相
                 似数据场景, 记录各级负载召回率的变化情况. 在批量插入相似向量时, 通过精确计算                          HNSW  索引中数据特征的
                 变化, 进一步分析召回率退化的原因.
                    实验场景和负载写入流程如下. 我们控制相似数据负载中相似数据占比, 以模拟批量写入相似数据的实际应
                 用场景. 构建基础索引: 该过程使用原始向量构建               HNSW  索引, 未引入任何相似数据. 更新相似向量: 在基础索引
                 的基础上, 批量插入相似数据负载. 实验定义了多级相似数据负载, 各级的相似数据占比从                            1%  递增至  5%. 其中,
                 Batch  表示在原始向量的基础上, 连续写入相似向量的场景. 各个数据集的基础向量分别如下: GIST1M                         为  10  万,
                 MSong  为  10  万, Enron  为  9  万.
                    在写入每个负载       (相似数据占比为     1%–5%) 后, 实验将采用相似查询集 (默认         1 000  条), 计算当前索引的召回
                 率, 并获取邻居关系信息. 实验中设计增量式的写入负载与评估流程, 在随着相似数据在索引中占比的持续提升的
                 过程中, 捕捉索引中呈现的召回率退化现象, 重点关注索引的以下指标: 检索召回率和相似数据邻居数 (详见第
                 2.3  节).
                    ● 检索召回率. 用于衡量索引的宏观检索精度. 向量检索主要关注查全率, 即                      recall@K, 其定义为算法返回的
                 top-K  结果集与真实   top-K  最近邻集之间交集的占比. 该指标直观地反映了索引成功找回真实近邻的能力.
                  2.2   批量插入场景下召回率的变化
                    本节展示了在持续插入相似数据时             HNSW  索引检索召回率的变化情况. 实验场景如第              2.1  节所述, 我们在相
                 似数据占比为     1%–5%  负载的写入过程中测量召回率 (recall@K) 的变化.
                    图  4  展示了在插入相似数据过程中, GIST1M         数据集在索引参数为       M=24, efC=64  时召回率的变化情况. 图中
                 每条曲线 (Batch-efSearch) 对应特定的查询深度参数          efSearch  以及  top-K (默认为  10), 纵坐标表示查询的召
                 回率.
                    ● 实验现象与数据分析. 实验结果表明, 随着相似数据占比的增加, HNSW                   索引的检索召回率呈现出逐渐下降
                 的趋势, 该现象在     3  个数据集以及不同索引参数下都普遍存在. 如图              4  所示, 当  efSearch  为  100  时, 相似数据占比
                 为  1%  时的查询召回率约为      0.9, 在相似数据占比从     1%  提升至  5%  的过程中, 召回率持续下降, 最低为        0.89, 其降
                 幅达到   9%. 即便在  efSearch  为  150  和  200  时, 5%  负载的召回率 (0.899  和  0.907) 相较于  1% (约  0.985) 依然存在显
                 著差距. 上述现象反映了批量插入相似数据对              HNSW  检索精度存在持续性损害.
   122   123   124   125   126   127   128   129   130   131   132