《语义捕捉全解析:从“我爱自然语言处理”到嵌入向量的全过程》
首先讲在前面,介绍一些背景
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. 在联网…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
