文章目录
- 前言
- 什么是向量和向量数据库
- 使用示例
- Amazon OpenSearch Serverless向量引擎
- 总结
前言
根据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 的东风从而飞速的增长,但是在实际的业务场景中,目前向量数据库的应用场景还比较少,抛开浮躁的外衣,向量数据库的应用场景还需要开发者们和业务专家们去挖掘。