【RAG】再看RAG中不同粒度的引文类型及细粒度句子级引用生成方案LongCite

今天是2024年9月14日,星期六,调休,北京,天气晴

昨天openai新模型的发布,直接带火了COT相关数据集,微博上有人发帖子找COT数据,很有趣。

我们今天来看一个问题,关于引文生成,我们已经讲过多个工作。

关于长文本参考文献引用生成,这个在当前RAG业务中是很常见的需求,并且在技术实现上,本质上就是一个微调任务,我们来看看有哪些引用的类型,差异性是什么,并看看LongCite引文生成方案。

跟进前沿并进行分析,总会有更多收获,供大家一起参考并思考。

一、先看RAG中不同粒度的引文含义及优缺点

引用,可以分为chunk级以及sentence级两种,如下图所示:

Chunk-level citations 和 Sentence-level citations 是两种不同粒度的引用方式,它们在长文本问答系统中用于提供答案的来源信息,从而增强答案的可信度和可验证性。

其中,

Chunk-level citations 和 Sentence-level citations 在提供答案来源信息时有不同的应用场景和优缺点。Chunk-level citations 适合快速检索和处理,而 Sentence-level citations 提供了更高的精确度和可信度,但同时也需要更复杂的处理技术和可能更高的资源消耗。在设计长文本问答系统时,根据具体需求和资源情况选择合适的引用粒度是非常重要的。

1) Chunk-level citations

  • 定义:块级引用是指将上下文分割成固定长度的块(例如,每个块128个标记),并在引用时指明答案中的具体哪一块或哪几块提供了所需的信息。
  • 格式:在答案中,每个引用会以块的索引形式出现,如 [第k块],表示答案的这部分内容是基于第k块上下文信息得出的。
  • 优点
    • 简便性:操作相对简单,只需将文本分割成块,并在生成答案时标记相关信息块。
    • 快速检索:用户可以快速定位到相关的文本块,而不需要在更长的文本中寻找具体信息。
  • 缺点
    • 粒度较粗:由于每个块包含多个句子,所以引用的精确度不高,用户可能需要在块内进一步查找具体信息。
    • 不直观:用户可能难以从块级引用中直接获得所需的精确信息,影响用户体验。

2)Sentence-level citations

  • 定义:句子级引用是指在答案中直接引用上下文中的具体句子或句子范围,提供更精确的来源信息。
  • 格式:在答案中,每个引用会精确到句子的编号或句子范围,如 [第k句] 或 [第a句至第b句],明确指出答案中的具体信息来源于上下文中的哪些句子。
  • 优点
    • 高精确度:提供精确到句子的信息来源,用户可以直接看到答案中的具体信息是如何从上下文中提取的。
    • 提高可信度:由于引用更具体,增强了答案的可信度和透明度。
    • 更好的用户体验:用户可以快速准确地找到答案的具体依据,提升了用户的理解和信任。
  • 缺点
    • 处理复杂性:需要更复杂的处理流程来识别和引用具体句子,增加了系统的复杂度和计算成本。
    • 数据要求高:构建包含句子级引用的数据集需要更多的人工标注或更精细的自动生成技术。

二、再看LongCite引文生成方案

