PaperAgent 2024年09月05日
RAG数据集自动构造探索, 附PROMPT
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

介绍Ragas采用新颖方法生成数据,可减少开发时间,涵盖多种问题类型,实现更强大的训练和评估过程。

🎯 Ragas通过采用进化生成范式,从提供的文档集中系统地制作出具有不同特征的问题,如推理、条件、多上下文等,确保全面覆盖管道中各组件性能。

🧠 为生成中等难度到困难难度的样本,采用了多种方法,如推理需增强回答问题的推理需求,多上下文使回答问题需从多个相关部分获取信息。

💡 条件prompt通过引入条件元素增加问题复杂性,对话式则将问题重新格式化为两个单独问题,模拟聊天式问答互动。

📄 详细的方法介绍包括问题改写的规则,如推理问题重写的规则、多上下文任务重写问题的规则、条件prompt重写问题的规则及对话式问题重写的规则。

哎呀AIYA 2024-08-28 11:06 湖北

从文档中手动创建数百个 QA(问题-上下文-答案)样本可能非常耗时且劳动密集。此外,人工生成的问题可能难以达

从文档中手动创建数百个 QA(问题-上下文-答案)样本可能非常耗时且劳动密集。此外,人工生成的问题可能难以达到全面评估所需的复杂程度,最终影响评估的质量。通过使用合成数据生成,开发人员在数据聚合过程中的时间可以减少 90%。

理想的数据集应涵盖生产中遇到的各种类型的问题,包括不同难度级别的问题。默认情况下,LLM 不擅长创建多样化的样本,因为它倾向于遵循共同的路径。今天我们介绍Ragas中创建数据的方法,Ragas 采用了一种新颖的方法来生成数据,通过采用进化生成范式实现了这一点,其中具有不同特征的问题(例如推理、条件、多上下文等)是从提供的文档集中系统地制作出来的。这种方法可确保全面覆盖管道中各个组件的性能,从而实现更强大的训练和评估过程。


方法介绍

大型语言模型 (LLM) 能够有效地将简单问题转化为更复杂的问题。为了从提供的文档中生成中等难度到困难难度的样本,我们采用了以下方法:


实现Prompt展示

推理

根据提供的上下文将问题重写为多跳推理问题,从而使给定问题复杂化。回答这个问题应该要求读者利用给定上下文中的信息做出多个逻辑联系或推断。改写题目时要遵循的规则:1. 确保改写后的问题可以完全根据上下文提供的信息来回答。2. 不要提出超过15个单词的问题。尽可能使用缩写。3. 确保你的问题清晰明了。4. “基于所提供的上下文”、“根据上下文”等短语不允许出现在问题中。

多上下文

任务是重写并使给定的问题复杂化,使回答问题需要从context1和context2中获得信息。按照下面给出的规则重写问题。1. 改写后的问题不应该很长。尽可能使用缩写。2. 改写后的问题必须是合理的,必须被人类理解和回应。3. 改写后的问题必须完全符合上下文1和上下文2中的信息。4. 阅读并理解上下文中的内容,然后重写问题,这样回答问题时就需要同时了解上下文1和上下文2。5. 像“基于提供的上下文”、“根据上下文?”等不允许出现在问题中。

条件prompt

通过引入条件元素重写提供的问题以增加其复杂性。目标是通过加入影响问题上下文的场景或条件,使问题更加复杂。按照下面给出的规则重写问题。1. 改写后的问题不应超过25个单词。尽可能使用缩写。2. 改写后的问题必须是合理的,必须被人类理解和回应。3. 改写后的问题必须能从目前的信息中完全回答。

对话式

将提供的问题重新格式化为两个单独的问题,就像它是对话的一部分一样。每个问题都应该集中在与原问题相关的一个特定方面或子主题上。按照下面给出的规则重写问题。1. 改写后的问题不应超过25个单词。尽可能使用缩写。2. 改写后的问题必须是合理的,必须被人类理解和回应。3. 改写后的问题必须能从目前的信息中完全回答。4. 像“提供上下文”、“根据上下文?”等不允许出现在问题中。

详细可参考:

https://github.com/explodinggradients/ragas/blob/main/src/ragas/testset/prompts.py

代码实现

from ragas.testset.generator import TestsetGeneratorfrom ragas.testset.evolutions import simple, reasoning, multi_contextfrom langchain_openai import ChatOpenAI, OpenAIEmbeddings
# documents = load your documents
# generator with openai modelsgenerator_llm = ChatOpenAI(model="gpt-3.5-turbo-16k")critic_llm = ChatOpenAI(model="gpt-4")embeddings = OpenAIEmbeddings()
generator = TestsetGenerator.from_langchain( generator_llm, critic_llm, embeddings)
# Change resulting question type distributiondistributions = { simple: 0.5, multi_context: 0.4, reasoning: 0.1}
# use generator.generate_with_llamaindex_docs if you use llama-index as document loadertestset = generator.generate_with_langchain_docs(documents, 10, distributions) testset.to_pandas()

生成的问题分析

自定义数据分布

分析创建的数据集中不同问题类型的频率

如果对内容有什么疑问和建议可以私信和留言,也可以添加我加入大模型交流群,一起讨论大模型在创作、RAG和agent中的应用。


好了,这就是我今天想分享的内容。如果你对大模型应用感兴趣,别忘了点赞、关注噢~

往期推荐



一款约束大模型结构化输出的开源工具,后处理不存在了提速又提质!(实战)

高级 RAG实战:召回更好的片段Query扩展

支持大模型流式输出的JSON提取工具

  Magic-PDF一款高质量开源PDF解析工具

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Ragas 数据生成 问题类型 方法介绍 训练评估
相关文章