可视化 RAG 数据 - 用于检索增强生成的 EDA

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。

欢迎关注公众号(NLP Research),及时查看最新内容

原文标题:Visualize your RAG Data — EDA for Retrieval-Augmented Generation

原文地址:https://medium.com/itnext/visualize-your-rag-data-eda-for-retrieval-augmented-generation-0701ee98768f

Github: https://github.com/Renumics/rag-demo/blob/main/notebooks/visualize_rag_tutorial.ipynb


如何使用 UMAP 降维技术对嵌入进行降维,以展示使用 OpenAI、Langchain 和 ChromaDB 的问题、答案及其与源文件的关系

像 GPT-4 这样的大型语言模型(LLM)在文本理解和生成方面表现出了令人印象深刻的能力。但它们在处理特定领域信息时面临挑战。当查询超出训练数据范围时,它们往往会产生错误的答案。此外,LLMs 的推理过程缺乏透明度,用户很难理解结论是如何得出的。

为解决这些挑战,一种被称为检索增强生成(Retrieval-Augmented Generation,RAG)的技术已经被开发出来。RAG 在语言大模型(LLM)的工作流中添加了一个检索步骤,使其能够在响应查询时从额外的源(例如您的私人文本文档)中查询相关数据。这些文档可以事先被划分为小片段,为这些片段生成嵌入(紧凑的向量表示),使用类似于 OpenAI 的 embedding-ada-002 的机器学习模型。具有相似内容的片段将具有相似的嵌入。当 RAG 应用程序收到一个问题时,它将该查询投影到相同的嵌入空间,并检索与查询相关的相邻文档片段。然后,LLM 使用这些文档片段作为上下文来回答问题。这种方法可以提供回答查询所需的信息,同时通过向用户呈现使用的片段来实现透明度。

在开发 RAG 应用程序时,正如许多其他领域所认识到的那样,对数据有一个良好的概览非常重要。对于 RAG 而言,可视化嵌入空间尤其有用,因为 RAG 应用程序会使用这个空间来查找相关信息。由于查询与文档片段共享空间,因此考虑相关文档片段与查询之间的接近程度尤为重要。我们建议使用 UMAP 之类的可视化方法,将高维嵌入减少为更易于管理的二维可视化,同时保留重要属性,如片段和查询之间的关系和邻近性。虽然高维嵌入被简化为只有两个分量,但仍然可以识别问题及其相关文档片段在嵌入空间中形成的聚类。这有助于深入了解数据的本质。

在本文中,您将学习如何

  • 准备文档:首先开始收集数据。本教程以维基百科中的一些HTML格式的一级方程式(Formula One)数据为例,用作构建RAG应用程序的数据集。当然,您也可以在这里使用自己的数据!

  • 拆分和创建嵌入:将收集到的文档拆分成更小的片段,并使用嵌入模型将其转换为紧凑的向量表示。这需要使用分割器、OpenAI 的text-embedding-ada-002 和作为向量存储的 ChromaDB。

  • 构建 LangChain:将用于创建上下文的提示生成器、用于获取相关片段的检索器和用于回答查询的 LLM(GPT-4)结合起来,建立 LangChain。

  • 询问问题:学习如何向 RAG 应用程序提问。

  • 可视化:使用 Renumics-Spotlight 可视化二维嵌入,并分析查询和文档片段之间的关系和邻近性。

本简化教程将引导您了解开发 RAG 应用程序的每个阶段,并特别关注可视化结果的作用。

准备

首先,安装所有必需的包:

pip install langchain langchain-openai chromadb renumics-spotlight 

本教程使用 Langchain、Renumics-Spotlight python 包:

  • Langchain:整合语言模型和 RAG 组件的框架,使设置过程更加顺畅。
  • Renumics-Spotlight:交互式探索非结构化 ML 数据集的可视化工具。

将使用 OpenAI 提供的所需 ML 模型

  • GPT-4:最先进的语言模型,以其先进的文本理解和生成能力而著称。

  • embedding-ada-002:一个专门用于创建文本嵌入表示的模型。

设置你的 OPENAI_API_KEY;例如,你可以在笔记本中使用笔记本行魔术命令设置它:

%env OPENAI_API_KEY=<your-api-key>

准备文件

对于这个演示,你可以使用我们准备的维基百科所有一级方程式文章的数据集。该数据集是使用wikipedia-api和BeautifulSoup创建的。你可以下载这个数据集。

