您当前的位置:首页 > 电脑百科 > 数据库 > 百科

一文带您了解向量数据库

时间:2023-08-06 21:02:25  来源:知乎  作者:新语数据故事汇

向量数据库在构建基于大语言模型的行业智能应用中扮演着重要角色。大模型虽然能回答一般性问题,但在垂直领域服务中,其知识深度、准确度和时效性有限。为了解决这一问题,企业可以利用向量数据库结合大模型和自有知识资产,构建垂直领域的智能服务。向量数据库存储和处理向量数据,提供高效的相似度搜索和检索功能。通过向量嵌入,将企业知识库文档和数据转化为向量表示,并与大模型进行交互,实现专有、私域的垂直的行业智能化应用。

基于大语言模型构建行业智能应用为什么需要向量数据库?

在2023年这个春天,最受瞩目的科技产品无疑是ChatGPT。ChatGPT的问世重新点燃了曾经静寂已久的人工智能领域,为AI注入了新的活力。大语言模型(LLM)展示了生成式AI能够达到与人类语言高度相似的表达能力,使得AI不再遥不可及,而是已经进入了人们的工作和生活中。众多从业者都急切地投身于这个改变时代的机遇,生成式AI已经成为资本和企业不可忽视的下一代技术关键,同时也对底层基础设施的提出了更高的要求。

大模型能够回答较为普世的问题,但是若要服务于垂直专业领域,会存在知识深度、知识准确度和时效性不足的问题,比如:医疗或法律行业智能服务要求知识深度和准确度比较高,那么企业构建垂直领域智能服务?目前有两种模式:

  • 基于大模型的Fine Tune方式构建垂直领域的智能服务,需要较大的综合投入成本和较低的更新频率,适用性不是很高,并适用于所有行业或企业。
  • 通过构建企业自有的知识资产,结合大模型和向量数据库来搭建垂直领域的深度服务,本质是使用知识库进行提示工程(Prompt Engineering)。以法律行业为例,基于垂直类目的法律条文和判例,企业可以构建垂直领域的法律科技服务。如法律科技公司https://www.harvey.ai/,正在构建“律师的副驾驶”(Copilot for lawyers)以提高法律文件的起草、修改和研究服务。

将企业知识库文档和数据通过向量特征提取(embedding)然后存储到向量数据库(vector database),应用LLM大语言模型与向量化的知识库检索和比对知识,构建智能服务。比如:应用大语言模型和向量数据库(知识库)可以让企业应用级Chatbot(聊天机器人)的回答更具专业性和时效性,构建企业专属Chatbot。

为啥是向量(vector)?

向量(vector)是在大语言模型、知识库交互、计算过程中的重要指标。它可以将文本和知识表示为数学向量,实现文本相似度计算、知识库检索和推理等功能。向量(vector)为语义理解和应用提供了一种方便有效的表示方法。

“ vector 是模型之根,是大模型与知识库交互之桥。 向量嵌入(vector embeddings)是一种AI原生的数据表示方式,适用于各种基于AI的工具和算法。它可以表示非结构化的数据或知识,如文本、图像、音频和视频等。

图:LLM进化之树

什么是vector embeddings

罗伊·凯恩斯(Roy Keynes)的定义是:“嵌入(vector embeddings)是学习的转换,使数据更有用”。神经网络深度学习将文本转化为一个包含其实际含义的向量空间。这更有用,因为它可以找到同义词,以及单词之间的句法和语义关系。最为经典的例子:Queen=King-Man+Woman

图:词向量示意图

向量数据库作用是什么

向量数据库的主要作用是存储和处理向量数据,并提供高效的向量检索功能。最核心是相似度搜索,通过计算一个向量与其他所有向量之间的距离来找到最相似的向量(最相似的知识或内容)。这是基本索引(flat indexes)的朴素原理,在大型向量数据库中,这可能需要很长时间。

