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

本文介绍了如何使用 UMAP 降维技术可视化 RAG(检索增强生成)数据,以理解 OpenAI、Langchain 和 ChromaDB 中的问题、答案及其与源文件的关系。通过可视化嵌入空间,可以更好地洞察 RAG 应用程序如何查找相关信息,以及提高数据透明度。文章涵盖从数据准备、嵌入创建到构建 LangChain,以及如何询问问题和可视化结果的全过程。
摘要由CSDN通过智能技术生成

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

欢迎关注公众号(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 Chroma

embeddings_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=
  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hj_caas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值