我们可以来看看一些其他的,《LongCite: Enabling LLMs to Generate Fine-grained Citations in Long-context QA》(https://arxiv.org/abs/2409.02897)讨论了如何让大模型在回答基于长篇文本的用户问题时,能够生成细粒度的句子级别的引用。这样做的目的是为了提高模型回答的可信度和可验证性。

在模型训练方面,其使用LongCite-45k数据集(包含44,600个高质量的LQAC实例)对两个最新的开源长文本模型GLM-4-9B和Llama3.18B进行了微调,得到了LongCite-9B和LongCite-8B 模型,这些模型能够支持最大128,000个token的上下文窗口,并能够在一次处理中生成准确回答和精确的细粒度引用。

我们可以看看对应的实现流程CoF,如下:

CoF流程包括四个阶段:

(1)QA实例生成QAInstanceGeneration

给定一篇长篇的上下文材料,CoF首先利用LLM通过Self-Instruc生成查询和相应的答案。考虑到在一次通过中同时生成答案和引用可能会影响答案的正确性,首先构建长文本问答对,然后在后续步骤中将引用添加到答案中。还在提示中加入了不同任务类型的描述,例如摘要、信息提取和多跳推理,以确保生成的查询的多样性。

(2)块级引用生成Chunk-level Citation Generation

CoF使用答案中的句子检索上下文中大致k个块,这些块随后输入到LLM中,将粗粒度的块级引用添加到答案中。在构建了查询和答案之后,将上下文分割成128个标记的块,并使用答案中的句子检索大约k个块。

为每个句子保留了前l个块,其中l=min(lmax, (k + nsent − 1)/nsent),nsent表示句子的数量,这样可以保留总共大约k个块。

然后将所有这些块(根据它们在上下文中的位置排序),连同查询和答案一起输入LLM,并要求LLM将答案分割成陈述,并为每个陈述生成块级引用。

(3)句子级引用提取Sentence-level Citation Extraction

LLM通过从相应的块级引用中提取支持句子,为每个陈述生成细粒度的句子级引用。

除了粗粒度的问题,块级引用的另一个缺点是,精确的支持证据可能位于块的开头或结尾,那里的句子是不完整的。

因此,为了实现细粒度的引用,首先通过将每个引用块与其前后的块连接起来扩展每个引用块。

接下来,保留扩展块中的完整句子,并指导LLM通过输出如[6-8]这样的编号跨度来提取支持句子,这指的是第6句至第8句,或者如果没有在块中找到支持片段,则输出“没有相关信息”。

最后,移除不规则的跨度,并根据原始上下文中句子的位置重新编号其他的,以获得最终的句子级引用。

(4)数据过滤DataFiltering

最后,过滤掉引用过少的实例。具体的,如果答案中的陈述少于20%有引用,将丢弃该实例。

如果一个答案的引用太少,假设它在上下文中的事实基础不够充分,可能会利用LLM的内部知识,这通常会导致幻觉。

更进一步的细节,可以看看:https://huggingface.co/spaces/THUDM/LongCite,https://www.bilibili.com/video/BV1QD4zexEU2/,https://mp.weixin.qq.com/s/JruZwxIHfBxAmEmnfle94Q

总结

本文主要介绍了关于长文本参考文献引用生成的工作,这个在当前RAG业务中是很常见的需求,并且在技术实现上,本质上就是一个微调任务,核心点还是在数据构造上。

参考文献

1、https://arxiv.org/abs/2409.02897

关于我们

老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。

 

相关推荐

  • 大模型、知识图谱、RAG、文档智能等前沿技术及落地跟进:刘说NLP技术社区持续对外纳新
  • 【一手测评】OpenAI 震撼发布 o1 大模型!
  • 字节开始卡学历了。。。
  • 谷歌在 YouTube 上利用 Transformer 架构进行音乐推荐
  • 与顶尖专家一起深入VLDB 2024,洞悉数据库技术的未来趋势 | Q推荐
  • 中小银行如何通过组织力建设与人才培养推动数字化转型?
  • 从淘宝用户增长到生成式大模型:5 年,我的思考变了?
  • 如何让 var [a, b] = {a: 1, b: 2} 解构赋值成功?
  • 干货收藏!如何写一篇高质量的技术文章?
  • 吊炸了,OpenAI重磅推出o1模型
  • 如何打造一个属于前端人自己的知识库!
  • 不知道如何写出心仪的文字?来试试5分钟能写上万字论文这款AI论文助手!
  • 年仅34岁!985高校教授、博导突发心梗逝世
  • 全栈开发要掌握什么技术?
  • 干货:JavaScript代码优化技巧
  • 分享一款 最新可视化开发平台:GoVirw
  • 推理能力超博士,OpenAI发布最强模型o1
  • 来啦,传说中的 新模型终于来了,OpenAI o1 登场
  • 爆了!又一款高性能、无侵入的 Java 性能监控神器!
  • LLM 新范式:OpenAI o1,self-play RL 和 AGI 下半场