《语义捕捉全解析:从“我爱自然语言处理”到嵌入向量的全过程》
首先讲在前面,介绍一些背景
RAG(Retrieval-Augmented Generation,检索增强生成)
是一种结合了信息检索与语言生成模型的技术,通过从外部知识库中检索相关信息,并将其作为提示输入给大型语言模型(LLMs),以增强模型处理知识密集型任务的能力。以下是RAG的具体操作过程解析:
1.数据准备阶段
• 数据提取:使用相应的数据加载器从各种数据源(如PDF、Word、CSV、HTML等)中提取文本数据。例如,可以使用TextLoader
加载txt文本。
• 文本分割:将提取的文本分割成适当大小的块,以确保每个块的内容具有一定的语义完整性。常用的分割方法包括字符级分割、递归方式分割等。
• 向量化(embedding):使用嵌入模型(如HuggingFaceBgeEmbeddings
)将分割后的文本块转换为向量表示。• 数据入库:将向量化后的文本块存储到向量数据库(如Chroma
、weaviate
、FAISS
等)中,以便后续的高效检索。
2.检索阶段
• 用户提问:用户提出问题,系统需要从知识库中检索与该问题相关的信息。
• 向量化查询:使用相同的嵌入模型将用户的问题转换为向量表示。
• 相似度计算与检索:计算问题向量与知识库中文档块向量之间的相似度,选择相似度最高的前K个文档块作为当前问题的增强上下文信息。3.生成阶段
• 构造Prompt:将用户的问题和检索到的相关文档合并为一个新的提示(Prompt),可以使用ChatPromptTemplate
等工具来构造。• LLM生成答案:将构造好的提示输入到大型语言模型(如ChatZhipuAI
),模型会基于提供的信息生成最终的回答。
4.高级RAG
• 数据预处理:在数据索引阶段进行更精细的数据清洗、设计文档结构和添加元数据等,以提升文本的一致性、准确性和检索效率。
• 检索前处理:在检索前可以进行一些额外的处理,如查询扩展、语义解析等,以提高检索的准确性。
• 检索后处理:在检索后可以对结果进行排序、去重、融合等操作,以优化检索结果的质量。
• 生成优化:将检索与微调、强化学习等技术融合,进一步提升生成结果的质量和相关性。
5.模块化RAG
• 功能模块化:将RAG系统分解为多个功能模块,如查询搜索引擎、融合多个回答等,每个模块负责特定的任务。
• 模块编排:根据具体的应用场景和需求,对各个模块进行灵活的设计和编排,形成多种RAG模式。通过上述过程,RAG技术能够有效地结合外部知识库和大型语言模型的优势,生成更准确、更符合用户需求的回答。
向量化后的向量长度
• 固定长度:嵌入模型通常会将文本转换为固定长度的向量。例如,常见的嵌入模型如text-embedding-ada-002
会生成固定长度的向量(如1024维或768维),无论输入文本的长度如何。
• 与文章无关:因此,不同文章的向量化后的向量长度是相同的,都是由嵌入模型的输出维度决定的。
向量数据库的存储
• 存储向量:向量化后的文本向量会被存储在向量数据库中。向量数据库专门用于存储和检索高维向量数据,如FAISS、Milvus等。
• 索引结构:向量数据库通常会建立索引结构(如KD树、球树、LSH等),以便快速检索相似向量。
检索和相似度计算
• 用户提问向量化:当用户提出问题时,使用相同的嵌入模型将问题文本转换为向量表示。
• 相似度计算:计算用户问题向量与向量数据库中存储的向量之间的相似度。常用的相似度计算方法包括:
• 余弦相似度:衡量两个向量之间的夹角余弦值,值越大表示越相似。
• 欧氏距离:衡量两个向量之间的直线距离,值越小表示越相似。
• 检索相关向量:根据相似度计算结果,选择相似度最高的前K个向量对应的文本块作为检索结果。
• 返回对应信息:通过检索到的文本块,找到与用户问题相关的信息,并将其作为上下文提供给语言模型进行生成。
示例代码
以下是一个简单的示例代码,展示如何使用嵌入模型和向量数据库进行检索:
from openai import OpenAI
import numpy as np
from numpy.linalg import norm# 初始化OpenAI客户端
client = OpenAI()# 获取嵌入向量
def get_embedding(text, model="text-embedding-ada-002"):response = client.embeddings.create(input=text, model=model)return response.data[0].embedding# 计算余弦相似度
def cosine_similarity(a, b):return np.dot(a, b) / (norm(a) * norm(b))# 示例文档
documents = ["联合国就苏丹达尔富尔地区大规模暴力事件发出警告","土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判","日本岐阜市陆上自卫队射击场内发生枪击事件 3人受伤","国家游泳中心(水立方):恢复游泳、嬉水乐园等水上项目运营","我国首次在空间站开展舱外辐射生物学暴露实验",
]# 获取文档的嵌入向量
doc_embeddings = [get_embedding(doc) for doc in documents]# 用户提问
query = "国际争端"
query_embedding = get_embedding(query)# 计算相似度
similarities = [cosine_similarity(query_embedding, doc_embedding) for doc_embedding in doc_embeddings]# 输出最相似的文档
most_similar_index = np.argmax(similarities)
print(f"最相似的文档: {documents[most_similar_index]}")
输出结果
最相似的文档: 土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判
通过上述过程,可以有效地根据用户提出的问题找到相关的向量和对应的信息。
正文如下开始旅程
相关文章:

《语义捕捉全解析:从“我爱自然语言处理”到嵌入向量的全过程》
首先讲在前面,介绍一些背景 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索与语言生成模型的技术,通过从外部知识库中检索相关信息,并将其作为提示输入给大型语言模型ÿ…...

HIVE如何注册UDF函数
如果注册UDF函数的时候报了上面的错误,说明hdfs上传的路径不正确, 一定要用下面的命令 hadoop fs -put /tmp/hive/111.jar /user/hive/warehouse 一定要上传到上面路径,这样在创建函数时,引用下面的地址就可以创建成功...

VsCode创建VUE项目
1. 首先安装Node.js和npm 通过网盘分享的文件:vsCode和Node(本人电脑Win11安装) 链接: https://pan.baidu.com/s/151gBWTFZh9qIDS9XWMJVUA 提取码: 1234 它们是运行和构建Vue.js应用程序所必需的。 1.1 Node安装,点击下一步即可 …...

x64、aarch64、arm与RISC-V64:详解四种处理器架构
x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…...

如何使用iframe来渲染ThingsBoard仪表盘
1、概述 当我们在使用ThingsBoard的时候,有时候需要再自己的前端项目中展示大屏,thingsboard的仪表盘是可以来做大屏的,虽然界面达不到非常的美观,但是对比之前的版本,现在的版本仪表盘做了很多的优化了。可以实现将thingsboard的仪表板嵌入到自己的vue界面中作为大屏显示…...

退格法记单词(类似甘特图)
退格法记单词,根据记忆次数或熟练程度退格,以示区分,该方法用于短时高频大量记单词: explosion爆炸,激增 mosquito蚊子granary粮仓,谷仓 offhand漫不经心的 transient短暂的slob懒惰而邋遢的…...
计算 MySQL 表行的成本是多少?
当计算表中的所有行时,将使用什么索引?好吧,MySQL文档文档对此提供了一个直接的答案,引用: InnoDB 通过遍历最小的可用二级索引来处理 SELECT COUNT(*) 语句除非索引或优化器提示指示优化器使用…...

