写点什么

解锁数据潜力:为什么你应该考虑使用向量数据库

  • 2023-11-15
    北京
  • 本文字数:2907 字

    阅读完需:约 10 分钟

前言

根据 DC 调查数据显示,全球在 A1 技术和服务上的支出 2023 年将达到 1540 亿美元,到 2026 年将超过 3000 亿美元。其中,向量数据库为 AI 的开发、增强内容生成的准确性提供了重要技术支撑。如果说 ChatGPT 是 LLM 的处理核心,prompts 是 code,那么向量数据库就是 LLM 需要的存储。为什么要有向量数据库?向量数据库用来存储非结构化数据,例如,文档,图片,视频,音频和纯文本等,在保证 1%信息完整的情况下,通过向量嵌入函数来精准描写非结构化数据的特征,从而提供查询、删除、修改、元数据过滤等操作。而像 SQL、Mysqli 这样传统的数据库根本无法完成这些操作。

什么是向量和向量数据库

向量是 AI 世界对世间万物的表示形式,是具有一定大小和方向的量,可以简单理解为一串数字的集合,就像一行多列的矩阵,比如:[2,0,1,9,0,6,3,0]。每一行代表一个数据项,每一列代表一个该数据项的各个属性。随着大模型等 AI 技术的发展和普及,向量数据的存算需求一定会得到极大的释放。


特征向量是包含事物重要特征的向量。大家比较熟知的一个特征向量是 RGB (红-绿-蓝)色彩。每种颜色都可以通过对红®、绿(G)、蓝(B)三种颜色的比例来得到。这样一个特征向量可以描述为:颜色 = [红,绿,蓝]。



向量检索是指从向量库中检索出距离目标向量最近的 K 个向量。一般我们用两个向量间的欧式距离,余弦距离等来衡量两个向量间的距离,一次来评估两个向量的相似度。


基本概念:


  • Collection: 包含一组 entity,可以等价于关系型数据库系统(RDBMS)中的表。

  • Segment: Milvus 在数据插入时通过合并数据自动创建的数据文件。一个 collection 可以包含多个 segment。一个 segment 可以包含多个 entity。在搜索中,Milvus 会搜索每个 segment,过滤被删除的数据,并返回合并后的结果。

  • Entity: 包含一组 field。field 与实际对象相对应。field 可以是代表对象属性的结构化数据,也可以是代表对象特征的向量。

  • Entity ID: 用于指代一个 entity 的唯一值。目前,Milvus 不支持 ID 去重,因此有可能在一个 segment 内出现重复 ID。

  • Field: entity 的组成部分。field 可以是结构化数据,例如数字和字符串,也可以是向量。

  • Vector: 一种类型的 field,代表对象的特征。目前,一个实体最多只能包含一个向量。

  • Index: 索引基于原始数据构建,可以提高对 collection 数据搜索的速度。

  • Mapping: 一系列规则用来定义 collection 如何组织数据。


在 GPT 模型的限制下,开发者们不得不寻找其他的解决方案,而向量数据库就是其中之一。向量数据库的核心思想是将文本转换成向量,然后将向量存储在数据库中,当用户输入问题时,将问题转换成向量,然后在数据库中搜索最相似的向量和上下文,最后将文本返回给用户。



向量数据库的作用当然不止步于文字语义搜索,在传统的 AI 和机器学习场景中,还包含人脸识别、图像搜索、语音识别等功能,但不可否认的是,这一轮向量数据库的火爆,正是因为它对于 AI 获得理解和维护长期记忆以执行复杂任务时有非常大的帮助。

使用示例

ES7.0 后自带 dense_vector 类型,无需安装额外插件,从 8.0 版本开始使用 knn 计算余弦相似度,底层使用 hnsw


1. 创建测试索引


{  "mappings": {    "properties": {      "title": {        "type": "text"      },      "content_vector": {        "type": "dense_vector",        "dims": 3      }    }  } }
复制代码


2.导入测试数据


