RAG :vector embeddings 怎么关联使用

构建检索增强生成(RAG)系统的关键因素之一:向量嵌入( vector embeddings )。这些元素是基本的技术和转换工具,使 RAG 系统在某些方面能够以类似于人类理解的形式处理语言。

embedding 提供了一种将文本信息转换为数字数据的方法。它允许系统快速搜索和检索最重要的信息以生成响应。这种能力对于提高 LLM 输出的准确性和上下文相关性至关重要。主要为了长文本,kimi 200w 字塞给 LLM 也是这么来的,切割完文本区域后,形成 embedding groups。

在RAG 系统中的 embedding 将数据 embedding 向量数据库以方便检索。

  • 搜索相关数据

  • 向 LLM 发送相关数据

  • LLM 回答使用发送的数据

什么是 embedding ?

Vector embedding 是机器学习和人工智能中使用的一种强大技术,可将原始数据转换为模型可以轻松处理的数字格式。这里说明下 embedding 跟 LLM 毫无关系,在 LLM 出现之前已经纯在这个技术了。这种转换涉及将数据表示为高维空间中的向量,其中相似的位置得更近,从而实现高效的计算和相似性比较。

Embedding 多种形式

Text embeddings

文本 embedding 是将文本转换为一组向量,其中每个向量代表一个单词或一个句子。Word2Vec、GloVe 和 BERT 等技术通常用于此目的。这些模型的工作原理是根据大型文本语料库中的上下文学习单词的表示。例如,出现在相似上下文中的单词(例如“国王”和“女王”)将具有接近的向量表示。中文需要训练出中文的 embedding 库,不然会导致不准确,或者生僻词无法理解。

Image embeddings

图像 embedding 是将图像转换为数字向量。此类嵌入需要不同类型的嵌入器,在这种情况下,通常使用卷积神经网络(CNN)来生成这些嵌入。图像通过 CNN 的各个层,提取不同抽象级别的特征。输出是一个密集向量,封装了图像的视觉特征,对于图像识别、分类和检索等任务很有用。

Audio embeddings

音频数据也可以转换为向量嵌入。 Mel Frequency Cepstral Coefficients (MFCC) 等技术或 WaveNet 和 DeepSpeech 等深度学习模型用于从原始音频中提取特征。然后,使用这些特征创建表示音频的向量,该向量可用于语音识别、音乐分析和音频分类等应用。

在这里插入图片描述
解释:多模态理解后转化成高纬度向量特征

Text embedding 如何工作?

Text embedding 以数字格式表示单词,捕获它们之间共享的语义关系和特征。以下是该过程的工作原理,结合以下示例,其中包括单词“King”、“Queen”、“Boy”和“Girl”。在考虑矢量化时,想象一个多维空间,其中每个维度都可以代表年龄、性别、阶级等特征。在这样的空间中:

  • “ King ” 可以表示为坐标上的一个点(男性,皇室)
  • “ Queen ”(女性,皇室成员)
  • “ Boy ”为(男性,低阶级)
  • “ Gril ”为(女性,低阶级)

图片

  • 性别特征:在矢量空间中,“ King ” 和 “ Boy ”在性别维度上的位置会更接近,反映了他们共同的男性属性。同样,“ Queen ” 和 “ Gril ” 也会因为女性属性而在这个维度上聚集在一起。
  • 阶级特征:“ King ” 和 “ Queen ”在皇室维度上彼此接近,反映了他们在皇室中的崇高地位。相比之下,“ Boy ” 和 “ Gril ”由于其一般非皇室身份,在这个维度上可能会距离 “ King ” 和 “ Queen ” 更远

将这些嵌入可以用于各种应用程序,例如:

相似度测量:计算单词之间的距离以找出它们的相似程度(例如,“ King ” 与 “ Queen ” 的距离比 “ King ” 与 “ Boy ” 的距离更近)。解决诸如类比,“国王配对女王,男孩配对什么?”的问题。该模型会发现 “ Girl ” 作为最接近的词向量。

