返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

RAG数据集自动构造探索, 附PROMPT

[复制链接]
链载Ai 显示全部楼层 发表于 半小时前 |阅读模式 打印 上一主题 下一主题

从文档中手动创建数百个 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()

生成的问题分析

自定义数据分布


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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