将提取的 html 文件放入 docs/ 子文件夹。

或者,您也可以创建 docs/ 子文件夹并将自己的文件复制到其中,从而使用自己的数据集。

拆分并为数据集创建嵌入

您可以跳过这一部分,下载包含一级方程式数据集嵌入式数据的数据库。

要自行创建嵌入模型,首先需要设置嵌入模型和向量存储。这里我们使用 OpenAIEmbeddings 的 text-embedding-ada-002,以及使用 ChromaDB 的向量存储:

from langchain_openai import OpenAIEmbeddings
from langchain.vectorstores.chroma import Chromaembeddings_model = OpenAIEmbeddings(model="text-embedding-ada-002")
docs_vectorstore = Chroma(collection_name="docs_store",embedding_function=embeddings_model,persist_directory="docs-db",
)

向量存储将保存在 docs-db/ 文件夹中。

为了填充向量存储,我们使用 BSHTMLLoader 加载 HTML 文档:

from langchain_community.document_loaders import BSHTMLLoader, DirectoryLoader
loader = DirectoryLoader("docs",glob=

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

蜂窝物联网咖WiFi认证解决方案

项目背景 随着目前网咖模式越来越流行&#xff0c;给网吧部署一套无缝漫游的WIFI网络势在必行。同时&#xff0c;网吧无线准入的验证码在客户机上面进行更新&#xff0c;以防周边的人员进行蹭网&#xff0c;损失网吧的外网带宽。 01 需求分析 1. 网吧服务区域全部覆盖无盲区…

Android 解决后台服务麦克风无法录音问题

Android 解决后台无法录音问题 问题分析问题来源解决方案1. 修改清单文件:`AndroidManifest.xml`2. 修改启动服务方式3. 服务启动时创建前台通知并且指定前台服务类型参考文档最后我还有一句话要说我用心为你考虑黄浦江的事情,你心里想的却只有苏州河的勾当 问题分析 安卓9.…

5G端到端案例三:锚点基站侧5G连接与VOLTE专载建立流程冲突导致CSFB回落问题

1. 问题描述&#xff1a; NSA组网场景下&#xff0c;语音业务仍使用4G VoLTE方案&#xff0c;在拉网测试中&#xff0c;发现存在较多流程交叉导致的VOLTE接入失败的问题。 流程冲突时的空口信令表现为&#xff0c;终端添加SCG流程与语音专载流程冲突时&#xff0c;专有承载建…

125 Linux C++ 系统编程4 Linux 静态库制作,动态库制作,静态库和动态库对比。静态库运行时找不到库的bug fix

一 静态库 和动态库 对比 静态库的原理&#xff1a;假设我们有一个 静态库&#xff0c;大小为500M&#xff0c;这个静态库实现了一些打牌的逻辑算法&#xff0c;提供了一堆API&#xff0c;让开发者 可以轻松的实现 54张扑克牌的随机发牌&#xff0c;指定发牌等功能。 我们写了…

红日靶场3

靶场链接&#xff1a;漏洞详情 在虚拟机的网络编辑器中添加两个仅主机网卡 信息搜集 端口扫描 外网机处于网端192.168.1.0/24中&#xff0c;扫描外网IP端口&#xff0c;开放了80 22 3306端口 80端口http服务&#xff0c;可以尝试登录网页 3306端口mysql服务&#xff0c;可…

跟着野火学FreeRTOS:第二段(事件组)

在小节里面介绍了二进制信号量&#xff0c;计数信号量&#xff0c;互斥量和递归互斥量等功能&#xff0c;其中二进制信号量和计数信号量&#xff08;也包括队列&#xff09;常用于任务和任务之间以及任务和中断之间的同步&#xff0c;她们具有以下属性&#xff1a; 当等待的事…

备考2025年考研数学(三):2015-2024年考研数学真题练一练

今天&#xff0c;我们继续分享2015年-2024年的考研数学三选择题&#xff0c;随机做5道真题&#xff0c;并提供解析。看看正在备考2025年考研的你能做对几道。 考研数学和政治、英语一项&#xff0c;都是拉分大户&#xff0c;但是数学如果掌握了技巧&#xff0c;吃透了知识点的话…

马丽离开沈腾,独自闪耀,实力证明一切。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 马丽的事业突飞猛进&#xff0c;演艺之路从与沈腾的默默搭档到…

windows Server下Let‘s Encrypt的SSL证书续期

一、手动续期方法&#xff1a; 暂停IIS服务器 --> 暂时关闭防火墙 --> 执行certbot renew --> 打开防火墙 --> 用OpenSSL将证书转换为PFX格式-->pfx文件导入到IIS --> IIS对应网站中绑定新证书 --> 重新启动IIS -->完成 1、暂停IIS服务器 2、暂时关闭…

如何将QQ音乐的歌单导出到excel

一、提前准备 1.选择你需要导出的音乐歌单 2.得到你的歌单ID 1、首先打开QQ音乐&#xff0c;找到想要查看的歌单&#xff0c;点击歌单右上角的更多按钮。 2、其次在弹出的菜单中选择分享&#xff0c;在分享页面中&#xff0c;选择歌单分享。 3、最后在分享页面中&#xff0c…

【Docker 的安装:centos】

文章目录 1 :peach:各版本平台支持情况:peach:2 :peach:CentOS 安装:peach:2.1 :apple:安装依赖:apple:2.2 :apple:安装 Docker:apple:2.3 :apple:实战经验:apple:2.3.1 :lemon:Docker 镜像源修改:lemon:2.3.2 :lemon:Docker 目录修改:lemon: 1 &#x1f351;各版本平台支持情况…

【数据结构和算法初阶(C语言)】——数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)

