向量数据的质量怎么监控?Embedding 漂移怎么发现?
面试怎么回答
向量可能出现生成失败、模型版本混用、输入是空或乱码、和文档不同步、以及数据或提问的分布漂移。入库时检查维度、NaN、全零、范数是否正常,记录模型版本并保证同一索引版本一致,片段文本长度正常。定期做一致性检查:文档、片段、向量数量对账,没有孤儿向量;抽样重算向量和已存的比较,相似度不够高说明模型或预处理变了;文档更新时间晚于向量生成时间的说明没同步。分布上监控新入库向量的平均向量、平均相似度和聚类分布,以及用户提问向量里和现有文档都不相似的比例。最终标准是固定检索评测集的 Recall@K,加上线上最高相似度分布、未找到答案的比例和负评率。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
RAG 系统上线几个月后,检索效果慢慢变差,却没有任何告警。传统的数据质量规则(空值、唯一性、范围)对向量几乎不起作用:一个 1024 维的浮点数组,怎么判断它「对不对」?面试官问这题,想看你能不能为向量这种新型数据设计质量监控。
向量可能出的问题
- 生成失败:向量是空的、全零、维度不对、包含 NaN;
- 模型版本混用:一部分向量是旧模型生成的,一部分是新模型,彼此不可比;
- 输入有问题:片段文本是空的、乱码、解析失败的内容,生成的向量没有意义;
- 数据不同步:文档更新了,向量没更新;文档删除了,向量还在;
- 分布漂移:新入库的数据和原有数据的主题、语言、格式发生了变化,或者用户提问的分布变了,检索效果下降。
基础的质量检查(入库时)
- 维度正确、没有 NaN 和无穷值、不是全零向量;
- 向量的范数在正常范围(如果模型输出是归一化的,范数应该接近 1);
- 每条向量记录模型版本,检查同一索引中模型版本一致;
- 对应的片段文本长度正常、不是乱码。
一致性检查(定期)
- 文档、片段、向量的数量对账:每个有效文档都有片段,每个片段都有向量,没有孤儿向量;
- 抽样重算:随机抽一批片段重新生成向量,和存储的向量比较相似度,应该非常接近,否则说明模型或预处理发生了变化;
- 更新时间检查:文档更新时间晚于向量生成时间的,说明没有同步。
分布监控
- 统计特征:对新入库的向量,计算平均向量、向量之间的平均相似度、聚类分布,和历史基线对比;
- 主题分布:对向量聚类,观察各个簇的大小变化,发现新的主题出现或旧主题消失;
- 查询侧:用户提问的向量分布变化,比如出现了大量和现有文档都不相似的问题,说明知识库覆盖不足。
效果监控(最终标准)
- 固定的检索评测集,定期跑,监控 Recall@K 的变化;
- 线上指标:检索结果的最高相似度分布(整体下降说明匹配变差)、「未找到相关信息」回答的比例、负评率。