向量数据库零基础入门
讲解向量数据库核心概念与 LLM 应用的关键关系。RAG 系统必备知识。
讲解向量数据库核心概念与 LLM 应用的关键关系。RAG 系统必备知识。
在数据复杂度与高维信息快速增长的时代,传统数据库在高效处理复杂数据集并从中提取意义方面,往往显得力不从心。于是,Vector Database 应运而生。作为一项技术创新,它旨在解决数据规模持续扩张所带来的种种挑战。
Vector Database 因其能够高效存储、索引和搜索高维数据点,在多个领域中变得愈发重要。这些高维数据点通常被称为 vector。此类数据库专门用于处理这样的数据:每条数据都表示为多维空间中的一个 vector。vector 可以表示各种信息,例如数值特征、文本或图像的 embedding,甚至分子结构等复杂数据。
我们可以用一个二维网格来表示 Vector Database:其中一条轴表示动物的颜色(棕色、黑色、白色),另一条轴表示动物的体型(小型、中型、大型)。
在这个表示方式中:
图像 A:棕色,中型
图像 B:黑色,小型
图像 C:白色,大型
图像 E:黑色,大型
你可以想象,每张图像都根据其颜色和体型属性,以一个点的形式绘制在网格上。尽管真实的 vector space 可能拥有更多维度,并会使用复杂得多的搜索和检索技术,但这个简化后的网格已经直观呈现了 Vector Database 的基本原理。
想象一下,你有许多不同种类的水果,比如苹果、橙子、香蕉和葡萄。你很喜欢苹果的味道,因此想找出其他味道与苹果相似的水果。你没有按照水果的颜色或大小分类,而是决定根据它们有多甜或多酸来进行分组。
于是,你把苹果、葡萄和成熟的香蕉等甜味水果放在一起,再把橙子和未成熟的香蕉等酸味水果放到另一组。现在,当你想寻找味道像苹果的水果时,只需要查看甜味水果组,因为这个组里的水果更有可能拥有相似的味道。
但如果你寻找的是一种非常具体的水果呢?例如,它既要像苹果一样甜,又要像橙子一样带有酸味。在现有分组中,这样的水果可能不太容易找到,对吧?这时,你可以去请教一位非常了解各种水果的人,比如水果专家。因为他熟悉许多水果的味道,所以能够推荐一种符合你独特口味要求的水果。
在这个例子中,那位知识渊博的人扮演的就是“Vector Database”的角色。他掌握了大量关于不同水果的信息,即使你的要求并非基于颜色或形状等常见特征,他依然能够帮你找到符合特殊口味的水果。
同样,Vector Database 就像是为计算机服务的这位热心专家。它通过一种特殊方式记住食物等事物的大量细节。因此,如果你想寻找一种味道与你喜爱的食物相似的食物,或者寻找一种兼具多种你喜欢的风味的食物,Vector Database 就能迅速为你找出合适的选项。它就像计算机的风味专家,了解各种味道,并能根据你当下想吃的东西推荐绝佳选择,就像那位熟悉水果的专家一样。
Vector Database 使用 vector embedding 存储数据。Vector Database 中的 vector embedding,是指将物品、文档或数据点等对象表示为多维空间中 vector 的一种方式。每个对象都会被分配一个 vector,用来捕获该对象的各种特征或属性。这些 vector 的设计原则是:相似对象对应的 vector 在 vector space 中距离更近,而不相似对象的 vector 则相距更远。
你可以把 vector embedding 想象成一种描述对象重要特征的特殊编码。假设你有许多不同的动物,希望用一种方式表示它们,让相似动物拥有相似的编码。例如,猫和狗的编码可能非常接近,因为它们都具有四条腿和皮毛等共同特征。另一方面,鱼和鸟等动物的编码则会相距更远,以反映它们之间的差异。
在 Vector Database 中,这些 embedding 用于存储和组织对象。当你想查找与某个查询相似的对象时,数据库会检查这些 embedding,并计算查询 embedding 与其他对象 embedding 之间的距离。这能帮助数据库快速识别出与查询最相似的对象。
例如,在音乐流媒体应用中,可以把歌曲表示为 vector,并通过 embedding 捕获节奏、流派和所用乐器等音乐特征。当你搜索与自己最喜欢的曲目相似的歌曲时,应用中的 Vector Database 会比较这些 embedding,从而找出与你的偏好最接近的歌曲。
Vector embedding 能将复杂对象转换为捕获其特征的数值 vector,而 Vector Database 则利用这些 embedding,根据它们在 vector space 中的位置,高效搜索和检索相似或相关的对象。
图片来源:KDnuggets
你在 ChatGPT 应用中输入一个问题或请求。
应用会将你的输入转换为一种名为 vector embedding 的紧凑数值形式。
这个 embedding 通过数学表示捕获查询的核心含义。
系统会将该 vector embedding 与 Vector Database 中存储的其他 embedding 进行比较。
相似度度量会根据内容识别出关联度最高的 embedding。
数据库生成一个响应,该响应由含义与你的查询高度匹配的 embedding 组成。
响应中包含与已识别 embedding 相关的信息,随后被发送给你。
当你继续发起查询时,embedding model 会生成新的 embedding。
这些新 embedding 会被用于在数据库中查找相似的 embedding,并重新关联到原始内容。
Vector Database 使用多种数学技术来判断 vector 之间的相似度,其中最常见的方法之一是 cosine similarity。
当你在 Google 上搜索“Best cricket player in the world”,并看到一份顶尖球员列表时,背后涉及多个步骤,而 cosine similarity 是其中的主要环节之一。
系统使用 cosine similarity,将搜索查询的 vector representation 与数据库中所有球员资料的 vector representation 进行比较。vector 越相似,cosine similarity 得分就越高。
注意:这只是为了方便说明而举的例子。需要指出的是,Google 等搜索引擎使用的复杂算法远不止简单的 vector similarity。它们还会考虑用户所在地、搜索历史、信息来源的权威性等多种因素,从而提供最相关、最个性化的搜索结果。
Vector Database 的重要性体现在以下能力和应用中:
Vector Database 擅长执行相似度搜索,也就是检索与给定查询 vector 最相似的 vector。这对于推荐系统(寻找类似产品或内容)、图像和视频检索、人脸识别以及信息检索等多种应用至关重要。
传统关系型数据库难以处理高维数据,这是因为存在“维度灾难”:随着维度数量增加,数据点之间的距离会逐渐失去意义。Vector Database 旨在更高效地处理高维数据,因此适用于 natural language processing、computer vision 和 genomics 等应用。
Vector Database 经常用于存储由 machine learning model 生成的 embedding。这些 embedding 捕获了数据的关键特征,可以用于聚类、分类和异常检测等多种任务。
许多 Vector Database 针对实时或近实时查询进行了优化,因此适用于需要快速响应的应用,例如电商推荐系统、欺诈检测以及 IoT 传感器数据监控。
Vector Database 使系统能够理解和预测用户偏好,从而提供个性化体验。这对于流媒体服务、社交媒体和在线市场等平台至关重要。
Vector Database 能够高效处理点、线和多边形等地理数据。这对 geographical information system(GIS)、基于位置的服务和导航应用非常重要。
在 genomics 和 molecular biology 领域,Vector Database 被用于存储和分析基因序列、蛋白质结构以及其他分子数据。这有助于药物研发、疾病诊断和个性化医疗。
Vector Database 可以集成来自不同来源、不同类型的数据,从而支持更全面的分析和洞察。当数据来自多种模态时,例如需要将文本、图像和数值数据结合起来,这一能力尤其有价值。
通过将文本文档表示为同一个空间中的 vector,Vector Database 可以用于构建强大的多语言搜索引擎,从而支持跨语言相似度搜索。
Vector Database 还能够高效表示和处理图数据,这对社交网络分析、推荐系统和欺诈检测至关重要。
Vector Database 的需求正在快速增长,因为它在应对现代应用中高维数据爆炸所带来的挑战方面发挥着不可或缺的作用。
随着各个行业越来越多地采用 machine learning、artificial intelligence 和 data analytics 等技术,如何高效存储、搜索和分析复杂的数据表示,已经成为至关重要的问题。Vector Database 使企业能够充分利用相似度搜索、个性化推荐和内容检索的能力,从而提升用户体验并改善决策质量。
从电商和内容平台,到医疗健康和自动驾驶汽车,Vector Database 之所以拥有广泛需求,源于它能够处理多样化的数据类型,并实时提供准确结果。随着数据在复杂度和规模上持续增长,Vector Database 所具备的可扩展性、速度和准确性,使它成为从数据中提取有意义洞察、在各个领域发掘新机会的关键工具。
你可以充分利用 SingleStoreDB 强大的 Vector Database 能力。它经过专门设计,能够无缝支持 AI 驱动的应用、chatbot、图像识别系统等场景。有了 SingleStoreDB,你不再需要为 vector 密集型工作负载单独维护一个专用的 Vector Database。
与传统的 Vector Database 方案不同,SingleStoreDB 采用了一种新颖的方式:将 vector 数据与其他多种数据类型一起存储在关系表中。这种创新性的融合,让你能够轻松访问与 vector 数据相关的完整 metadata 和其他属性,同时充分利用 SQL 强大的查询能力。
SingleStoreDB 经过精心架构设计,拥有可扩展的框架,能够持续、稳定地支持不断增长的数据需求。告别各种限制,选择一个能够与你的数据需求同步成长的解决方案。
我们向这张表中加载了 16,784,377 行数据:
create table people(
id bigint not null primary key,
filename varchar(255),
vector blob
);
每一行都代表一张名人图像,其中包含一个唯一 ID、图像的存储文件名,以及一个由 128 个元素组成、用于表示人脸含义的 floating point vector。这个 vector 由 facenet 生成。facenet 是一个预训练 neural network,可根据人脸图像创建 vector embedding。
别担心,要使用这种方法,你不需要理解 AI。你只需要使用其他人训练好的 neural network,或者任何能够为对象生成摘要 vector 的工具。
现在,我们使用以下查询访问这张表:
select vector
into @v
from people
where filename = "Emma_Thompson/Emma_Thompson_0001.jpg";
select filename, dot_product(vector, @v) as score
from people where score > 0.1
order by score desc
limit 5;
第一条查询为图像 Emma_Thompson_0001.jpg 获取查询 vector @v。第二条查询则找出最接近的五个匹配项:
Emma_Thompson_0001.jpg 与其自身完全匹配,因此得分接近 1。但有趣的是,第二接近的匹配项是 Emma_Thompson_0002.jpg。以下是查询图像和最接近的匹配图像:
更令人惊叹的是,我们获得的搜索速度快得不可思议。在一台配备 16 个 vCPU 的机器上,第二条查询仅耗时 0.005 秒,而且处理了全部 1600 万个 vector。这意味着每秒可以完成超过 33 亿次 vector 匹配。
你可以在原始文章《使用 SingleStoreDB 在 SQL 中进行图像匹配》中进一步了解这项实验。
现在,轮到你亲自体验 SingleStore 了。
注册 SigleStore,即可领取价值 600 美元的免费使用额度。
Vector Database 的重要性源于它能够处理复杂的高维数据,同时提供高效的查询与检索机制。随着数据的复杂度和规模持续增长,Vector Database 正在成为各个行业大量应用中越来越重要的组成部分。
说明与免责声明:本文部分内容是在 ChatGPT 的帮助下完成的。
对于后续操作,你可以考虑屏蔽此人和/或举报滥用行为。