为了提高搜索性能,可以尝试仅计算一部分向量的距离。这种方法称为近似最近邻(Approximate nearest neighbors:ANN),它提高了速度,但牺牲了结果的质量。一些常用的ANN索引包括局部敏感哈希(Locally Sensitive Hashing:LSH)、分层可导航小世界(Hierarchical Navigable Small Worlds:HNSW)或倒排文件索引(Inverted File Index:IVF)等。

图:向量数据库结构

以上结构图,核心包括两个关键部分:Embedding 和 vector database ,Embedding过程是将非结构化的数据编码为向量,这些非结构化的数据包括:文本、图片等等,Embedding 的核心Embedding Model。过程包括:

  • 使用嵌入模型(Embedding Model)来为想要索引的内容创建向量。这些内容包括文本、图片、视频等等。
  • 向量被插入到向量数据库中,包括原始内容。
  • 当应用程序发出查询时,使用相同的嵌入模型为查询创建向量,并使用这些向量在数据库中查询相似的向量。如前所述,这些相似的向量与用来创建它们的原始内容相关联。

在chatGPT火爆的春天里,各种向量数据库如雨后春笋般冒出来,参见:https://github.com/topics/vector-database ;为更好理解向量数据库,笔者试用了两个开源的向量数据库:Chroma 和 milvus

Chroma :the open-source embedding database.

 

Githubhttps://github.com/chroma-core/chroma

Chroma是一个开源的嵌入向量数据库,专门用于存储和检索向量嵌入。它提供高效的存储和检索功能,支持相似度搜索和大规模向量数据处理。Chroma的架构设计灵活,具备可扩展性和高性能,能够处理不断增长的数据量和查询负载。开发人员可以根据自己的需求自定义和扩展Chroma的功能,利用向量嵌入实现先进的语义搜索和分析能力。

图:Chroma应用交互流程

import chromadb
# setup Chroma in-memory, for easy prototyping. Can add persistence easily!
client = chromadb.Client()

# Create collection. get_collection, get_or_create_collection, delete_collection also available!
collection = client.create_collection("all-my-documents")

# Add docs to the collection. Can also update and delete. Row-based API coming soon!
collection.add(
    documents=["This is document1", "This is document2"], # we handle tokenization, embedding, and indexing automatically. You can skip that and add your own embeddings as well
    metadatas=[{"source": "notion"}, {"source": "google-docs"}], # filter on these!
    ids=["doc1", "doc2"], # unique for each doc
)

# Query/search 2 most similar results. You can also .get by id
results = collection.query(
    query_texts=["This is a query document"],
    n_results=2,
    # where={"metadata_field": "is_equal_to_this"}, # optional filter
    # where_document={"$contains":"search_string"}  # optional filter
)

Chroma支持的嵌入模型:

  • all-MiniLM-L6-v2
from chromadb.utils import embedding_functions
default_ef = embedding_functions.DefaultEmbeddingFunction()
  • Sentence Transformers
sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
                api_key="YOUR_API_KEY",
                model_name="text-embedding-ada-002"
            )
  • Instructor models
cohere_ef  = embedding_functions.CohereEmbeddingFunction(
        api_key="YOUR_API_KEY", 
        model_name="multilingual-22-12")

multilingual_texts  = [ 'Hello from Cohere!','您好,来自 Cohere!',]

cohere_ef(texts=multilingual_texts)
ef = embedding_functions.InstructorEmbeddingFunction(
model_name="hkunlp/instructor-xl", device="cuda")
  • Google PaLM API models
palm_embedding = embedding_functions.GooglePalmEmbeddingFunction(
    api_key=api_key, model=model_name)

milvus:github 星星最多的开源向量数据库

Milvus是github 星星最多的开源向量数据库,专门用于快速存储、检索和分析大规模向量数据。它提供高性能和可扩展的架构,支持多种向量索引算法和查询模式。Milvus可广泛应用于推荐系统、图像搜索、自然语言处理和机器学习等领域,帮助用户快速发现和分析相似的向量数据。

 