机器翻译和 NLP 任务:使用这些向量来理解情感分析、分类等任务中的文本。embedding 在捕获这种微妙关系方面的有效性使其在自然语言处理中非常有价值,使机器能够以更类似于人类和直观的方式处理文本。Word2Vec、GloVe 以及最近的 BERT 和 GPT 等模型都使用这些原理来创建强大的嵌入。

RAG 系统中的 vector embedding:检索增强生成(RAG)系统是一种先进的 NLP 架构,通过将语言模型与基于检索的信息相结合来增强语言模型的功能。该系统显著提高了语言模型生成的响应的准确性和相关性,特别是在需要特定知识的复杂领域。

矢量数据库与 embedding 结合

在 RAG 系统检索相关数据之前,信息的结构必须使其易于访问和比较。这涉及数据矢量化。所有数据,无论是文本、图像还是任何其他形式,都需要转换为向量。只不过是提取到更高维度,类似 CNN。这意味着数据库中的每个项目都被转换为表示数据的各种特征的高维数值向量。这里科普另一个 RAG graph 的知识(Graph RAG :智能搜索的未来)

矢量数据库创建和存储:然后将这些矢量存储在矢量数据库中,通常使用 FAISS(Facebook AI 相似性搜索)等系统。这些系统允许高效检索接近高维空间中给定查询向量的向量,这对应于检索与查询相似或相关的数据。

在这里插入图片描述

RAG系统分三步解释:

第一步查找相关数据,也是查询向量化,当收到查询时,首先使用与创建数据库向量相同的模型或方法将其转换为向量。然后检索,使用查询向量在向量数据库中搜索相似向量。这些向量的相应数据(可以是文本段落、图像等)被认为与查询最相关。

第二步向LLM发送相关数据,检索到的数据通常以语言模型可以轻松使用的方式进行预处理或格式化。这可能涉及总结信息或将其转换为模型可以理解的结构化格式。也就是需要提示词。处理后的相关数据随后被输入大型语言模型 (LLM) 作为附加上下文或输入的一部分。此步骤至关重要,因为它为 LLM 提供了与用户查询直接相关的特定信息。

第三步 LLM 使用发送的数据进行应答,利用检索到的数据提供的上下文,LLM 生成响应。该模型利用了在预训练期间学到的一般知识和检索数据提供的特定信息。最后生成的响应有时会被细化或调整,以确保一致性和相关性。输出将作为初始查询的答案呈现。

RAG 系统的优点

将检索系统与 RAG 设置中的生成模型相集成,不仅可以提供上下文准确的响应,还可以深入了解特定数据,这使得它们在医疗、法律或技术领域等精确信息至关重要的专业领域特别有用。 这种多步骤方法利用了检索系统和生成人工智能的优势,弥补了庞大的数据资源和复杂的语言能力之间的差距,以及专业领域垂直的深度,从而产生内容丰富且与所提出的查询高度相关的输出。

W&B

Weave 是 Weights & Biases 的一款强大工具,旨在简化生产过程中机器学习模型的监控。它提供了一个易于使用的界面,用于跟踪各种指标、可视化数据并实时检查模型性能。通过将 Weave 集成到的 RAG 系统中,增强了在生产过程中监控模型性能的能力。

要使用 Weave,首先使用 weave.init(‘your_project_name’) 对其进行初始化。接下来,将 @weave.op() 装饰器添加到想要跟踪的任何函数中。该装饰器自动记录函数的所有输入和输出,捕获有关其操作的详细信息。然后,用户可以在 Weave 界面中检查这些数据,以便轻松检查函数调用。将在该项目中使用 Weave 来跟踪模型的输入和输出。

构建金融预测的RAG系统

在下面的代码中,将构建我们自己的 RAG 系统。该 RAG 系统将包括 OpenAI LLM、我们从中获取数据的住房数据集、矢量数据库以及 FAISS(用来存储矢量化数据的矢量数据库)。

图片

Step 1: Installing the necessary libraries

# 安装依赖
~pip install langchain langchain-community tiktoken faiss-cpu transformers pandas torch openai
Step 2: Importing the necessary libraries

这些库将包括允许我们构建答案链的 LLMChain、存储矢量化数据的 FAISS 以及作为首选数据嵌入器的 OpenAIEmbeddings。

在这里插入图片描述

Step 3: Integrating W&B Weave into our code
# 初始化 weave
weave.init('RAG_System')
Step 4: Loading and processing our dataset

从本地 CSV 文件加载数据集。始终可以使用选择的任何数据集,确保在使用前正确处理数据集。

df = pd.read_csv("/kaggle/input/housing-in-london/housing_in_london_monthly_variables.csv")
# 使用10%的数据
df = df.sample(frac=0.1, random_state=42)
# 将把字段组合成文本字段以便于处理
df['text'] = df.apply(lambda row: f"Date: {row['date']}, Area: {row['area']}, "f"Average Price: {row['average_price']}, "                                  f"Code: {row['code']}, Houses Sold: {row['houses_sold']}, "                                  f"Number of Crimes: {row['no_of_crimes']}, "                                  f"Borough Flag: {row['borough_flag']}", axis=1)
# 准备好基础数据    
texts = df['text'].tolist()                              

Step 5: Creating and storing our embeddings

# Create embeddings for the texts.
embeddings = OpenAIEmbeddings(api_key=api_key)
vectors = embeddings.embed_documents(texts)
# 创建一个 FAISS 矢量存储并将数据嵌入存储在其中。并且添加了逻辑来缓存向量存储,以避免每次运行时生成新的嵌入:
# Check if the vector store already exists
vector_store_path = "faiss_index"if os.path.exists(vector_store_path):# Load the existing vector store    vector_store = FAISS.load_local(vector_store_path, embeddings, allow_dangerous_deserialization=True)
else:# Create and save the vector store    vectors = embeddings.embed_documents(texts)    vector_store = FAISS.from_texts(texts, embeddings)    vector_store.save_local(vector_store_path)

Step 6: Retrieving our data

定义检索器函数。在本例中,将 K 值定义为 20。这将为给定的每个查询从向量数据库中检索 20 个数据点。

def retrieve(query, k=20):return vector_store.similarity_search(query, k=k)    # 创建一个prompt_template
prompt_template = PromptTemplate(input_variables=["context", "question"],    template="""Given the following data from the London housing dataset:
{context}Please use the provided data to answer the question accurately. Calculate any necessary averages or totals directly from the data provided.Question: {question}"""
)

Step 7: Testing and evaluating our model

# Initialize the OpenAI LLM, and insert your OpenAI key below.llm = OpenAI(api_key=api_key)# Here we will be creating an LLM chain.llm_chain = LLMChain(prompt=prompt_template, llm=llm)# We will define a custom function to generate a response using retrieval and LLM chain. Here we leverage W&B Weave so that we can automatically log inputs and outputs to our generate_response function, which allows us to easily monitor how are model is performing in production!@weave.op()
def generate_response(question):# Retrieve relevant documents    retrieved_docs = retrieve(question)    context = "\n".join([doc.page_content for doc in retrieved_docs])       # Print the retrieved documents for debugging    print(f"Retrieved documents for question '{question}':")    for i, doc in enumerate(retrieved_docs):     print(f"Document {i+1}:\n{doc.page_content}\n")  # Generate response using LLM chain    response = llm_chain.run(context=context, question=question)    return {"response": response, "context": context} # Here are sample questions that we will use to test our model.questions = ["Using the data retrieved, what was the average price of houses in Westminster in 2019?",    "Using the data retrieved, how many crimes were reported in Hackney in 2018?",    "Using the data retrieved, what is the average price trend in London over the years?",
]# Get answers to the example questions.for question in questions:answer = generate_response(question)    print(f"Q: {question}\nA: {answer}\n")
Weave Logging

以下是模型的结果。由于将 Weave 添加到了generate_response 函数中,这里会自动记录我们的问题、上下文和响应。在 Weave 内部,将看到每个函数调用都有多个单元格,如下所示:

图片

单击任何单元格,并检查有关函数输入和输出的更多详细信息

图片

总的来说,Weave 是一个超级简单的工具,可用于在 RAG 系统中记录数据,因为它只需要初始化 Weave,然后添加 @weave.op() 装饰器。例如,可能想要根据以前的生产数据训练新模型,或者可能只是想要一种快速、简单的方法来监控模型的性能。如上所示,上下文是我们的嵌入搜索检索到的信息,而响应是由我们的 LLM 使用检索到的上下文生成的。

结论

通过将各种形式的数据转换为高维向量,嵌入允许 RAG 系统有效地检索和利用相关信息,从而显著提高生成响应的准确性和上下文相关性。矢量嵌入对于提高 RAG 系统的性能至关重要,弥补海量数据资源和复杂的语言能力之间的差距,以提供高度信息化和相关的输出。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MFC常见问题解决

文章目录 1. 单文档程序初始化显示设置问题解决方案 1. 单文档程序初始化显示设置 问题 在Microsoft Foundation Classes (MFC) 中,单文档应用程序(SDI)的初始化时默认并不设置为最大显示。但你可以通过编程方式在程序启动时将其设置为全屏…

微信小程序的校园点餐系统-计算机毕业设计源码56979

摘 要 近年来,随着移动互联网的迅猛发展,微信小程序作为一种轻量级应用形式逐渐受到人们的关注和喜爱。在此背景下,各行各业开始向微信小程序上线他们的服务,其中包括餐饮行业,在校园内,学生、教职工和访客…

Arthas实战(5)- 项目性能调优

1、接口耗时查询:trace命令 trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。 1.1 准备测试应用 新建一个 SpringBoot 应用,写一耗时久的代码&…

能否免费使用Adobe XD?

Adobe XD不是免费的。Adobe 目前XD采用订阅模式,提供订阅模式 7 每天试用期结束后需要付费购买,具体价格根据不同的订阅计划确定,包括每月购买,包括 9.99 美元或每月 99.99 美元,或者选择购买Adobe CreativeCloud整体订…

内核错误定位

内核打印出如下: 在代码目录输入: ./prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb kernel/vmlinux 进入gdb 命令模式 输入 l *(rk628_csi_probe0xf0) 能定位到出现问题地方。 最后就…

android iconfont带图标的图文并茂的一种实现

android实现图文并茂方法很多。 这里针对,仅本地图标,需要对齐,任意位置,兼容换行导致后面空白的问题做的一种方案。 www.iconfont.cn,注册; 上传svg的icon; 下载项目得到iconfont.ttf&#xf…

AI绘画Stable Diffusion【图生图教程】:图片高清修复的三种方案详解,你一定能用上!(附资料)

大家好,我是画画的小强 今天给大家分享一下用AI绘画Stable Diffusion 进行 高清修复(Hi-Res Fix),这是用于提升图像分辨率和细节的技术。在生成图像时,初始的低分辨率图像会通过放大算法和细节增强技术被转换为高分辨…

以某头部基金实践为例,验证深信服超融合对TA系统承载能力

TA(Transfer Agent)开放式基金登记过户系统是交易管理系统的重要组成部分,是登记注册机构向投资者提供账户管理、份额登记、交易清算、红利发放、持有人名册保管的综合服务系统。 作为开放式基金运作的核心系统之一,承担着投资者…

计算机视觉——opencv快速入门(二) 图像的基本操作

前言 上一篇文章中我们介绍了如何配置opencv,而在这篇文章我们主要介绍的是如何使用opencv来是实现一些常见的图像操作。 图像的读取,显示与存储 读取图像文件 在opencv中我们利用imread函数来读取图像文件,函数语法如下: imagecv2.imre…

