开启左侧

草履虫都看得懂的向量数据库教程,一文就够了

[复制链接]
米落枫 发表于 2 小时前 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:CSDN博客
向量数据库的要点总结

什么是向量数据库?

    • 用于存储、索引、查询和检索高维向量数据。
    • 特别适合处理非结构化数据(如图像、音频、文本)。
    • 实现传统数据库难以完成的高级分析和相似性搜索。
传统数据库的局限性

    • 无法理解非结构化数据的意义。
    • 无法有效搜索或分类复杂的文档、音频和图像数据。
向量数据库的核心特性

    数据表示:
    • 数据以向量形式存储,捕捉语义和上下文。
    • 每个向量由ID(唯一标识)、维度(数值表示)、有效负载(元数据)组成。
    距离度量:
    • 欧几里得距离、余弦相似性、点积等方法衡量向量间相似性。
    存储方式:
    • 支持基于RAM的快速访问和基于磁盘的高效存储(内存映射)。
核心功能

    索引:
    • 使用HNSW(分层可导航小世界)算法进行快速索引和搜索。
    • 支持有效负载索引优化元数据过滤。
    搜索:
    • 基于近似最近邻(ANN)算法的高效相似性搜索。
    • 支持混合搜索(结合密集和稀疏向量实现语义和关键词匹配)。
    更新与删除:
    • 实时更新和批量修改向量。
    • 删除过时或重复数据以保持数据库高效和精准。
向量类型

    密集向量(Dense Vectors):
    • 包含丰富语义信息,适合上下文相似性搜索。
    稀疏向量(Sparse Vectors):
    • 关注关键词或标记,适合精确匹配和元数据过滤。
高级优化

    量化:
    • 通过二进制或标量量化大幅降低内存使用,提升搜索速度至40倍。
    • 支持多种量化方法,如二进制量化、标量量化和产品量化。
分布式部署

    分片(Sharding):
    • 将数据分布到多个节点上以实现负载均衡和并行处理。
    复制(Replication):
    • 在多个节点间保留数据副本以提高容错能力和高可用性。
    多租户架构(Multitenancy):
    • 支持不同用户或组织的数据隔离,优化合规性和隐私。
数据安全

    API密钥: 通过API密钥进行简单身份验证。
    JWT与RBAC: 使用JSON Web Tokens实现基于角色的访问控制。
    网络隔离和加密: 部署专用网络,启用数据传输和存储加密。
应用场景

    相似性搜索: 产品图片匹配、主题文档检索。
    异常检测: 银行用户行为分析、不规则模式识别。
    推荐系统: 个性化推荐(电影、音乐、商品)。
    RAG(检索增强生成): 结合大语言模型生成语义相关答案。
    多模态搜索: 跨文本、图像、音频的数据检索。
    语音与音频识别: 语音转文本、声音分类与检索。
    知识图谱扩展: 关联研究文献、客户反馈与产品特性。
工具与支持

    SDKs: 提供Python、Go、Rust、JavaScript/TypeScript、C#、Java等多语言支持。
    文档与社区: 丰富的教程、指南以及活跃的社区支持。
关键优势

    • 更高效处理非结构化数据。
    • 提供上下文语义搜索和关键词匹配的结合能力。
    • 在数据安全、扩展性和高可用性方面表现卓越。

什么是向量数据库?

草履虫都看得懂的向量数据库教程,一文就够了-1.jpeg


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

传统的OLTP和OLAP数据库几十年来一直是数据存储的核心。它们非常擅长管理具有明确模式的结构化数据,如姓名、地址、电话号码和购买历史。
草履虫都看得懂的向量数据库教程,一文就够了-2.png


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


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

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

草履虫都看得懂的向量数据库教程,一文就够了-4.jpeg


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


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

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

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

这些数字由嵌入模型(如深度学习算法)生成,捕捉数据中的基本模式或关系。因此,提到“嵌入”时,往往是指这些模型的输出向量。
例如,为表示文本数据,嵌入将语言的语义和上下文细节封装到其维度中。
草履虫都看得懂的向量数据库教程,一文就够了-6.png


基于句子的嵌入模型生成向量
因此,比较两个相似的句子时,它们的嵌入会非常相似,因为它们具有相似的语言元素
草履虫都看得懂的向量数据库教程,一文就够了-7.png


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

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


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

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

草履虫都看得懂的向量数据库教程,一文就够了-9.png


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

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

距离度量决定了如何计算向量之间的相似性。创建集合时选择距离度量,这一选择取决于所处理数据的类型以及向量的生成方式。以下是最常见的三种距离度量:
    欧几里得距离(Euclidean Distance): 直线距离,就像在空间中测量两点之间的物理距离。当实际距离(如空间数据)很重要时,选择此选项。
    余弦相似性(Cosine Similarity): 衡量的是角度而不是长度,用于评估两个向量的方向是否一致。适合文本或文档数据,侧重于意义而非量级。
    例如,衡量两个事物是相似相反还是无关
    草履虫都看得懂的向量数据库教程,一文就够了-10.png


    余弦相似性示例
    点积(Dot Product): 用于评估两个向量之间的对齐程度。常用于推荐系统,评估两个对象的“匹配度”。
基于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,都可以找到适合的工具。
草履虫都看得懂的向量数据库教程,一文就够了-11.jpeg
草履虫都看得懂的向量数据库教程,一文就够了-12.jpeg
草履虫都看得懂的向量数据库教程,一文就够了-13.png
草履虫都看得懂的向量数据库教程,一文就够了-14.png
草履虫都看得懂的向量数据库教程,一文就够了-15.png
草履虫都看得懂的向量数据库教程,一文就够了-16.png
草履虫都看得懂的向量数据库教程,一文就够了-17.jpeg
草履虫都看得懂的向量数据库教程,一文就够了-18.png
草履虫都看得懂的向量数据库教程,一文就够了-19.jpeg
草履虫都看得懂的向量数据库教程,一文就够了-20.png
草履虫都看得懂的向量数据库教程,一文就够了-21.png
草履虫都看得懂的向量数据库教程,一文就够了-22.png
草履虫都看得懂的向量数据库教程,一文就够了-23.png
草履虫都看得懂的向量数据库教程,一文就够了-24.png
草履虫都看得懂的向量数据库教程,一文就够了-25.jpeg
草履虫都看得懂的向量数据库教程,一文就够了-27.png
草履虫都看得懂的向量数据库教程,一文就够了-28.jpeg
草履虫都看得懂的向量数据库教程,一文就够了-29.jpeg
草履虫都看得懂的向量数据库教程,一文就够了-30.png
草履虫都看得懂的向量数据库教程,一文就够了-31.jpeg
草履虫都看得懂的向量数据库教程,一文就够了-32.jpeg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )