Milvus向量数据库05-常见问题整理
1-什么是PipeLine
这张图展示了一个文档处理和搜索系统的架构,主要分为两个部分:Ingestion Pipeline(摄取管道)和 Search Pipeline(搜索管道)。下面是对图中各部分的详细解释:
-
文档和元数据:
- 图的左侧显示了各种类型的文档(如.txt, .pdf, .doc等)和其他元数据(如摘要、日期等)。
-
Ingestion Pipeline(摄取管道):
- 文档和其他元数据通过摄取管道进入系统。
- 这些文档被处理并存储到一个向量数据库的集合(Collection)中。
-
向量数据库 Collection:
- 文档被切片成多个部分(文档切片1、文档切片2、文档切片3、文档切片4)。
- 每个切片文本(切片文本1等)和其他元数据被转换成Embedding向量,这些向量是文档内容的数值表示,用于后续的搜索和匹配。
-
Embedding 向量:
- 每个文档切片和相关元数据都被转换成Embedding向量,这些向量是高维空间中的点,用于表示文档内容的语义信息。
-
Search Pipeline(搜索管道):
- 用户通过搜索管道输入查询文本(Q)。
- 查询文本同样被转换成Embedding向量。
- 系统通过比较查询文本的Embedding向量与数据库中存储的Embedding向量,来找到最相关的文档切片。
-
搜索和匹配:
- 系统使用Embedding向量来进行相似性搜索,找到与查询文本最匹配的文档切片。
- 这些匹配的文档切片随后可以被检索出来,提供给用户。
总的来说,这个系统通过将文档内容转换成Embedding向量,实现了高效的文本搜索和信息检索。这种方法特别适用于处理大量文本数据,并且能够理解文本的语义内容,从而提供更准确的搜索结果。
2-如何选择entry的属性作为向量字段
选择entry的属性作为向量字段是向量数据库中的一个重要步骤,这通常取决于数据的特性和应用场景。以下是一些关键因素和策略,用于指导如何选择和优化向量字段:
-
数据相关性:选择与查询意图高度相关的属性作为向量字段。这些属性应该能够捕捉数据的核心特征,从而提高搜索的准确性和召回率。
-
维度和大小:向量的维度和大小会影响存储需求和搜索性能。选择适当的维度可以平衡搜索质量和系统性能。例如,Elasticsearch的dense_vector字段类型存储数值的密集向量,主要用于k最近邻(kNN)搜索,并且dense_vector类型不支持聚合或排序。
-
索引类型:根据应用需求选择合适的索引类型。不同的索引类型(如KD-Tree、LSH、HNSW)有不同的性能特点,适用于不同的查询场景。
-
量化和压缩:为了提高搜索速度和减少存储空间,可以考虑对向量进行量化和压缩。量化可以减少向量的精度,而压缩可以进一步减少存储需求。
-
数据分布:考虑数据在向量空间中的分布。如果数据分布不均匀,可能需要使用特定的索引或搜索策略来优化性能。
-
查询类型:根据常见的查询类型来选择向量字段。例如,如果查询主要基于文本内容,那么文本相关的属性应该是向量字段的首选。
-
性能测试:在实际部署前,对不同的向量字段选择进行性能测试。这可以帮助你了解不同选择对搜索性能的影响,并据此做出优化。
-
可扩展性:考虑系统的可扩展性。随着数据量的增长,向量数据库需要能够处理更多的数据和更复杂的查询。
-
维护和更新:选择易于维护和更新的向量字段。这包括考虑数据的更新频率和向量字段的更新成本。
-
多模态数据:如果系统需要处理多模态数据(如文本、图像、音频),则需要选择能够统一表示这些数据类型的向量字段。
通过综合考虑这些因素,你可以选择最适合你应用场景的向量字段,从而优化向量数据库的性能。
3-向量数据库架构
4-如何优化向量数据库的召回率?
优化向量数据库的召回率是一个多方面的挑战,涉及到数据预处理、模型选择、索引优化等多个环节。以下是一些有效的优化策略:
-
选择合适的索引类型和参数:索引的选择对于向量召回的性能至关重要。例如,Milvus支持多种索引类型,用户可以根据对延迟、内存使用和召回率的需求进行选择。对于查询Recall要求较高,QPS不高的场景,可以选择DiskANN索引,它依赖高性能的磁盘索引,借助NVMe磁盘缓存全量数据,在内存中只存储量化后的数据。
-
优化分词器:通过去除停顿词、单复数标准化等策略,可以提高召回率。例如,使用IK分词器可以提升BM召回率约1%。
-
替换embedding模型:测试不同的embedding模型,选择效果最好的模型以提升向量召回率。例如,测试了xiaobu,bge,gte模型,其中一些模型能够提升向量召回率约15%。
-
丰富数据:定义有层级的数据结构,可以有效地解决一些和标题相关的问题的case,从而提升召回率。
-
意图识别:通过判别是否走知识库检索,解决非检索问题,提升召回率。
-
为问题生成假设性答案(HyDE):通过假设性问答,解决场景问题,提升长尾的query整体召回率约3%。
-
query蒸馏:去除query中的不相关的关键词,提升召回排名。
-
query问题拆解 CoT思维链:解决复杂问题的问答,复杂难问题拆解后回答效果好。
-
排序策略rerank:提高相关文档的排名,效果明显好。
-
ELSER稀疏向量模型:在英文场景下,稀疏向量的召回率相比较BM25,提升明显,topK召回率有很大提升,top1提升了31%,top5提升了28.5%,top10提升了22%。
-
合理选择流式插入和批量导入:在有大量离线写入的场景,建议使用BulkInsert,因为它不会对查询性能造成太大的影响,并且也大大减少了流式写入对消息队列产生的压力。
通过这些策略的综合运用,可以显著提升向量数据库的召回率,从而提高搜索结果的质量和相关性。
5-如何评估一个向量数据库的性能
评估向量数据库性能时,需要考虑多个关键指标和测试方法:
-
性能指标:主要性能指标包括数据插入能力和速度、查询延迟(Latency)、最大吞吐量(QPS)。对于向量数据库,还需要关注索引构建时间和召回率(recall),后者衡量检索准确性。召回率越高,表示返回的查询结果中包含更多正确的匹配项。
-
查询性能评估:查询性能通常包括Latency、QPS和Recall三个关键指标。Latency测试用于测量单一查询所需的时间,常用的是P99 Latency,表示99%的查询在该时间内完成。QPS表示数据库在高并发条件下的查询处理能力。Recall评估系统在近似查询时的效果。
-
数据集影响:不同向量数据库在面对多样化数据集时表现出显著的性能差异。较大的数据集对分布式架构构成挑战,可能导致性能降低。测试数据集的维度和分布同样影响测试结果。使用具有不同数据大小、维度和分布的测试数据集来评估向量数据库,可以获得更精确和全面的测试结果。
-
性能测试工具:在评估向量数据库的过程中,ANN Benchmark和VectorDBBench是两个常用的性能测试工具。ANN Benchmark用于评估不同的向量索引算法在真实数据集上的性能,而VectorDBBench专为向量数据库全面评估而设计,关注资源消耗、数据加载能力和系统稳定性等因素。
-
性能评估技巧:准确评估数据插入性能需要检查最大插入容量和插入时间。插入时间应覆盖从开始插入数据集到可以进行有效查询的整个过程。评估查询性能时,需要考虑Latency、QPS和Recall的结合。
-
系统稳定性:在高负载下,向量数据库的稳定性也是一个重要的评估指标。这包括系统在长时间运行后的性能一致性以及在面对突发流量时的响应能力。
-
资源消耗:评估向量数据库时,还需要考虑其资源消耗情况,包括CPU使用率、内存消耗、磁盘IO及网络情况。这些因素直接影响到数据库的运行成本和可扩展性。
-
扩展性:衡量数据库能否处理快速增长数据量的指标。数据库的扩展性决定了其在数据量增长时的性能表现和维护成本。
-
功能支持:评价数据库是否支持关键功能,如多租户、灾难恢复和多索引等企业级功能的能力。
通过综合这些指标和方法,可以全面评估向量数据库的性能,为选择合适的数据库产品提供依据。
6-向量数据库 Collection的工作原理
向量数据库Collection的工作原理主要涉及以下几个关键步骤:
-
数据存储:向量数据库通过向量化技术将各种对象(如商品、文档或数据点)映射为多维空间中的向量,每个对象都对应一个向量,该向量捕捉了对象的多样特征或属性。这些嵌入被用来存储和组织对象。
-
索引构建:为了提高向量查询的效率,向量数据库会构建相应的索引结构。常用的索引结构包括KD-Tree、LSH(局部敏感哈希)、B树等。索引的构建过程涉及将向量映射到一个特定的数据结构上,以便能够快速进行相似度计算和数据查询。
-
相似度计算:当需要查询与给定向量最相似的向量时,向量数据库会使用事先构建好的索引结构进行相似度计算。相似度计算的方法根据索引结构的不同而不同,例如在KD-Tree中使用欧氏距离或曼哈顿距离,在LSH中使用哈希函数计算相似度。
-
查询处理:向量数据库接收到用户查询后,会通过索引结构快速定位与查询向量最相似的向量,并返回相应的结果。根据具体的应用场景,查询结果可能包含相似向量的ID、相似度值,或者其它附加信息。
-
持续更新:向量数据库通常需要支持数据的持续更新和删除操作。因为实际应用中,向量数据可能会不断增加和变化,所以数据库需要支持高效的数据插入和删除操作,同时保持索引结构的一致性。
-
工作流程:用户查询通过应用程序转换为向量嵌入,然后与数据库中存储的向量嵌入进行比较。通过计算相似性,系统能够识别出与查询内容最相关的嵌入,并据此生成响应,将包含与这些嵌入相关联的相关信息的响应发送回给用户。
-
相似性度量:向量数据库采用多种数学技术来衡量向量之间的相似度,其中一种常见方法是余弦相似性。
-
实现技术:向量数据库的实现技术涉及多种算法和工具,通过优化数据存储、索引构建和查询处理,实现高效的高维向量数据管理和检索。例如,HNSW(Hierarchical Navigable Small World)算法是一种基于小世界图理论的近似最近邻搜索(ANN)算法,通过构建一个分层的导航图结构,实现高效的高维向量相似性检索。
-
应用领域:向量数据库在许多领域都有广泛的应用,如人脸识别、推荐系统、图像检索等,它能够快速找到与给定向量相似的数据,为许多应用提供了便利。
通过这些步骤,向量数据库Collection能够有效地存储、索引和检索向量数据,为用户提供快速准确的相似性搜索服务。