深度调峰汽轮机相关技术资料 厂家培训用

网盘 https://pan.baidu.com/s/16KfuoVko5xCUk3bDOfTlvQ?pwdezjb 亚临界循环流化床机组深度调峰下的输出功率预测方法.pdf 基于时间序列分析的燃煤电厂深度调峰预测方法及装置】.pdf 基于汽轮机低压缸排汽压力调节的深度调峰方法.pdf 基于深度调峰工况下阀门阀杆的振动预测方…

01--SpringAI接入大模型,chatgpt,Java接入人工智能大模型

01–SpringAI接入大模型,chatgpt,Java接入人工智能大模型 文章目录 01--SpringAI接入大模型,chatgpt,Java接入人工智能大模型一、准备工作?①:环境准备 二、创建一个springAI项目①:创建一个根项目②:创建一个SpringAI模块01.解决…

国际水务交流 | 一带一路沿线水环境考察暨中马水务合作论坛

从具体区域来看,“一带一路"沿线国家环境问题复杂而多样,各国生态环境特征差异明显 东南亚尤其是东盟地区受热带季风影响,降水较多,洪水高发,也是世界生物最为多样最为丰富的地区之一,这一区域面临森…

项目实战--Spring Boot与PageHelper的集成及线程污染解决

一、PageHelper使用背景 公司要做个简单管理系统,要我搭建Spring BootMyBatisPageHelperRedis的项目框架然后交i给实习生来开发。这个其实很简单,但是遇到搭建和使用过程中PageHelper有好多小坑,就记录一下,避免再踩。 版本选择&…

C语言_操作符

目录 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用,函数调用,结构成员 表达式求值 隐式类型转换 算术转换 操作符的属性 练习题 代码仓库 算术操作符 加()&#x…

自定义通信协议实例

自定义通信协议是指通信双方为了实现特定功能或满足特定需求,在通信过程中自行约定的一种通信规则。这种协议通常包括数据的格式、传输方式、校验方法等内容,以确保通信双方能够正确地理解和交换信息。以下是关于自定义通信协议的一些详细解释和示例&…

智能插座搭配BIOS唤醒功能实现远程定时开关机

智能插座 智能插座凭借其强大的联网能力,不仅能够实现远程操控开关电源,部分高端型号更是集成了电量统计与自动化操作功能,为用户带来了前所未有的便捷体验。以下是我对几款体验过的智能插座的简要评价,因版本差异可能有所不同。…

工业交换机端口统计功能

工业交换机端口统计功能不仅是一项技术手段,更是一双透视企业网络健康状态的慧眼。通过这一功能,企业能够实时捕捉到网络中每一个端口的流量情况,这不仅仅是数据的积累,更是对网络脉搏的精准把握。当网络的每一个脉动都被记录在案…

建智慧医院核心:智能导航系统的功能全析与实现效益

在数字化转型的浪潮中,智慧医院的建设是医疗行业数字化转型的关键步骤。随着医院规模的不断扩大和医疗设施的日益复杂,传统的静态不连续的导航方式已无法满足患者的需求。院内智能导航系统,作为医疗数字化转型的关键组成部分,正逐…

环境检测聚四氟乙烯微波消解罐 特氟龙反应釜 适用于COD测定

COD消解罐是实验室中用于测定水样中化学需氧量(Chemical Oxygen Demand,简称COD)的一种专用设备。化学需氧量是衡量水体污染程度的一个重要参数,它表示在一定条件下,水样中的有机物质和部分无机物质被氧化的程度。以下…

中霖教育:二建报名成功后怎么审核?

【中霖教育怎么样】【中霖教育靠谱吗】 在成功完成二级建造师资格考试的报名流程后,需要准备后续的审核阶段,审核是否通过关乎考生是否能顺利参加考试,审核的方式包括:现场审核、网络审核以及考试后的审核。 某些地区会要求考生…