“矢量数据库如何塑造生成AI解决方案的未来?”
矢量数据库:构建AI解决方案未来的关键
介绍
在快速发展的生成式人工智能领域中,向量数据库的重要作用日益显现。本文深入探讨了向量数据库与生成式人工智能解决方案之间的动态协同作用,探索这些技术基石如何塑造人工智能创造力的未来。让我们一起踏上这场强大联盟的探索之旅,揭示向量数据库对创新人工智能解决方案的转变影响。
学习目标
本文将帮助您了解以下向量数据库的方面:
- 向量数据库的重要性及其关键组成部分
- 向量数据库与传统数据库的详细比较研究
- 从应用视角探索向量嵌入
- 使用Pinecone构建向量数据库
- 使用Langchain LLM模型实现Pinecone向量数据库
本文是数据科学博文马拉松的一部分。
- 微软与美国工会联手,讨论人工智能劳动力问题
- 加利福尼亚洛杉矶大学和卡内基梅隆大学的研究人员推出Stormer:一种可伸缩的Transformer神经网络,用于熟练可靠的中程天气预报
- “Windows 12 将搭载人工智能魔法:展望科技的未来”
什么是向量数据库?
向量数据库是以空间存储的一种数据集合形式。在这里,它以数学表示的形式存储,因为存储在数据库中的格式使得开放式人工智能模型更容易记忆输入,并允许我们的开放式人工智能应用在数字化转型的行业中对各种用例进行认知搜索、推荐和文本生成。存储和检索数据被称为“向量嵌入”或“嵌入”。此外,它以数值数组格式表示。相比于用于人工智能的传统数据库,具有大规模、索引能力的搜索要容易得多。
向量数据库的特点
- 它充分利用了这些向量嵌入的强大能力,实现了对大规模数据集的索引和搜索。
- 与所有数据格式(图像、文本或数据)兼容。
- 由于采用了嵌入技术和高度索引特性,可以为给定问题提供完整的数据和输入解决方案。
- 向量数据库通过包含数百个维度的高维向量来组织数据,我们可以很快地对其进行配置。
- 每个维度对应数据对象所代表的特定特征或属性。
传统数据库与向量数据库的比较
- 图片展示了传统数据库和向量数据库的高级工作流程
- 传统数据库使用SQL语句进行正式数据库交互,并将数据存储在基于行和表的格式中。
- 在向量数据库中,交互通过纯文本(如英文)进行,并且数据存储在数学表示中。
传统数据库与向量数据库的相似之处
我们必须考虑向量数据库与传统数据库的差异。让我们在这里进行讨论。我可以给出一个快速的区别,传统数据库中,数据完全按照原样存储,我们可以根据业务需求或要求添加一些业务逻辑来调整数据,并合并或拆分数据。然而,向量数据库经历了巨大的转变,数据成为一个复杂的向量表示形式。
在理解向量数据库与关系数据库对比方面,以下图片对您提供了一个了解并明确的视角。简而言之,我们可以向向量数据库执行插入和删除操作,但不能执行更新语句。
理解向量数据库的简单类比
数据是根据存储信息中的内容相似性而自动空间排列的。因此,让我们以百货商店为向量数据库类比; 所有产品根据性质、用途、制造、用量和数量进行摆放。在类似行为中,数据通过相似的排序方式在向量数据库中自动排列,即使在存储或访问数据时类型没有明确定义。
向量数据库允许在具体相似性上有突出的细粒度和维度,因此客户可以搜索所需的产品、制造商和数量,并将商品放入购物车中。向量数据库在完美存储结构中存储所有数据;在这里,机器学习和人工智能工程师不需要手动标记或标签存储的内容。
向量数据库的基本理论
- 向量嵌入及其范围
- 索引要求
- 理解语义和相似性搜索
向量嵌入及其范围
向量嵌入是用数字值表示的向量表示。以压缩格式嵌入捕捉原始数据的固有属性和关联性,使它们成为人工智能和机器学习用例中的核心。通过设计嵌入来将有关原始数据的相关信息编码到较低维空间中,可以确保高检索速度、计算效率和高效存储。
以更相同结构的方式捕捉数据的本质是向量嵌入的过程,形成“嵌入模型”。最终,这些模型考虑所有数据对象,在数据源内提取有意义的模式和关系,并将其转化为向量嵌入。随后,算法利用这些向量嵌入来执行各种任务。在线上提供了许多高度发达的嵌入模型,免费或按需付费,以便完成向量嵌入。
从应用视角看的向量嵌入范围
这些嵌入是紧凑的,包含复杂信息,继承了向量数据库中存储数据之间的关系,实现了有效的数据处理分析,以便于理解和决策,并在任何组织中动态构建各种创新数据产品。
向量嵌入技术在连接可读性数据与复杂算法之间弥补了差距。由于数据类型是数值向量,我们能够利用现有的开放AI模型,解锁大量生成式人工智能应用的潜力。
向量嵌入的多样用途
这种向量嵌入帮助我们完成多个任务:
- 信息检索:借助这些强大的技术,我们可以构建有影响力的搜索引擎,根据用户查询在存储的文件、文档或媒体中找到相应的答案
- 相似性搜索操作:这是有条理和索引的,可以帮助我们找到向量数据中不同出现之间的相似性。
- 分类和聚类:借助这些嵌入技术,我们可以执行这些模型来训练相关的机器学习算法,并对其进行分组和分类。
- 推荐系统:由于嵌入技术被适当地组织,这导致推荐系统能够根据历史数据准确关联产品、媒体和文章。
- 情感分析:这种嵌入模型帮助我们对情感进行分类和推导解决方案。
索引要求
正如我们所知,索引将提高传统数据库中表格数据的搜索能力,类似地,向量数据库提供了索引功能。
向量数据库提供“平坦索引”,直接表示向量嵌入。搜索能力全面,不使用预训练的聚类。查询向量在每个单独的向量嵌入中执行,并为每对计算K距离。
- 由于这种索引的简易性,创建新索引只需要进行最小计算。
- 实际上,平坦索引可以有效处理查询,并提供快速检索时间。
理解语义搜索和相似性搜索
我们在向量数据库中进行两种不同的搜索:语义搜索和相似性搜索。
- 语义搜索:在搜索信息时,我们不再使用关键词进行搜索,而是基于有意义的对话方法来找到信息。提示工程在将输入传递给系统中起着关键作用。这种搜索无疑可以实现更高质量的搜索和结果,可用于创新应用、搜索引擎优化(SEO)、文本生成和摘要等。
- 相似性搜索:在数据分析中,相似性搜索允许对结构不完全的数据集进行更好的分析。对于向量数据库,我们需要确定两个向量之间的接近程度以及它们之间的相似性,包括表格、文本、文档、图像、词语和音频文件。在理解的过程中,向量之间的相似性显现为给定数据集中数据对象之间的相似性。这种练习有助于我们理解互动、识别模式、提取见解并从应用角度做出决策。语义搜索和相似性搜索将帮助我们构建以下面向行业利益的应用:
- 信息检索:使用Open AI和向量数据库,我们将构建用于信息检索的搜索引擎,该搜索引擎将使用企业用户或终端用户的查询以及向量数据库中的索引文档。
- 分类和聚类:将相似的数据点或对象组进行分类或聚类,根据共享特征将它们分配给多个类别。
- 异常检测:通过测量数据点的相似性并检测异常来发现异常模式。
向量数据库中的相似性度量的类型
度量方法取决于数据的性质和具体的应用。常用的方法有三种,用于衡量相似性和熟悉度的机器学习方法。
欧氏距离
简单来说,两个向量之间的距离是两个向量点之间的直线距离,用于衡量它们之间的相似性。
点积
通过点积可以了解两个向量之间的对齐情况,指示它们是否指向相同方向、相反方向或者互相垂直。
余弦相似度
通过使用两个向量之间的夹角进行评估,来衡量两个向量之间的相似性,如图所示。在这种情况下,向量的值和大小不重要,不会影响结果;只有角度参与计算。
传统数据库通过精确匹配SQL语句来搜索并以表格式检索数据。同时,在向量数据库中,我们使用提示工程技术使用英语以简洁明了的方式搜索与输入查询最相似的向量。该数据库使用近似最近邻(ANN)搜索算法来找到相似的数据。始终以高性能、准确性和响应时间提供相对准确的结果。
工作机制
- 向量数据库首先将数据转换为嵌入向量,并将其存储在向量数据库中,并为快速搜索创建索引。
- 应用程序的查询将与嵌入向量进行交互,使用索引在向量数据库中搜索最近的邻居或相似数据,并将结果传递给应用程序。
- 根据业务需求,检索到的数据将被微调、格式化并显示给最终用户端或查询或操作。
创建向量数据库
让我们与Pinecone连接。
您可以使用Google、GitHub或Microsoft ID连接到Pinecone。
为您的使用创建一个新的用户登录。
成功登录后,您将进入索引页面,可以为您的向量数据库创建索引。点击“创建索引”按钮。
通过提供名称和尺寸来创建新索引。
索引列表页面。
索引详情 – 名称、区域和环境 – 我们需要所有这些详细信息来从模型构建代码连接向量数据库。
项目设置详细信息。
您可以为了项目目的升级多个索引和密钥的首选项。
到目前为止,我们已经讨论了在Pinecone中创建向量数据库索引和设置。
使用Python实现向量数据库
现在,让我们做一些编程。
导入库
from langchain.embeddings.openai import OpenAIEmbeddingsfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.llms import OpenAIfrom langchain.vectorstores import Pineconefrom langchain.document_loaders import TextLoaderfrom langchain.chains.question_answering import load_qa_chainfrom langchain.chat_models import ChatOpenAI
为OpenAI和向量数据库提供API密钥
import osos.environ["OPENAI_API_KEY"] = "xxxxxxxx"PINECONE_API_KEY = os.environ.get('PINECONE_API_KEY', 'xxxxxxxxxxxxxxxxxxxxxxx')PINECONE_API_ENV = os.environ.get('PINECONE_API_ENV', 'gcp-starter')api_keys="xxxxxxxxxxxxxxxxxxxxxx"llm = OpenAI(OpenAI=api_keys, temperature=0.1)
初始化LLM
llm=OpenAI(openai_api_key=os.environ["OPENAI_API_KEY"],temperature=0.6)
初始化Pinecone
import pineconepinecone.init( api_key=PINECONE_API_KEY, environment=PINECONE_API_ENVindex_name = "demoindex"
导入.csv文件以建立向量数据库
from langchain.document_loaders.csv_loader import CSVLoaderloader = CSVLoader(file_path="/content/drive/My Drive/Colab_Notebooks/cereal.csv",source_column="name")data = loader.load()
将文本拆分成块
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=20)text_chunks = text_splitter.split_documents(data)
在text_chunks中查找文本
text_chunks
输出
[Document(page_content=‘name: 100% Bran\nmfr: N\ntype: C\ncalories: 70\nprotein: 4\nfat: 1\nsodium: 130\nfiber: 10\ncarbo: 5\nsugars: 6\npotass: 280\nvitamins: 25\nshelf: 3\nweight: 1\ncups: 0.33\nrating: 68.402973\nrecommendation: Kids’, metadata={‘source’: ‘100% Bran’, ‘row’: 0}), , …..
建立嵌入
embeddings = OpenAIEmbeddings()
为从“data”创建Pinecone向量数据库实例
vectordb = Pinecone.from_documents(text_chunks,embeddings,index_name="demoindex")
创建用于查询向量数据库的检索器。
retriever = vectordb.as_retriever(score_threshold = 0.7)
从向量数据库检索数据
rdocs = retriever.get_relevant_documents("Cocoa Puffs")rdocs
使用提示并检索数据
from langchain.prompts import PromptTemplateprompt_template = """给定以下文本作为背景和一个问题,仅基于这个背景生成一个答案,,请说"I don't know." 不用编造一个答案.背景: {context}问题: {question}"""PROMPT = PromptTemplate( template=prompt_template, input_variables=["context", "question"])chain_type_kwargs = {"prompt": PROMPT}
from langchain.chains import RetrievalQAchain = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, input_key="query", return_source_documents=True, chain_type_kwargs=chain_type_kwargs)
让我们查询数据。
chain('你能为孩子们推荐一些谷物吗?')
来自查询的输出
{'query': '你能为孩子们推荐一些谷物吗?','result': [Document(page_content='name: Crispix\nmfr: K\ntype: C\ncalories: 110\nprotein: 2\nfat: 0\nsodium: 220\nfiber: 1\ncarbo: 21\nsugars: 3\npotass: 30\nvitamins: 25\nshelf: 3\nweight: 1\ncups: 1\nrating: 46.895644\nrecommendation: Kids', metadata={'row': 21.0, 'source': '/content/drive/My Drive/Colab_Notebooks/cereal.csv'}), ..]
结论
希望您能理解向量数据库的工作原理、组成部分、架构和生成型AI解决方案中向量数据库的特点。了解向量数据库与传统数据库的区别以及与常规数据库元素的比较。确实,这种类比有助于更好地理解向量数据库。Pinecone向量数据库和索引步骤将帮助您创建一个向量数据库并为以下代码实现带来关键。
主要要点
- 适用于结构化、非结构化和半结构化数据。
- 它采用嵌入技术和高度索引的特征。
- 通过纯文本(例如英语)使用提示进行交互。数据以数学表示形式存储。
- 相似度通过欧氏距离、余弦相似度和点积进行校准。
常见问题
本文中显示的媒体不归Analytics Vidhya所有,仅由作者决定如何使用。