随着各种大型语言模型 ()的开源, 开发人员也意识到向量数据库越来越重要,因为它可以进一步增强这些模型。像 这种大模型,通常使用大规模的嵌入向量来表示文本数据,而 提供了高效存储和检索向量数据的能力,使得在应用中存储和访问这些向量变得更加高效和快速。
向量数据库可以索引、存储结构化或非结构化数据(例如文本或图像)及其向量嵌入(数据的数字表示)并提供对它们的访问。它允许用户在生产环境中快速大规模地查找和检索相似的对象。由于其高效的搜索功能,向量数据库有时也称为向量搜索引擎。
现实生活中的数据有结构化的数据,如电子表格这种组织整齐的数据,也有非结构化的数据如文档、图像、音视频等,且绝大多数都是非结构化数据。这类数据很难以有组织的方式存储它们,以便我们可以轻松的找到所需的内容。如何对这些数据进行量化存储,并能够快速查找出来呢?
向量嵌入是一种将非结构化数据转换为数学向量的方法,使得数据可以被量化存储并且可以进行快速查找。通过向量嵌入,非结构化数据(如文档、图像、音视频等)被映射到一个多维的向量空间中,每个数据项都用一个向量来表示。这些向量通常被设计成能够捕捉数据的语义信息,使得相似的数据在向量空间中距离较近,不相似的数据在向量空间中距离较远。
现代机器学习模型可以经过训练将原始数据转换为嵌入,表示为固定维度的浮点数数组(或向量)。向量数据库便是用于存储这些嵌入向量的专用数据库
使用向量嵌入,我们可以在向量空间中搜索彼此接近的对象,以找到并检索相似的对象。这种搜索方式被称为向量搜索、相似性搜索或语义搜索。
具体向量搜索是如何进行的,举个例子来讲:我们基于[人格五因素测试]对多人进行性格测试,在个维度上收集了他们的评分,并将这些评分作为向量嵌入;
为方便在平面坐标系中展示向量之间的关系,我们先只取个维度的数据,将评分范围调到 ,并将这些点表示为从坐标原点到它们的向量:
如果被车撞了,我们需要通过向量搜索找到一个与其性格相似的人去代替,那么上图中哪个人与相似? 机器如何识别呢?这时向量的表示法就可以让我们通过数学方式计算向量的相似性,来找到了性格相似的人。
向量的相似性通常通过计算两个向量之间的距离来确定。计算相似度分数的常用方法是 [余弦相似度], 其数学定义与公式如下:
给定两个 维属性向量 和 ,它们的余弦相似度 通过使用[向量点积]和[向量长度]表示为:
其中, 和 分别是向量 和 的第 个分量。
按照数学公式我们可以计算出 和相似度最高,两个向量的夹角也最小,因此他们更相似:
实际上两个维度的特征,不足以判断人格是否相似,因此我们需要用到个维度的数据:
虽然数据维度升高,但这种比较向量相似度的方法,适用于任意维度的向量空间:
向量索引是一种用于在大规模数据集中快速搜索相似向量的技术。通俗地说,就像我们在一堆杂乱的图片中找到与给定图片相似的图片一样。构建向量索引就像是给大量的照片贴上标签并整理成相册一样。
想象一下,你有一个非常大的图像库,每张图片都表示为一个向量。现在,你希望找到与给定图片相似的图片。这时,向量索引就派上了用场。可以根据给定图片的向量,在多维数据空间中快速定位相册,然后快速定位那些与给定图片在向量空间中距离较近的图片,而不必一个一个地比较每张图片。
常见的构建索引的算法:
- 基于聚类的索引 (如,FAISS)
- 基于邻近图的索引 (如,HNSW)
- 基于树的索引 (如,ANNOY)
- 基于哈希的索引 (如,LSH)
- 基于压缩的索引 (如,PQ 或 SCANN)
向量索引在实际中有许多应用,比如图像搜索、语义搜索、推荐系统等。它能够帮助我们快速地处理和检索大规模的向量数据,从而在很多领域提高效率和性能。
向量数据库的常见的工作管道:
- 索引:对嵌入的向量是通索引算法对其进行索引并将向量数据和构建好的索引结构存储到数据库中。
- 查询:向量数据库会根据查询向量在向量索引中进行搜索,并返回与查询向量最相似的向量结果。
- 后期处理:在某些情况下,向量数据库从数据集中检索出一组与查询向量最相似的向量,并对它们进行后期处理,以返回最终的结果。这个步骤可能包括使用不同的相似度度量重新对查询到的相似向量进行排序。换句话说,就像在购物网站上找到了一些可能的商品,然后根据不同的标准重新排序,以便更好地满足用户的需求。
[Chroma DB]是一个开源矢量存储,用于存储和检索矢量嵌入。它的主要用途是保存嵌入以及元数据,交由LLM模型使用。此外,它还可以用于文本数据的语义搜索引擎。
工作流程:
- 创建(类似关系型数据库中的表)
- 使用元数据和唯一的ID将文本添加到集合中。
- 通过文本或嵌入查询集合。也可以通过元数据过滤结果。
测试数据
默认情况下使用模型将文字转换为向量:
添加数据到集合时便会自动下载模型,并将文本转为嵌入到集合中。
查询:相似性搜索
查询过滤器
也可以不使用默认的嵌入模型:
和默认的词嵌入模型不同的是,相似度匹配到了和。不同的词嵌入模型执行查询时会有不一样的效果。
更新数据
删除数据
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集