github:https://github.com/milvus-io/milvus

同时提供一个云化的服务(Zilliz CLoud),为了更简洁说明和体验向量数据,笔者直接开通的服务尝试向量数据库,免费100刀的试用额度,https://cloud.zilliz.com/ 。

milvus(Zilliz CLoud)

注册忽略,直接创建数据库和collection,可以自己上传数据(需要自己Embedding 向量 )也可以使用它样例数据创建collection,然后data preview 和搜索查询;后面部分Python/ target=_blank class=infotextkey>Python API 调用服务执行搜索等任务示例。

图:开始探索Zilliz CLoud

图:选择创建collection的方式

图:查看Schema

图:向量搜索

Python pymilvus

  • 连接远程的Milvus向量数据
import pandas as pd
from pymilvus import     connections,utility,FieldSchema,CollectionSchema,DataType,Collection
conn=connections.connect("default", host="in01-70ff1fe5d9bc5a0.aws-us-west-2.vectordb.zillizcloud.com", port="19537",secure = True,
                    user='db_admin', password=snbGetValue("milvus_pw"))
has = utility.has_collection("medium_articles")
print(f"Does collection medium_articles exist in Milvus: {has}")
  • 获得collection
collection = Collection("medium_articles")      # Get an existing collection.
collection.load()
  • collection 的元数据
  • Milvus查询query
  • Milvus 向量(vector)搜索

