Synthetic Data for IR and RAG Evaluation
收藏合成数据生成使用LangChain进行IR和RAG评估
简介
大型语言模型(LLMs)已经改变了信息检索(IR)和搜索的方式,通过理解复杂的查询。本仓库展示了用于生成复杂合成数据集的概念和包,用于IR和检索增强生成(RAG)评估。
生成的合成数据是一个给定上下文的查询和答案。例如:
提供的上下文: Pure TalkUSA是一个总部位于美国乔治亚州科文顿的移动虚拟网络运营商。它最著名的服务是其行业首创的数据滚动服务,该服务已被终止。Pure TalkUSA是Telrite Corporation的子公司。自带电话!
合成生成的查询: Pure TalkUSA提供的突出服务是什么?
合成生成的答案: Pure TalkUSA的突出服务是其行业首创的数据滚动服务。
构建IR或RAG系统时,上下文、查询和答案的数据集对于评估系统性能至关重要。人工标注的数据集提供了优秀的基准,但获取成本高且困难;因此,使用LLMs生成的合成数据集是一个有吸引力的解决方案和补充。
通过使用LLM提示工程,可以生成多样化的合成查询和答案,形成一个强大的验证数据集。本仓库展示了生成合成数据的过程,同时强调了零样本和少样本提示的重要性。
亮点
本仓库的一些关键亮点包括:
- 仅使用消费级硬件上的本地LLM模型,不进行外部API调用,这至关重要,以确保数据隐私。
- 展示了零样本和少样本提示,用于高度可定制的查询和答案生成。
- 提供了使用LangChain的示例,包括自定义提示工程、输出解析器和自动修复解析器以获取结构化数据、批量GPU推理与链、LangChain表达语言(LCEL)。
- 通过量化减少模型大小,以适应消费级硬件。
示例笔记本
使用LangChain生成上下文-查询-答案
- 使用自定义提示和输出解析器的LangChain进行结构化数据输出:参见gen-question-answer-query.ipynb,了解合成上下文-查询-答案数据生成的示例。关键方面包括:
- LangChain自定义提示模板
- PydanticOutputParser
- OutputFixingParser
使用LangChain生成上下文-查询
- LangChain自定义Llama2-Chat提示:参见qa-gen-query-langchain.ipynb,了解如何为上下文-查询生成构建LangChain自定义提示模板。展示了LangChain的一些功能,如自定义提示模板、Hugging Face本地管道、4位量化、批量GPU推理。
不使用LangChain生成上下文-查询
- 零样本和少样本提示工程:参见qa-gen-query.ipynb,了解自定义数据集的合成上下文-查询数据生成示例。展示了两种提示技术:基本零样本查询生成和少样本引导的坏问题(GBQ)。
背景
IR系统的主要功能是检索,旨在确定用户查询与要检索内容之间的相关性。实现IR或RAG系统需要用户特定的文档。然而,缺乏自定义数据集的标注数据集会妨碍系统评估。
指标
问答(QA)系统(例如RAG系统)有两个组件:
- 检索器 - 检索回答查询所需的最相关信息
- 生成器 - 使用检索到的信息生成答案
评估QA系统时,需要分别和整体评估这两个组件。
好处
使用LLM提示工程生成合成数据的一些关键好处包括:
- 定制IR任务查询生成:提示LLMs提供了生成查询类型的巨大灵活性。
- 零样本或少样本标注:开发者可以向LLMs提供特定领域的示例查询,大大增强查询生成。
- 更长的上下文长度:GPT-based LLM模型,如Llama2,提供长达4,096个令牌的上下文长度,增强了文档解析和查询生成控制。
提示模板
本仓库将使用Llama2生成合成查询,因为它可以在消费级GPU上本地运行。以下是Llama2 Chat的提示模板:
<s>[INST] <<SYS>> {your_system_message} <</SYS>>
{user_message_1} [/INST]
- 系统提示:系统提示
<<SYS>>是开放访问模型的一个未被充分认识的优势,您可以完全控制聊天应用中的系统提示。 - 用户消息:用户提供的查询或消息。[INST]和[/INST]帮助识别用户输入的内容,以便Llama知道如何正确响应。
问题
本仓库将尽力维护。如果您遇到任何问题或希望进行改进,请提出问题或提交拉取请求。
TODOs
- [ ] 使用DeepSpeed ZeRO-Inference将大型LLM权重卸载到非GPU资源,以便在消费级硬件上运行+70B模型。
- [ ] 欢迎提出您希望添加的功能的问题。




