模型也能“知其然知其所以然”——看SimRAG如何通过提问提升自己 精华

发布于 2024-10-30 14:52
浏览
0收藏

1. 引言部分

今天要给大家分享一篇很有意思的论文。这篇论文主要解决的是什么问题呢?就是如何让大语言模型在专业领域,比如医疗、科学领域表现得更好。

你们有没有想过,虽然现在的ChatGPT、Claude这些大模型很厉害,但在专业领域它们的表现还是不够好,对吧?比如说,当我们问它一个关于"支气管扩张"的专业问题时,它可能就答不太准确了。这是为什么呢?

主要原因是这样的 - 这些专业领域有很多特殊的知识和术语,普通模型可能理解得不够深入。就像我们普通人看医学论文一样,没有专业背景的话,很多术语都看不懂,是不是?

那么现在有一个很好的技术叫RAG(检索增强生成),这个技术的原理其实很像我们人类查资料的过程。比如当我们要回答一个问题时,会先去查找相关的资料,然后再基于这些资料来回答,对不对?RAG就是让模型也这样做 - 先检索相关文档,再基于这些文档来回答问题。

但是呢,这里又出现了一个新的问题。就算用了RAG技术,在专业领域的表现还是不够理想。这是为什么呢?因为模型可能不太懂得如何正确使用检索到的专业文献。就像一个医学院新生,即使给他一堆医学文献,他也不一定能准确理解和应用这些知识,对吧?那现在已经有哪些解决方案呢?主要有这么几种:

  1. 在专业文献上继续预训练,就像让模型多读点专业书籍
  2. 用专业领域的指令来微调模型
  3. 用GPT-4这样的强大模型来生成训练数据

但这些方法都有什么问题呢?

  • 第一个方法成本很高,就像要付很多学费一样
  • 第二个方法需要大量标注数据,这个在专业领域特别难获取
  • 第三个方法不但贵,而且在一些涉及隐私的领域(比如医疗)可能还有安全隐患

这就是为什么我们需要一个更好的解决方案。那作者是怎么解决的呢?他们提出了一个叫SimRAG的方法。这个方法最有趣的地方是它让模型同时学会了两个能力:一个是回答问题,一个是提出问题。

你们觉得为什么要让模型同时具备这两种能力呢?这就像我们学习一样,不仅要会答题,还要会出题,对吧。只有真正理解了知识,才能提出好的问题。这两个能力相辅相成,可以帮助模型更好地理解专业知识。

2. 相关工作

在讲具体方法之前,我们先来了解一下相关的研究工作。这就像我们做研究之前,要先知道前人都做了什么。首先是RAG技术。它是怎么工作的呢?就像我们写论文要先查文献一样,RAG也是先去找相关的资料,然后再基于这些资料来回答问题。近期有很多研究者在改进这个技术,比如说:

  • 有的在研究如何找到更相关的文档,就像图书馆员帮我们找最合适的参考资料一样
  • 有的在研究如何过滤掉无关的内容,就像我们写论文时要去掉不相关的引用一样
  • 还有的在研究如何让模型更好地理解和使用这些资料

第二个重要的技术叫自训练。这个概念听起来可能有点陌生,但其实很好理解。它就像是“教学相长”的过程 - 模型一边学习,一边用学到的知识来教自己。具体怎么做呢?

  • 先让模型学习一些基础知识
  • 然后让它自己生成一些训练数据
  • 再用这些数据来提升自己

但这个过程也有个问题,就像我们自学时可能会学到一些错误的知识一样,模型生成的训练数据也可能有错误。所以研究者们想了很多办法来解决这个问题:

  • 有的会仔细筛选生成的数据,只用质量好的
  • 有的会给不同的数据分配不同的重要性

第三个是领域特定的大语言模型。现在已经有很多专门针对特定领域的模型了,比如医疗领域的、法律领域的。他们是怎么训练这些模型的呢?主要有两种方式:

  • 一种是让模型不断地读专业文献,就像医学生要不断学习专业知识一样
  • 另一种是用特定领域的问题来训练模型,就像针对性地做习题

但这些方法都有什么问题呢?

  • 成本太高了,就像请个一对一家教一样贵
  • 效率不够高,投入了很多资源可能效果却不理想
  • 有些方法还依赖GPT-4这样的大模型来生成训练数据,这就更贵了

现在大家应该能明白为什么需要一个新的解决方案了吧。就是因为现有的这些方法都不够完美。

3. SimRAG的具体方法

接下来要讲的是本文最核心的部分了 - SimRAG具体是怎么工作的。这个方法很巧妙,分为两个主要阶段。

模型也能“知其然知其所以然”——看SimRAG如何通过提问提升自己-AI.x社区

3.1 第一阶段:基础训练

第一阶段是做什么呢?就是先教会模型一些基本功。这就像我们学习任何新东西一样,要先掌握基础知识,对吧。具体来说,要让模型学习三类知识:

  1. 首先是基本的指令理解能力。这就像我们要先学会听懂老师的话一样。用了哪些训练数据呢?

OpenAssistant的数据

Dolly的数据

SODA的数据

这些数据都是帮助模型理解人类指令的。

  1. 然后是问答能力的训练。用了很多问答数据集,比如:

Squad数据集,这是关于阅读理解的

DROP数据集,这需要一些推理能力

NQ(自然问题)数据集,这些都是真实用户的提问

这就像给学生做各种类型的习题,帮助他们提高解题能力。

  1. 最后是检索相关的训练。这个训练分两部分:

教模型怎么从文档中找到可能的答案

教模型怎么根据文档和答案来提出好问题

就像教会学生不仅要会做题,还要会出题一样。

3.2 第二阶段:自我提升

这个阶段是最有意思的部分。模型要用第一阶段学到的能力来提升自己,具体怎么做呢?首先是答案生成。模型会读一段专业文献,然后找出里面可能成为答案的内容。比如读到这样一段医学文献:

For its survival, the body needs to ensure a continuous delivery of energy despite highly variable supplies of nutrients from the external environment.

模型就会找出重要的概念,比如"continuous delivery of energy"这样的关键信息。然后是问题生成。基于找到的答案,模型会生成相应的问题。而且,模型会生成不同类型的问题:

  • 有的是简单的填空题
  • 有的是多选题
  • 有的是判断对错的题

这样做的好处是什么呢?就像我们复习时用不同类型的题目来测试自己,可以全面地掌握知识。最后还有个重要的步骤 - 质量控制。不是所有生成的问题都会被用来训练,而是要经过筛选:

  • 会检查答案是否能在相关文档中找到
  • 会看问题是否清晰合理,就像老师出题也要经过反复推敲一样。

4. 实验结果分析

好,现在到了最激动人心的部分了 - 我们来看看这个方法到底效果如何。

4.1 实验设置

首先,作者选择了三个非常重要的领域来测试:

  1. 医疗领域:选了7个数据集

PubMedQA:这是关于医学研究的问答

BioASQ:这是生物医学领域的问题

MedQA:这个更专业,是医学执照考试的题目

还有其他几个数据集

就像是让模型去参加不同类型的医学考试一样。

  1. 科学领域:用了3个数据集

ARC:这是中学级别的科学题目

SciQ:这包含了物理、化学、生物等各种科学问题

MMLU-sci:这个更全面,包含了14个科学学科

相当于是从基础到高等的科学知识都测试了一遍。

  1. 计算机科学领域:

用了最新的CS-Bench数据集

包含了编程、算法等各种计算机科学的问题

这就像是给模型来了次计算机系的期末考试。那模型用什么"教材"来学习呢?

  • 医疗领域:用了医学教科书、维基百科、PubMed的文章
  • 科学领域:主要用维基百科的内容
  • 计算机领域:用了维基百科的CS部分和arXiv上的论文

4.2 比较对象

作者找了好几类模型来比较,就像举办一场比赛一样:

  1. 通用大模型选手:这些就像是全能型选手。

GPT-3.5

GPT-4

Llama3-8B

  1. 专业领域选手:这些就像是专攻某个领域的专家。

医疗领域有PMC-llama、MEDITRON

科学领域有SciTulu

  1. RAG技术选手:这些是专门做检索增强的高手。

Self-RAG

ChatQA

4.3 实验结果

在医疗领域:

模型也能“知其然知其所以然”——看SimRAG如何通过提问提升自己-AI.x社区

在科学领域:

模型也能“知其然知其所以然”——看SimRAG如何通过提问提升自己-AI.x社区

在计算机科学领域:

模型也能“知其然知其所以然”——看SimRAG如何通过提问提升自己-AI.x社区

虽然分数看起来不是很高,但要知道CS-Bench的题目是很难的,这个成绩已经很不错了。

4.4 深入分析

作者还做了一些很有意思的分析:

  1. 不同问题类型的表现:

多选题表现最好,因为选项可以提供线索

开放性问题稍微差一点,这很正常,因为需要自由发挥嘛

判断题介于两者之间

  1. 生成数据的质量分析,让我们看个例子:

模型也能“知其然知其所以然”——看SimRAG如何通过提问提升自己-AI.x社区

生成的问题很自然,答案也很准确,不是简单的复制粘贴。

  1. 一个很有趣的发现:如果不做数据过滤,性能会下降约2%。这说明什么?说明质量控制真的很重要,就像我们学习也要注意区分哪些是对的,哪些是错的信息。

5. 局限性和未来展望

当然,这个方法也不是完美的,还有一些可以改进的地方:

  1. 目前只做一轮生成:

就像我们复习,多复习几遍效果会更好

未来可以尝试迭代式的生成方式

  1. 计算开销问题:

生成和过滤数据需要不少时间

但好在这些都是训练时的开销,用的时候不会变慢

  1. 还可以用更强的模型:

比如说用70B的模型可能效果会更好

但这样就需要更多计算资源了

这种自我提升的思路其实在很多领域都能用。比如说,我们学习新知识的时候,也可以先掌握基础,然后自己出题来检验,这样不是很像SimRAG的思路吗?

原文:《SimRAG: Self-Improving Retrieval-Augmented Generation for Adapting Large Language Models to Specialized Domains

本文转载自 芝士AI吃鱼​,作者: 雷厉风行

收藏
回复
举报
回复
相关推荐