AI创想

标题: 草履虫都看得懂的向量数据库教程,一文就够了 [打印本页]

作者: 米落枫    时间: 10 小时前
标题: 草履虫都看得懂的向量数据库教程,一文就够了
作者:CSDN博客
向量数据库的要点总结

什么是向量数据库?

传统数据库的局限性

向量数据库的核心特性

核心功能

向量类型

高级优化

分布式部署

数据安全

应用场景

工具与支持

关键优势


什么是向量数据库?

(, 下载次数: 0)


向量数据库架构
我们每天生成的数百万TB数据中,大多数是非结构化的。比如你拍的食物照片、工作中共享的PDF文件,或者保存但可能永远不会听的播客。这些数据并不能整齐地适配于行列。
非结构化数据缺乏严格的格式或模式,这使得传统数据库难以管理。然而,这些非结构化数据对人工智能(AI)机器学习现代搜索引擎有着巨大的潜力。
向量数据库是一种专门设计用于高效处理高维向量数据的系统。它在索引、查询和检索这些数据方面表现出色,能够实现传统数据库难以轻松完成的高级分析和相似性搜索。
传统数据库的挑战

传统的OLTP和OLAP数据库几十年来一直是数据存储的核心。它们非常擅长管理具有明确模式的结构化数据,如姓名、地址、电话号码和购买历史。
(, 下载次数: 0)


OLTP 和 OLAP 数据库的结构
但当数据无法轻易分类时,例如PDF文件中的内容,事情就变得复杂了。
你可以将PDF文件以原始数据形式存储,可能还附加一些元数据。然而,数据库仍然无法理解文档内部的内容、对其进行分类,甚至无法搜索其中包含的信息。
这不仅仅适用于PDF文档。想想每天生成的大量文本、音频和图像数据。如果数据库无法理解这些数据的意义,那么如何在数据中进行搜索或发现关系?
(, 下载次数: 0)


向量数据库的结构
向量数据库通过将非结构化数据表示为向量,理解数据的上下文概念相似性,从而实现基于数据相似性的高级分析和检索。
何时使用向量数据库

不确定该使用向量数据库还是传统数据库?以下对比表可能会有所帮助。
特性OLTP 数据库OLAP 数据库向量数据库
数据结构行和列行和列向量
数据类型结构化结构化/部分非结构化非结构化
查询方法基于SQL(事务性查询)基于SQL(聚合、分析查询)向量搜索(基于相似性)
存储重点基于模式,优化更新基于模式,优化读取上下文和语义
性能优化高容量事务处理优化复杂分析查询优化非结构化数据检索
使用场景库存管理、订单处理、CRM商业智能、数据仓库相似性搜索、推荐、RAG、异常检测等
什么是向量?

(, 下载次数: 0)


向量的定义
当机器需要处理非结构化数据(如图像、文本或音频文件)时,首先必须将这些数据转化为一种它可以处理的格式:向量
向量是数据的数值表示形式,能够捕捉数据的上下文语义
传统数据库难以理解非结构化数据的含义,而向量可以将这些数据转化为机器可以处理的形式。例如,从文本生成的向量可以表示单词之间的关系和含义,使机器能够比较并理解其上下文。
向量数据库中定义向量的三个关键要素是:ID维度有效负载(Payload)。这些组件共同工作,有效地表示系统中的向量。它们共同构成了,这是向量数据库中存储和检索数据的核心单位。
(, 下载次数: 0)


向量点的表示
每个部分在向量的存储、检索和解释中都起着重要作用。
1. ID:向量的唯一标识符

与关系型数据库一样,向量数据库中的每个向量都有一个唯一ID。它是向量的“标签”,类似于主键,确保可以轻松找到向量。
虽然ID本身不参与相似性搜索(基于向量的数值数据操作),但它对于将向量与其对应的“现实世界”数据(如文档、图像或音频文件)关联至关重要。
执行搜索并找到相似向量后,会返回这些向量的ID。随后可以使用这些ID获取与结果相关的详细信息或元数据
2. 维度:数据的核心表示

每个向量的核心是一组数字,它们共同在多维空间中表示数据。
从文本到向量:如何实现?

这些数字由嵌入模型(如深度学习算法)生成,捕捉数据中的基本模式或关系。因此,提到“嵌入”时,往往是指这些模型的输出向量。
例如,为表示文本数据,嵌入将语言的语义和上下文细节封装到其维度中。
(, 下载次数: 0)


基于句子的嵌入模型生成向量
因此,比较两个相似的句子时,它们的嵌入会非常相似,因为它们具有相似的语言元素
(, 下载次数: 0)


两个相似句子的嵌入对比
嵌入的美妙之处在于,它将复杂的数据简化为一种可以在多维空间中进行比较的形式。
3. 有效负载:通过元数据添加上下文

有时,仅靠数字还不足以全面理解或优化搜索。虽然维度捕捉了数据的本质,但有效负载则包含了元数据以提供结构化信息。
元数据可以是文本数据(如描述、标签、类别),也可以是数值(如日期或价格)。当需要根据未直接编码在向量中的标准筛选或排序搜索结果时,这些附加信息非常重要。
这些元数据在需要应用额外的过滤器排序条件时非常宝贵。
例如,当搜索一张狗的图片时,向量帮助数据库找到视觉上相似的图像。但如果你希望结果仅显示拍摄于过去一年的图片,或者带有“假期”标签的图片,有效负载可以帮助你通过过滤不符合查询条件的向量来缩小结果范围。
(, 下载次数: 0)


过滤示例
如果想了解过滤如何在Qdrant中实现,请查看我们的完整过滤指南。
向量数据库的架构

向量数据库由多个不同的实体和关系组成。以下是向量数据库中发生的关键架构概念:

(, 下载次数: 0)


向量数据库架构图
集合(Collections)

集合本质上是一组向量(或“点”),它们根据相似性或特定任务被逻辑分组在一起。集合中的每个向量具有相同的维度性,并且可以使用一个单一的度量进行比较。除非必要,否则避免创建多个集合;可以通过分片(Sharding)多租户模式(Multitenancy)来扩展到多个节点或在相同基础设施内处理不同用例。
距离度量(Distance Metrics)

距离度量决定了如何计算向量之间的相似性。创建集合时选择距离度量,这一选择取决于所处理数据的类型以及向量的生成方式。以下是最常见的三种距离度量:
基于RAM和内存映射(Memmap)的存储

默认情况下,Qdrant将向量存储在RAM中,为适合内存的数据集提供超快访问。但当数据集超出RAM容量时,Qdrant支持**内存映射(Memmap)**作为替代方案。
通过内存映射,可以将向量存储在磁盘上,同时通过直接将数据映射到内存实现高效访问。只需在创建集合时设置 "on_disk": true 即可启用。
  1. from qdrant_client import QdrantClient, models  
  2.   
  3. client = QdrantClient(url='http://localhost:6333')  
  4.   
  5. client.create_collection(  
  6.     collection_name="{collection_name}",  
  7.     vectors_config=models.VectorParams(  
  8.         size=768,  
  9.         distance=models.Distance.COSINE,  
  10.         on_disk=True),)
复制代码
有关hnsw_config.on_disk或memmap_threshold等其他配置,请参阅Qdrant关于存储的文档。
SDKs

Qdrant 提供了多种 SDK,支持不同的编程语言。无论你使用 Python、Go、Rust、Javascript/Typescript、C# 还是 Java,都可以找到适合的工具。





欢迎光临 AI创想 (https://www.llms-ai.com/) Powered by Discuz! X3.4