{"index":{"_id":1}}{"title":"占地100亩的烧烤城在淄博仅用20天即成功新建,现在已成为万人争抢“烤位”的热门去处。","content_vector":[-0.2703271, 0.38279012, -0.29274252]}{"index":{"_id":2}}{"title":"淄博新建的一座占地100亩的烧烤城在短短20天内建成,吸引了众多烧烤爱好者,如今“烤位”已是一位难求。","content_vector":[-0.22879271, 0.43286988, -0.21742335]}{"index":{"_id":3}}{"title":"在淄博,一座耗时20天新建的占地100亩的烧烤城成为众人瞩目的焦点,各种美味烧烤让万人争夺“烤位”,可谓一座难求。","content_vector":[-0.24912262, 0.40769795, -0.26663426]}{"index":{"_id":4}}{"title":"淄博一般指淄博市。 淄博市,简称“淄”,齐国故都,山东省辖地级市,Ⅱ型大城市","content_vector":["0.32247472, 0.19048998, -0.36749798]}
复制代码


3.1. 执行检索 Approximate kNN


{  "query": {    "script_score": {      "query": {        "match_all": {}      },      "script": {        "source": "cosineSimilarity(params.query_vector, 'content_vector') + 1.0",        "params": {          "query_vector": [-0.2703271, 0.38279012, -0.29274252]          }      }    }  }}
复制代码


4.Exact kNN 处理大型数据集时性能不佳,script_score 查询扫描每个匹配的文档以计算向量函数,这可能导致搜索速度较慢。可以通过使用查询来限制传递给函数的匹配文档的数量来改善延迟。如果将数据筛选到较小的文档子集中,可以获得良好的搜索性能。


{  "knn": {    "field": "content_vector",    "query_vector": [-0.2703271, 0.38279012, -0.29274252],    "k": 10,    "num_candidates": 3  }}
复制代码

Amazon OpenSearch Serverless 向量引擎


亚马逊云科技再接再厉,推出 Amazon OpenSearch Serverless 向量引擎预览版这次推出标志着在云搜索服务领域的一个重大飞跃,它为用户提供了一个简单、高性能且可扩展的相似性搜索功能。


向量引擎是构建在 Amazon OpenSearch Serverless 之中,它能为用户带来现代化的机器学习(ML)增强的搜索体验。这意味着,无论是大型企业还是初创公司,开发者都能轻松构建出先进的生成式 AI 应用程序,为用户提供更加个性化和智能化的服务。



Amazon OpenSearch Serverless 向量引擎有以下优势:


1.无需管理基础设施: 与传统的搜索引擎不同,Amazon OpenSearch Serverless 向量引擎真正做到了让开发者专注于开发,而不是管理。它消除了对底层向量数据库基础设施的管理需求,大大降低了开发和运维的复杂性。


2.简单: 向量引擎的设计原则是简洁易用,让开发者在最短的时间内上手并投入开发。


3.可扩展: 不管你的数据量多大,用户量多少,Amazon OpenSearch Serverless 向量引擎都能轻松应对,确保搜索体验始终流畅。


4.高性能: 依托亚马逊云科技强大的云服务,该向量引擎提供了业界领先的搜索性能,确保用户的每一次搜索都能得到快速响应。


亚马逊云科技不仅仅满足于提供高性能的向量数据库服务,更持续不断地进行优化和改进,确保客户获得最前沿的技术体验。在向量图方面,团队一直在努力优化其性能和内存使用。亚马逊云科技进行了一系列的升级和改进,目标是进一步提高向量图的效率。其中,缓存改进是其中的一项重要策略。通过优化缓存机制,向量图能够更快速地访问常用数据,大大减少了访问延迟,提高了整体性能。


我觉得厉害的不仅仅是 Amazon OpenSearch Serverless 向量引擎,而是亚马逊云科技的整体实力和体系,所以我觉得还是还厉害的。

总结

向量数据库是崭新的领域,目前大部分向量数据库公司的估值乘着 AI 和 GPT 的东风从而飞速的增长,但是在实际的业务场景中,目前向量数据库的应用场景还比较少,抛开浮躁的外衣,向量数据库的应用场景还需要开发者们和业务专家们去挖掘。


发布于: 15 分钟前阅读数: 5
用户头像

还未添加个人签名 2022-08-08 加入

还未添加个人简介

评论

发布
暂无评论
解锁数据潜力:为什么你应该考虑使用向量数据库_数据库_熬夜磕代码、_InfoQ写作社区