图:以上代码的Graph视图



Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
AI是万灵药?Meta要把大模型塞进AR眼镜里
寻找下一块“屏幕”,这无疑是最近几年科技行业的一个热门赛道。随着个人计算机点燃了互联网,智能手机让移动互联网无处不在之后,这前后两次造富神话的出现,也让所有人都在期待下...【详细内容】
2024-04-09  Search:   点击:(2)  评论:(0)  加入收藏
考研调剂第一次失败后,考生还能继续调剂吗
考研调剂失败后,考生仍然有机会继续调剂。如果考生在第一次调剂过程中没有收到复试通知,可以在时间允许的情况下继续申请其他院校的调剂,并参加复试。考生需要密切关注各高校的...【详细内容】
2024-04-09  Search:   点击:(2)  评论:(0)  加入收藏
高职单招是什么意思?
高职单招是什么意思?2024高考:高职单招和高考的区别在哪里?...【详细内容】
2024-04-09  Search:   点击:(3)  评论:(0)  加入收藏
在饭局上喝酒,要学会3句“万能开场白”,让大家对你刮目相看
在饭局上喝酒,是一个社交场合的重要环节。作为一个有见识的人,学会几句“万能开场白”不仅能活跃气氛,还能让人们对你刮目相看。以下就是三个可以用于各种场合的万能开场白,希望...【详细内容】
2024-04-09  Search:   点击:(2)  评论:(0)  加入收藏
汽车不停能开多少公里?老司机:别超过极限,否则伤车又伤人!
在如今这个汽车普及的时代,私家车已经成为了不少家庭的必备品。它不仅代表着一种出行的便利,更是生活品质的提升。然而,正如一枚硬币的两面,私家车的广泛使用也带来了一系列问题...【详细内容】
2024-04-09  Search:   点击:(2)  评论:(0)  加入收藏
三证齐全,中国“飞的”不远了?
【环球时报记者 丁雅栀 李炫旻 环球时报驻英国、德国特约记者 纪双城 青木】4月7日,中国民用航空局在广州为亿航智能EH216-S无人驾驶载人航空器系统颁发生产许可证,加上去年取...【详细内容】
2024-04-09  Search:   点击:(3)  评论:(0)  加入收藏
小米SU7被大卸八块,雷军回应了
4月8日晚国内有一场汽车发布会,然后出现了令人不可思议的一幕。他们把小米SU7当为标杆进行对比,但却把小米SU7的参数给标错了。随后小米官方连发三条信息进行强硬回应,最后的结...【详细内容】
2024-04-09  Search:   点击:(2)  评论:(0)  加入收藏
视频号,从抖音挖来一个“一姐”?
文|王亚琪编辑|斯问“你说你要尊严,一个月5000块钱的合同工资,能体现你的尊严吗?”“我那么多的人脉和资源,你如果够聪明的话,你踩着我肩膀往上爬不是更快吗?你拿着我每个月收来的房...【详细内容】
2024-04-09  Search:   点击:(2)  评论:(0)  加入收藏
0首付、0利息!多家车企跟进“车贷新政”,但背后还有“隐性”要求
“您是全款购车,还是贷款购车。”4月7日,《每日经济新闻》记者进入北京某吉利银河4S店后被销售人员如此询问。“如果您选择贷款购车,现在很划算,可以有多种分期方案可选。比如,至...【详细内容】
2024-04-09  Search:   点击:(2)  评论:(0)  加入收藏
真正0首付、0利息来了!“车贷新政”后,多家车企放大招,甚至出现高达3万元金融贴息
每经记者:段思瑶 每经编辑:王月龙,裴健如“您是全款购车,还是贷款购车。”4月7日,《每日经济新闻》记者进入北京某吉利银河4S店后被销售人员如此询问。“如果您选择贷款购车,现在...【详细内容】
2024-04-09  Search:   点击:(1)  评论:(0)  加入收藏
▌简易百科推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  京东云开发者    Tags:向量数据库   点击:(4)  评论:(0)  加入收藏
原来 SQL 函数是可以内联的!
介绍在某些情况下,SQL 函数(即指定LANGUAGE SQL)会将其函数体内联到调用它的查询中,而不是直接调用。这可以带来显著的性能提升,因为函数体可以暴露给调用查询的规划器,从而规划器...【详细内容】
2024-04-03  红石PG  微信公众号  Tags:SQL 函数   点击:(3)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28    51CTO  Tags:NoSQL   点击:(13)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  dbaplus社群    Tags:数据库连接池   点击:(12)  评论:(0)  加入收藏
八个常见的数据可视化错误以及如何避免它们
在当今以数据驱动为主导的世界里,清晰且具有洞察力的数据可视化至关重要。然而,在创建数据可视化时很容易犯错误,这可能导致对数据的错误解读。本文将探讨一些常见的糟糕数据可...【详细内容】
2024-03-26  DeepHub IMBA  微信公众号  Tags:数据可视化   点击:(6)  评论:(0)  加入收藏
到底有没有必要分库分表,如何考量的
关于是否需要进行分库分表,可以根据以下考量因素来决定: 数据量和负载:如果数据量巨大且负载压力较大,单一库单一表可能无法满足性能需求,考虑分库分表。 数据增长:预估数据增长...【详细内容】
2024-03-20  码上遇见你  微信公众号  Tags:分库分表   点击:(13)  评论:(0)  加入收藏
在 SQL 中写了 in 和 not in,技术总监说要炒了我……
WHY?IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?1、效率低项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 ↓select *...【详细内容】
2024-03-18  dbaplus社群    Tags:SQL   点击:(5)  评论:(0)  加入收藏
应对慢SQL的致胜法宝:7大实例剖析+优化原则
大促备战,最大的隐患项之一就是慢SQL,对于服务平稳运行带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,在日常开发中如何避免出现慢SQL,出现了慢SQL应该按照什...【详细内容】
2024-03-14  京东云开发者    Tags:慢SQL   点击:(4)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12    InfoQ  Tags:数据库   点击:(26)  评论:(0)  加入收藏
SQL优化的七个方法,你会哪个?
一、插入数据优化 普通插入:在平时我们执行insert语句的时候,可能都是一条一条数据插入进去的,就像下面这样。INSERT INTO `department` VALUES(1, '研发部(RD)', &#39...【详细内容】
2024-03-07  程序员恰恰  微信公众号  Tags:SQL优化   点击:(19)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条