Pygame介绍与游戏开发
提供pygame功能介绍的文档:Pygame Front Page — pygame v2.6.0 documentation 基础语法和实现逻辑 与CLI不同,pygame提供了图形化使用界面GUI(graphical user interface)基于图像的界面可以创建一个有图像和颜色的窗口 要让py…...
webpack配置方式
1. 基本配置文件 (webpack.config.js)(导出一个对象) 最常见的方式是通过 webpack.config.js 文件来配置 Webpack,导出一个对象。你可以在这个文件中导出一个配置对象,指定入口、输出、加载器、插件等。 // webpack.config.js m…...
10. k8s二进制集群之Kube Scheduler部署
在开始之前需要准备什么?创建kube-scheduler证书请求文件【即证书的生成⓵】根据上面证书配置文件生成kube-scheduler证书【即证书的生成⓶】创建与关联kube-scheduler配置文件(为后面生成系统服务做准备)创建kube-scheduler服务配置文件【准备系统服务⓵】创建kube-schedul…...
java实现8583报文解析技术详解
文章目录 概要整体架构流程技术名词解释技术细节小结概要 ISO 8583协议是金融交易系统中广泛使用的通信协议,用于规范报文的格式和数据交换。解析8583报文是实现金融交易系统的关键技术之一。本文将详细介绍8583报文解析的核心实现,重点关注解析算法和关键代码逻辑。 8583报…...
k8s服务发现有哪些方式?
在 Kubernetes 中,服务发现是指如何让应用程序在集群内互相找到并通信。Kubernetes 提供了多种服务发现的方式,适应不同的使用场景。以下是 Kubernetes 中常见的服务发现方式: 1. 环境变量(Environment Variables) 概…...

【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程
超详细的 SQL Server Management Studio (SSMS) 下载、安装、连接数据库配置及卸载教程 SQL Server Management Studio (SSMS) 是微软提供的图形化管理工具,主要用于连接、管理和开发 SQL Server 数据库。以下是详细的 SSMS 下载、安装、连接数据库以及卸载的完整教…...

[ESP32:Vscode+PlatformIO]添加第三方库 开源库 与Arduino导入第三方库的区别
前言 PlatformIO与Arduino在添加第三方库方面的原理存在显著差异 在PlatformIO中,第三方库的使用是基于项目(工程)的。具体而言,只有当你为一个特定的项目添加了某个第三方库后,该项目才能使用该库。这些第三方库的文…...

音频文件格式——AAC、OGG和FLAC
3.AAC文件格式 3.1 封装格式解析 高级音频编码 (Advanced Audio Coding) 是一种用于有损数字音频压缩的音频编码标准。它被设计为 MP3 格式的继承者,在相同比特率下通常可以获得比 MP3 更高的音质。AAC有两种封装格式: ADIF&am…...

BUU26 [极客大挑战 2019]HardSQL1
输入一些SQL关键词,发现空格,,union,and,by都被过滤了 被过滤,就用like替代 发现登录成功,可以注入 报错注入 注意 1.这里过滤了空格,就用()将内容包裹起来 比如说:…...

多光谱成像技术在华为Mate70系列的应用
华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头,这是一款150万像素的多光谱摄像头。 相较于普通摄像头,它具有以下优势: 色彩还原度高:色彩还原准确度提升约 120%,能捕捉更多光谱信息,使拍摄照片色…...
借助 Cursor 快速实现小程序前端开发
借助 Cursor 快速实现小程序前端开发 在当今快节奏的互联网时代,小程序因其便捷性、高效性以及无需下载安装的特点,成为众多企业和开发者关注的焦点。然而,小程序的开发往往需要耗费大量的时间和精力,尤其是在前端开发阶段。幸运…...

【deepseek】ollama chatbox webui 本地部署deepseek 踩坑记录
部署 1、前往Ollama官网下载跨平台工具 官网直达:https://ollama.com/download 2、挑选适合自己设备的模型版本,获取运行指令 访问模型库:https://ollama.com/library/deepseek-r1 ▌配置建议: • 入门级:1.5B版本&…...
在离线的服务器上部署Python的安装库
在离线服务器上部署 Python 安装库(如 SQLAlchemy、pandas、pyodbc 等),可以使用以下方法: 方法 1:在联网机器上下载依赖,拷贝到离线服务器 适用于:服务器完全无法访问互联网。 步骤 1. 在联网…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...