论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
SqlServer
›
一文让你搞懂向量数据库!团结大模型Agent,简直不要太 ...
一文让你搞懂向量数据库!团结大模型Agent,简直不要太好用! ...
玛卡巴卡的卡巴卡玛
金牌会员
|
3 天前
|
显示全部楼层
|
阅读模式
楼主
主题
895
|
帖子
895
|
积分
2685
在最近两年的时间里,我们正处于人工智能革命浪潮中。
以 ChatGPT 为代表的大语言模型问世,它在带来巨大震撼的同时,其自然缺陷和诸多限定也让开辟者颇为困扰,好比存在输入上下文 token 限定、不具备影象能力等问题。
于是,向量数据库应运而生,办理了大模型长时影象的问题,同时开辟者还发现不止于此,向量数据库还有助于办理大模型幻觉问题(即胡说八道)
下面,让我们一起来了解一下毕竟什么是向量数据库,向量数据库的原理是什么?
一、什么是向量数据库
一句话概括:
向量数据库的核心是把文本转换为向量,然后存储在向量数据库中,并提供向量相似性检索
当用户输入问题时,将问题也转化为向量,在向量数据库中查找最相似的上下文向量,末了将文本返回给用户。
举个例子:
当有一份文档需要 GPT 处理时,假设这份文档是客服培训资料或操纵手册,可先将这份文档的所有内容转化为向量,并存储到向量数据库中。
然后当用户提出相关问题时,把用户的搜索内容转换为向量,在向量数据库中搜索最相似的上下文向量,再返回给 GPT。
如许不仅能大幅淘汰 GPT 的盘算量,进步相应速度,更重要的是能降低本钱,并避开 GPT 的 tokens 限定。
再举个例子:
当和 ChatGPT 之间有一段很长的对话时,可以将过去的对话以向量的形式保存起来。
当向 ChatGPT 提问时,将问题转化为向量,对过去所有的谈天记录举行语义搜索,找到与当前问题最相关的 “影象”,一起发送给 ChatGPT,从而极大进步 ChatGPT 的输出质量。
二、向量数据库的技术原理
前面简单介绍了什么是向量数据库,接下来,让我们一起来了解一下向量数据库的技术原理!
2.1 词嵌入技术
传统数据库一般通过不同的索引方式(如 B Tree、倒排索引)和关键词匹配等方法实现,本质上基于文本精确匹配,语义搜索功能较弱。
例如,搜索 “小狗”,只能获取带有 “小狗” 关键词的结果,无法得到 “柴犬”“哈士奇” 等结果。
因为 “小狗” 和 “柴犬” 是不同关键词,传统数据库无法识别它们的语义关系。
可以使用模型提取不同关键词的特征,得到特征向量,不同向量之间可通过内积或余弦判断其相似关系,如许就可以使用特征向量举行语义搜索。
我们将关键词转换为特征向量的过程称为Embeding。
2.2 间隔度量
下面,我们来了解一下怎样度量两个向量的相似度。现在常见的向量相似性的度量方法有三种:
欧氏间隔
余弦相似度
点积
欧式间隔
欧式间隔表示两个向量的间隔,盘算公式如下:
欧式间隔可以反应两个向量之间的绝对间隔,实用于需要考虑向量长度的相似度盘算。
例如,在推荐系统中,需要根据用户的历史行为来推荐相似的商品,这种情况下,需要考虑用户历史行为的数量,而不仅仅是用户历史行为相似度。
余弦相似度
余弦相似度表示两个向量之间夹角的余弦值,盘算公式如下:
此中,和表示两个向量的模长,和表示向量,表示点积。
余弦相似度因为对向量做了归一化,以是对长度并不敏感,适合盘算文档相似性。
点积
点积是指两个向量之间的点积值,盘算公式如下:
此中和表示向量,和表示向量的第个元素。
点积的有点是盘算速度快,元素相乘并相加即可,同时分身了长度和方向,实用于图像识别、语义检索等场景。将归一化后的向量做点积,实际上就是余弦相似度。
2.3 相似性检索
我们知道,可以通过比较向量之间的间隔来判断他们相似度,那么怎样将其应用到真实场景中呢?
想要在海量的向量中找到和查询向量最相似的向量,最质朴的方法是:查询向量和数据库中的所有向量都举行一次盘算,然后从中找出来间隔最小的TopK个向量。
质朴方法的好处是,召回的向量肯定是全局最相似的,缺点也很显着,就是盘算量太大,太耗时。
以是,我们需要一种高效的算法来办理这个问题。
现在,业界主流的方法是通过构建图索引的方式来时间最近邻检索,比较有名的是Hierarchical Navigable Small Word(HNSW)算法。
HNSW是一种基于图的近似最近邻搜索算法,主要用于在极大量的候选会合快速找到与查询点(Query)最近邻的K个元素。其结构如下:
下面简述一下HNSW算法步调:
建库(构建索引)
初始点选取
:
在整个向量集合范围内,通过随机的方式确定一个点作为建库的初始点。这个初始点是后续构建层次结构的起始核心,它的选择完全是随机性的,不受向量自身属性的影响,为整个索引结构提供了一个起始的参照点。
构建超平面
:
在确定初始点后,对于别的的向量点,按照特定的次序将它们插入到合适的层中。在这个过程中,每一个点都会被赋予一个层号,这个层号清晰地表明白该点在整个层次结构中的位置。每一层都可以看作是一个独立的空间划分,不同层的点在后续的搜索和检索过程中有着不同的作用和意义。这个分层的过程是基于向量之间的某种内在关系或者预设的规则举行的,以构建出一个具有层次化特征的索引结构。
邻人选择
:
运用启发式选边策略为每个点挑选邻人。这种策略会综合考虑向量之间的多种因素,例如向量的方向、模长以及在空间中的分布情况等。通过如许的方式,可以或许确保每个点的邻人具有多样性,克制邻人点太过会合在某个局部区域。这种多样性的邻人结构有助于在后续的检索过程中更全面、正确地找到与查询点相似的向量,进步算法的检索效率和正确性。
检索(最近邻检索)
顶层搜索启动
:
当举行检索操纵时,给定一个查询点,起首从索引结构的最顶层开始搜索。最顶层作为整个层次结构的起始搜索层,包含了相对较为宽泛的信息。从这一层开始搜索可以在较大范围内快速筛选出大概与查询点相关的区域,淘汰不必要的搜索范围,进步搜索效率的同时克制陷入局部最优解。
最近邻确定
:
通过盘算查询点与其他点之间的余弦相似度或间隔等度量方式来确定最近邻。余弦相似度可以或许衡量两个向量在方向上的一致性,间隔度量则可以从空间位置的角度反映向量之间的接近程度。根据详细的应用场景和数据特点选择合适的度量方法,正确地找出与查询点在语义或空间上最接近的点,这些点将作为检索结果的重要候选。
搜索加速
:
在搜索过程中,使用剪枝和优先队列等技术进步搜索速度。剪枝技术可以根据肯定的规则,在搜索过程中提前排除那些显着不大概是最近邻的分支,淘汰不必要的盘算和搜索。优先队列则可以按照某种优先级次序对搜索过程中的中心结果举行排序和存储,优先处理最有大概成为最近邻的点,进一步加快搜索速度,使整个检索过程更加高效。
HNSW 算法具有高效性,通过构建多层超平面将高维数据点构造成层次化结构,降低查找最近邻时间复杂度至O(log n)。
具有近似性,接纳小世界导航图结构使搜索结果有近似性且可通过调整参数平衡近似程度与搜索性能。
同时还具有可扩展性,能轻松支持新增、删除数据点及高维空间搜索。
三、总结
本文主要介绍向量数据库的原理与实现,内容涵盖向量数据库的基本概念、相似性搜索算法、相似性测量算法。
向量数据库是一个新兴领域,当前大部分向量数据库公司的估值因 AI 和 GPT 的发展而快速增长。
然而,在实际业务场景中,向量数据库的应用场景现在还较少。
去除浮躁因素,向量数据库的应用场景有待开辟者和业务专家挖掘。
怎样系统的去学习大模型LLM ?
大模型时代,火爆出圈的LLM大模型让步伐员们开始重新评估自己的本事。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不停。
究竟上,
抢你饭碗的不是AI,而是会使用AI的人。
继科大讯飞、阿里、华为等巨头公司发布AI产物后,许多中小企业也陆续出场!
超高年薪,挖掘AI大模型人才!
如今大厂老板们,也更倾向于会AI的人,普通步伐员,还有应对的时机吗?
与其焦虑……
不如成为「掌握AI工具的技术人」,毕竟AI时代,
谁先尝试,谁就能占得先机!
但是LLM相关的内容许多,现在网上的老课程老教材关于LLM又太少。以是现在小白入门就只能靠自学,学习本钱和门槛很高。
针对所有自学遇到困难的同学们,我帮各人系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包罗LLM大模型书籍、640套大模型行业陈诉、LLM大模型学习视频、LLM大模型学习门路、开源大模型学习教程等,
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
玛卡巴卡的卡巴卡玛
金牌会员
这个人很懒什么都没写!
楼主热帖
SQL SERVER事务提交回滚
Kubernetes(k8s)Deployment、Statefu ...
基于STM32的手势识别检测
如何用技术改变生活
【C++】ZZ1864- 解题精讲
ConcurrentHashMap源码,看我这篇就够 ...
数据类型的内置方法
实用五步法教会你指标体系的设计与加工 ...
同事写了一个责任链模式,bug 无数... ...
线程池:ThreadPoolExecutor源码解读 ...
标签云
存储
挺好的
服务器
浏览过的版块
Java
快速回复
返回顶部
返回列表