1.何为数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。本质来讲就是在内存中去管理数据方式比如我们的增删查改。在内存中管理数据的方式有很多种&#xff08;比如数组结构、链式结构、树型结…

【蓝桥杯省赛真题26】python整数逆序输出 青少年组蓝桥杯比赛python编程省赛真题解析

目录 python整数逆序输出 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python整数逆序输出 第十二届蓝桥杯python比赛省赛真题 一、题目要求…

目标检测卷王YOLO卷出新高度:YOLOv9问世

论文摘要:如今的深度学习方法重点关注如何设计最合适的目标函数,使得模型的预测结果能够最接近真实情况。 同时,必须设计一个适当的架构,可以帮助获取足够的信息进行预测。 现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。 本文将深…

2024全国水科技大会暨流域水环境治理与水生态修复论坛(六)

论坛召集人 冯慧娟 中国环境科学研究院流域中心研究员 刘 春 河北科技大学环境与工程学院院长、教授 一、会议背景 为深入贯彻“山水林田湖是一个生命共同体”的重要指示精神&#xff0c;大力实施生态优先绿色发展战略&#xff0c;积极践行人、水、自然和谐共生理念&…

【大数据】Flink 内存管理(二):JobManager 内存分配(含实际计算案例)

Flink 内存管理&#xff08;二&#xff09;&#xff1a;JobManager 内存分配 1.分配 Total Process Size2.分配 Total Flink Size3.单独分配 Heap Size4.分配 Total Process Size 和 Heap Size5.分配 Total Flink Size 和 Heap Size JobManager 是 Flink 集群的控制元素。它由三…

【vscode】按F5无法执行调试python或go

原因&#xff1a; 找不到解析器&#xff0c;需要安装插件&#xff08;python&#xff0c;或go 等&#xff09; 安装插件后&#xff0c;还是无法执行&#xff0c;按 ctrlshiftp,看不到解析器 正常应该是&#xff1a; 解决方法&#xff1a; 1、判断python是否安装成功 pyth…

uni-app 黑魔法探秘 (一)—— 重写内置标签

一、背景 政采前端团队的移动端跨端解决方案选择的是 uni-app。跨端方案的好处就是一码多端&#xff0c;即书写一次就可以输出到 web、小程序、Anroid、iOS 等各端。既然是开发&#xff0c;那必然少不了配套的组件库和方法库&#xff0c;而我们公司因为历史原因存在一些的非 u…

每日一题(寻找奇数,寻找峰值)

寻找奇数_牛客题霸_牛客网 (nowcoder.com) #include <stdio.h> #include<stdlib.h> int main() {int n0;int num0;scanf("%d",&n);int* arr(int*)malloc(sizeof(int)*n);int i0;for(i0;i<n;i){scanf("%d",&arr[i]);//在循环内&…

C++之类作用域

目录 1、全局作用域 2、类作用域 2.1、设计模式之Pimpl 2.2、单例模式的自动释放 2.2.0、检测内存泄漏的工具valgrind 2.2.1、可以使用友元形式进行设计 2.2.2、内部类加静态数据成员形式 2.2.3、atexit方式进行 2.2.4、pthread_once形式 作用域可以分为类作用域、类名…