通过检索增强生成 (RAG) 微调LLM

2023年10月16日 由 alex 发表 424 0

这种方法是对RAG的一种新颖实现,称为RA-DIT(检索增强双指令调优),其中利用RAG数据集(查询、检索到的上下文和回答)对LLM进行了微调。反过来,通过LLM生成的数据进行了检索器微调的监督式过程。检索器训练数据可以通过监督和无监督任务生成,但是通过AI加速套件进行监督更有意义。


这种方法使得检索器在上下文中更具相关性,并与LLM保持一致。


以下代码片段展示了如何通过检索器获取每个数据点的上下文。


from llama_index import VectorStoreIndex
from llama_index.prompts import PromptTemplate
qa_prompt_tmpl_str = (
    "Context information is below.\n"
    "---------------------\n"
    "{context_str}\n"
    "---------------------\n"
    "Given the context information and not prior knowledge, "
    "answer the query.\n"
    "Query: {query_str}\n"
    "Answer: "
)
qa_prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str)
vector_retriever = vector_index.as_retriever(similarity_top_k=1)


在这里,是关于用于OpenAI的微调端点的训练数据的格式化。


def save_openai_data(dataset, out_path):
    # out_fp = open("data_rag/qa_pairs_openai.jsonl", "w")
    out_fp = open(out_path, "w")
    # TODO: try with different system prompts
    system_prompt = {
        "role": "system",
        "content": "You are a helpful assistant helping to answer questions about the Llama 2 paper.",
    }
    train_qr_pairs = dataset.qr_pairs
    for line in train_qr_pairs:
        query, response = line
        user_prompt = {"role": "user", "content": query}
        assistant_prompt = {"role": "assistant", "content": response}
        out_dict = {
            "messages": [system_prompt, user_prompt, assistant_prompt],
        }
        out_fp.write(json.dumps(out_dict) + "\n")
save_openai_data(train_dataset, "data_rag/qa_pairs_openai.jsonl")


使用RAG对Fine-tuning进行微调,将RAG输出作为LLM微调的训练数据。而微调将使LLM在使用案例上更好地解释上下文。


人机交互方法允许采用监督方法,在该方法中可以策划响应,然后检索器根据此反馈进行训练。


通过人工筛选的检索器辅助语言模型(RALMs)通过处理人际互动的长尾和外部数据存储的最新知识来提高性能。


1. LLM被更新以改进检索信息的使用。


2. 而检索器则会根据相应的使用案例示例进行更新。


这种方法可以改善知识利用和增强上下文意识。


总结


1. Fine-Tuning和RAG不是互斥的,同时使用两者是理想的。特别是考虑到OpenAI在Fine-Tuning方面所引入的简化方法。


2. RA-DIT(检索辅助双指令调整)在Fine-Tuning和RAG之间建立了一种共生关系,其中RAG数据用于Fine-Tuning,而检索器则使用用户数据进行更新。


3. 通过筛选数据进行检索器训练的人工监督过程需要一个AI加速的潜在空间,或者正如HumanFirst所称的自然语言数据生产力套件。


4. 这种双指令调整方法实现了一个有监督的持续改进循环,并解决了用户对话的长尾问题。


1


上面的图展示了RA-DIT方法,它分别对LLM和检索器进行微调。对于给定的示例,LM-ft组件更新LLM以最大化给定正确答案的可能性。R-ft组件更新检索器,以最小化检索器得分分布与LLM偏好之间的KL散度。



文章来源:https://medium.com/@cobusgreyling/fine-tuning-llms-with-retrieval-augmented-generation-rag-c66e56aec858
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消