RAG新动向:CORAL,多轮对话RAG的benchmark

背景

RAG(检索增强生成)是目前大模型应用技术中最火热的方向之一,通过外挂数据进行检索的方式增强LLM的生成能力。在实际应用中,RAG常应用于对话应用,然而之前对于对话型RAG的研究的关注点一直局限于单轮对话中,这和现实场景中的多轮对话其实是存在一定gap的。最近开始有关于RAG的研究将关注点聚焦到了多轮对话上,他们构造了关于多轮对话RAG的benchmark。本文是对《CORAL: Benchmarking Multi-turn Conversational Retrieval-Augmentation Generation》学习、理解和重新整理,希望帮助感兴趣的同学更容易掌握这一块的内容。

论文贡献

在这篇论文中,作者针对多轮对话RAG的场景,做出了以下贡献:

  • 提出了一种自动构建信息检索型对话数据集的方法。并基于这种方法,构建了CORAL(CO nversational R etrieval-A ugmented Generation Language)Benchmark,用于评估RAG的相关任务。
  • 提出了一个统一的框架来规范对话式RAG。
  • 在CORAL上基于规范对现有的一些对话式RAG方法进行了评估。

本文接下来的内容会针对论文内容解答以下问题:1. CORAL是怎样构建的?2. 对话式RAG的统一范式是什么样的?

CORAL构建

数据源选择

为了构造能够评估多轮对话的benchmark,首先要识别出这样的benchwmark应该具有哪些特征,论文中,作者指出了5种特征:

  • open-domain coverage
  • knowledge-intensiveness
  • freeform response
  • handling of topic shifts
  • citation labeling

因此,在选择数据源的时候也要考虑对齐这些标准。CORAL的数据源最终选择了Wikipedia,除了能够满足上面的特征外,还因为Wikipedia还具有广泛的话题、丰富的内容和较好的结构化格式。

语料处理

对于原始的Wikipedia的数据其中存在一些噪声文本和比较长的引用页,在进一步生成之前,需要先对这些数据进行处理。对于噪声文本,作者通过移除Wikipedia模板、过滤非法文本等方式进行了处理;对于比较长的引用页,作者将其进行分割成较小的段,然后过滤掉一些不合理的段。经过处理后得到20000条高质量的文本页。

标题树提取

对于处理后的wiki数据,首先提取出网页中的标题树。构造这样一个树结构是因为html中的标题本身携带了一定的层次信息,这个层次其实也是对内容的一个概括,相当于层次化的表示了内容信息,为后续构建问题提供了基础。

对话流采样

接下来就是基于这个树来构建对话。这里首先要获取一些关键词样本,这个过程我们称作对话流采样。不同的采样方式会得到不同的对话结果,论文中给出了4种采样策略。他们的流程如下图所示:

简单总结一下:

  1. Linear Descent Sampling(LDS) 线性下降采样。从根节点出发,仅允许从父节点到子节点。模拟真实对话场景中的渐进对话搜索场景。
  2. Sibling-Inclusive Descent Sampling (SIDS) : 这个策略在LDS的基础上在兄弟节点之间构建有向链接。模拟真实对话场景中搜索关联查询场景。
  3. Single-Tree Random Walk (STRW) :把父子链接和兄弟链接并入进来从而增强SIDS。模拟真实对话场景中更复杂的场景(我理解是单个话题上的来回提问)。
  4. Dual-Tree Random Walk (DTRW) : 模仿了真实对话场景中出现的话题转换。

策略上是不断递进的。

构造问题

经过上述采样,我们可以得到一些关键词(这些关键词基本上是树节点的标题),接下来需要将这些关键词转换成真实场景中的问题。这是一个多轮迭代处理的过程,在每一轮的处理过程中,需要将每个节点、它的所有祖先节点、当前节点的答案(标题下对应的内容)一起提交给GPT去生成一个自然语言问题,然后将这个生成的结果再提交给GPT去加工,加上一些更符合人类语言现象的内容(比如标点符号等),最终得到一个更加符合真实对话场景的问题。这个过程中两个GPT的prompt是不一样的。经过多轮迭代,最终完成所有数据集的构建。

完成构建

完成构建后,最终会得到8000个对话数据,每种采样得到的数据各2000条,其中LDS的数据包含3-6轮的对话,其他类型的数据中1600个对话是6-10轮,400个是11~20轮,用来模拟真实世界中的长上下文对话的场景。

对话RAG范式

论文中对对话RAG系统进行规范化,范式如下:

其中G表示生成任务,qk表示第k次查询,f表示压缩函数,Hk表示第k次历史,fp表示对检索结果Pk进行压缩。更加形象化的理解如下图所示:

压缩是为了减少无关信息的干扰,使生成任务更加的高效。压缩这里主要的方法包括:

  • Last Response Strategy:使用对话的历史中的问题和最后一个回答。
  • Rewrite Strategy :使用一个rewrite模型结合历史数据对当前问题进行改写。
  • LLM Summarization Strategy:使用LLM模型进行对话历史进行总结。

任务评估

CORAL主要支持3种RAG任务的评估:

  • Conversational Passage Retrieval:这个任务主要评估RAG系统从大量文档中获取关联信息的能力。
  • Response Generation:这个任务评估RAG系统生成准确、详细且符合上下文的答案的能力。
  • Citation Labeling:这个任务评估RAG系统在生成的回复中准确地归因信息来源的能力。

基于上述范式和CORAL数据集,论文中对不同任务进行了评估。具体实验数据可以参考论文,这里不截图了。

总结

本文基于对CORAL论文的理解,对论文中提到的内容进行了整理和表达,使论文内容更加清晰易懂。未来应该会有更多的多轮对话RAG会基于此项工作。希望可以对感兴趣的同学提供帮助。

相关推荐
AndyOConnor24 分钟前
【LLM模型】【自我认知微调】实践基于【ModelScope】的【ms-swift】框架【GPU】方式
llm
AndyOConnor24 分钟前
【LLM模型】【自我认知微调】实践基于【ModelScope】的【ms-swift】框架【CPU】方式
llm
信鑫5 小时前
基于 MCP 的 AI Agent 应用开发实践
llm·aigc·mcp
憨憨睡不醒啊5 小时前
自从有了Trae,让我实现从 conda 到 uv 的 Python 包管理自由😋😋😋
python·llm·trae
火山引擎边缘云5 小时前
重构智能设备管理范式:火山引擎端智能解决方案上新,多重 AI 服务即刻享用!
人工智能·llm·边缘计算
Baihai_IDP6 小时前
图解「模型上下文协议(MCP)」:从与传统 API 的比较入手
人工智能·llm·aigc
aaaak_8 小时前
LLM 大模型 Function Call 流程分析
语言模型·llm·fuctiong call
AlfredZhao1 天前
Oracle AI应用的LLM模型典型配置
ai·llm·deepseek·siliconflow·selectai
Hamm1 天前
MCP和Function Calling的区别是什么?
llm·aigc·mcp
6confim1 天前
什么是智能代理工作流
人工智能·llm