高级 RAG:为 RAG 微调 HuggingFace 的嵌入
什么是 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 存储库!