在上一篇文章《RAFT:让大型语言模型更擅长特定领域的 RAG 任务》中,我们介绍了 RAFT 训练方法,RAFT(检索增强微调)是一种训练方法,可以提高大型语言模型 (LLM) 在开卷、域内问答任务中的性能。给定一个问题和一组检索到的文档,RAFT 训练 LLM 从文档中识别并引用最相关的片段,这些片段有助于回答问题,同时忽略不相关或分散注意力的信息。通过训练模型识别相关信息并提供佐证,RAFT 可以增强 LLM 的推理和解释能力,最终提高其在需要额外信息或知识的情况下准确、合理地回答问题的能力。
RAFT 的一个关键点在于如何生成用于微调的数据集。每个问答对都包含一个“标准答案”文档,可以从中推断出问题的答案,以及一些不相关的“干扰”文档。在训练过程中,这迫使模型学习哪些信息是相关的,哪些信息是无关的,并记忆领域知识。
为了简化 RAFT 数据集的创建过程,LlamaIndex 在 LlamaPack 中实现了 RAFT 论文中提出的方法,该方法主要是将语言模型应用于特定领域的 RAG(检索增强生成)任务。今天,我们将介绍如何使用 RAFTDatasetPack LlamaPack 创建 RAFT Dataset。
使用 LlamaIndex 实现 RAFT 涉及几个关键步骤,以针对特定领域的任务有效地微调大型语言模型 (LLMs)。
!pip install llama-index
!pip install llama-index-packs-raft-dataset
import os
os.environ["OPENAI_API_KEY"] = ""
!wget --user-agent "Mozilla" "https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt" -O './paul_graham_essay.txt'
from llama_index.packs.raft_dataset import RAFTDatasetPack
raft_dataset = RAFTDatasetPack("./paul_graham_essay.txt")
# 注意:创建数据集需要使用 GPT-4,可能会产生一定的费用,并且根据文件大小可能需要很长时间。
dataset = raft_dataset.run()
上述数据集是 HuggingFace 数据集格式。您可以将其保存为 .arrow 或 .jsonl 格式,可以参考前文中借助Azure AI Studio 微调的方式,将其用于进一步微调。
output_path = "
RAFT 与 LlamaIndex 的结合为特定领域的自然语言处理带来了许多优势:
RAFT 和 LlamaIndex 的协同作用是特定领域自然语言处理领域的一次重大进步。通过利用检索文档的力量,RAFT 使 LLM 能够轻松、准确地处理复杂的信息。随着我们将专业知识整合到 LLM 中的探索不断深入,RAFT 将指引我们走向人工智能真正理解和适应人类语言和语境复杂性的未来。
[1]. RAFT: Adapting Language Model to Domain Specific RAG:https://arxiv.org/abs/2403.10131
[2]. RAFT GitHub Repo:https://github.com/ShishirPatil/gorilla/tree/main/raft
[3]. Llamapack-RAFT:https://github.com/run-llama/llama_index/blob/main/llama-index-packs/llama-index-packs-raft-dataset/examples/raft_dataset.ipynb