高级 RAG:为 RAG 微调 HuggingFace 的嵌入

社区文章 发布于 2024 年 7 月 5 日

什么是 BeyondLLM?

BeyondLLM 提供了一个用户友好的库,优先考虑数据科学家的灵活性。BeyondLLM 通过最少的编码简化了复杂 RAG 管道的构建,并通过上下文相关性、答案相关性、基础性和事实真相等全面基准增强了评估过程。这些指标评估了从检索器获取相关信息的能力到大型语言模型 (LLM) 响应的准确性和事实真相,所有这些都在框架内得到了简化,该框架还自动化了快速实验。

大型语言模型 (LLM) 展示了卓越的潜力,为各种应用程序提供了广泛的功能。LLM 在开源库中的快速增长使得各种工具的开发成为可能,例如 RAG 应用程序、LLM 评估、微调、可观察性等等。BeyondLLM 旨在简化 RAG 和 LLM 应用程序的开发,并完成评估,所有这些都只需 5-7 行代码。

使用 HuggingFace 构建高级 RAG 管道

微调嵌入的分步指南

在深入代码之前,请确保已安装必要的库。您可以使用以下命令安装它们:

!pip install beyondllm
!pip install llama-index-finetuning
!pip install llama-index-embeddings-huggingface

1. 导入所需库

首先,导入必要的库并设置环境。

from beyondllm import source, retrieve, llms, generator
from beyondllm.embeddings import FineTuneEmbeddings
import os
from getpass import getpass

os.environ['GOOGLE_API_KEY'] = getpass("API key:")

2. 加载和准备数据

从指定路径加载数据并进行处理。本示例中,数据应为 PDF 格式,并将进行适当分块。

data = source.fit(path="my_cv.pdf", dtype="pdf", chunk_size=1024, chunk_overlap=0)

3. 初始化语言模型

从 beyondllm 初始化语言模型。这里我们使用 `GeminiModel`。

llm = llms.GeminiModel()

4. 微调嵌入

为什么需要微调嵌入?

使用您的特定数据集微调嵌入可以增强语言模型的上下文理解,使其更适合检索和生成相关信息。此过程使嵌入适应您数据中存在的细微差别和特定领域语言,从而提高 RAG 管道的准确性和相关性。

使用 FineTuneEmbeddings 类微调嵌入。这涉及在您的特定数据集上训练嵌入,以更好地捕获您的数据的细微差别。

为了微调嵌入,LLM 从给定数据生成一对数据集。这个过程对于训练模型至关重要。在这种情况下使用的模型是 HuggingFace 的开源嵌入模型 BAAI/bge-small-en-v1.5

fine_tuned_model = FineTuneEmbeddings()
embed_model = fine_tuned_model.train(
    ["my_cv.pdf"], 
    "BAAI/bge-small-en-v1.5", 
    llm, 
    "finetune"
)

注意:在训练函数中,我们声明了模型需要保存的路径。在本例中,此路径设置为 finetune。此相同的路径变量也用于加载微调的嵌入模型。

5. 加载微调模型

HuggingFace 嵌入现已更新,我们将现在将其用于检索和生成管道。

embed_model = fine_tuned_model.load_model("finetune")

6. 设置检索器

使用微调的嵌入设置检索器。检索器负责根据查询获取相关文档。

retriever = retrieve.auto_retriever(data, embed_model, type="normal", top_k=4)

7. 检索信息

您现在可以使用检索器来获取相关信息。例如,要检索有关“Tarun 在 AI Planet 的角色”的信息

query = "what is Tarun's role in AI planet"
result = retriever.retrieve(query)[0].text
print(result)

8. 使用 RAG 生成响应

最后,使用检索器和语言模型设置生成管道。此管道将使用检索到的信息生成连贯的响应。

评估 RAG 性能

RAG 三元组的评估指标评估管道的有效性。这些指标包括上下文相关性、答案相关性、基础性和事实真相。它们共同衡量系统检索、理解和生成准确、事实正确且上下文适当的响应的能力。

pipeline = generator.Generate(
    question=query,
    retriever=retriever,
    llm=llm
)

# Generate the response
response = pipeline.call()
print(response)

# Get evaluation metrics for the RAG triad

evals = pipeline.get_rag_triad_evals()
print(evals)

为什么选择 BeyondLLM?

  • 用最少的代码轻松构建模型
    BeyondLLM 通过自动化大部分集成任务,实现 RAG 应用程序的快速实验。借助 source 和 auto_retriever 等组件,该框架简化了开发过程。

  • 灵活评估嵌入和 LLM
    BeyondLLM 支持多种 LLM,用于评估 LLM 和嵌入,为嵌入提供命中率和 MRR(平均倒数排名)等指标,并为 LLM 提供四个评估指标。

  • 减少 LLM 幻觉的高级技术
    BeyondLLM 集成了 Markdown 分割器、分块策略、重新排名和混合搜索等功能,以最大程度地减少幻觉,从而使 RAG 应用程序更加可靠。

结论

通过遵循这些步骤,您可以微调 HuggingFace 的嵌入,以创建针对特定数据集量身定制的强大 RAG 管道。这种方法增强了模型的检索和生成能力,从而产生更准确和上下文相关的响应。无论您正在处理复杂的 AI 项目还是仅仅探索 RAG 的功能,本指南都为高级应用程序提供了坚实的基础。


合著者:Shivaya Pandey

开始使用 BeyondLLM
有关更多详细信息并开始使用,请查看文档:BeyondLLM 文档
快速入门指南 Colab Notebook:快速入门指南

在此处打开您的 PR:BeyondLLM GitHub 存储库

别忘了点赞 ⭐️ 和 Fork 存储库!

社区

注册登录 以评论