1. 引言部分
今天要给大家分享一篇很有意思的论文。这篇论文主要解决的是什么问题呢?就是如何让大语言模型在专业领域,比如医疗、科学领域表现得更好。
你们有没有想过,虽然现在的ChatGPT、Claude这些大模型很厉害,但在专业领域它们的表现还是不够好,对吧?比如说,当我们问它一个关于"支气管扩张"的专业问题时,它可能就答不太准确了。这是为什么呢?
主要原因是这样的 - 这些专业领域有很多特殊的知识和术语,普通模型可能理解得不够深入。就像我们普通人看医学论文一样,没有专业背景的话,很多术语都看不懂,是不是?
那么现在有一个很好的技术叫RAG(检索增强生成),这个技术的原理其实很像我们人类查资料的过程。比如当我们要回答一个问题时,会先去查找相关的资料,然后再基于这些资料来回答,对不对?RAG就是让模型也这样做 - 先检索相关文档,再基于这些文档来回答问题。
但是呢,这里又出现了一个新的问题。就算用了RAG技术,在专业领域的表现还是不够理想。这是为什么呢?因为模型可能不太懂得如何正确使用检索到的专业文献。就像一个医学院新生,即使给他一堆医学文献,他也不一定能准确理解和应用这些知识,对吧?那现在已经有哪些解决方案呢?主要有这么几种:
但这些方法都有什么问题呢?
这就是为什么我们需要一个更好的解决方案。那作者是怎么解决的呢?他们提出了一个叫SimRAG的方法。这个方法最有趣的地方是它让模型同时学会了两个能力:一个是回答问题,一个是提出问题。
你们觉得为什么要让模型同时具备这两种能力呢?这就像我们学习一样,不仅要会答题,还要会出题,对吧。只有真正理解了知识,才能提出好的问题。这两个能力相辅相成,可以帮助模型更好地理解专业知识。
2. 相关工作
在讲具体方法之前,我们先来了解一下相关的研究工作。这就像我们做研究之前,要先知道前人都做了什么。首先是RAG技术。它是怎么工作的呢?就像我们写论文要先查文献一样,RAG也是先去找相关的资料,然后再基于这些资料来回答问题。近期有很多研究者在改进这个技术,比如说:
第二个重要的技术叫自训练。这个概念听起来可能有点陌生,但其实很好理解。它就像是“教学相长”的过程 - 模型一边学习,一边用学到的知识来教自己。具体怎么做呢?
但这个过程也有个问题,就像我们自学时可能会学到一些错误的知识一样,模型生成的训练数据也可能有错误。所以研究者们想了很多办法来解决这个问题:
第三个是领域特定的大语言模型。现在已经有很多专门针对特定领域的模型了,比如医疗领域的、法律领域的。他们是怎么训练这些模型的呢?主要有两种方式:
但这些方法都有什么问题呢?
现在大家应该能明白为什么需要一个新的解决方案了吧。就是因为现有的这些方法都不够完美。
3. SimRAG的具体方法
接下来要讲的是本文最核心的部分了 - SimRAG具体是怎么工作的。这个方法很巧妙,分为两个主要阶段。
3.1 第一阶段:基础训练
第一阶段是做什么呢?就是先教会模型一些基本功。这就像我们学习任何新东西一样,要先掌握基础知识,对吧。具体来说,要让模型学习三类知识:
OpenAssistant的数据
Dolly的数据
SODA的数据
这些数据都是帮助模型理解人类指令的。
Squad数据集,这是关于阅读理解的
DROP数据集,这需要一些推理能力
NQ(自然问题)数据集,这些都是真实用户的提问
这就像给学生做各种类型的习题,帮助他们提高解题能力。
教模型怎么从文档中找到可能的答案
教模型怎么根据文档和答案来提出好问题
就像教会学生不仅要会做题,还要会出题一样。
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 实验设置
首先,作者选择了三个非常重要的领域来测试:
PubMedQA:这是关于医学研究的问答
BioASQ:这是生物医学领域的问题
MedQA:这个更专业,是医学执照考试的题目
还有其他几个数据集
就像是让模型去参加不同类型的医学考试一样。
ARC:这是中学级别的科学题目
SciQ:这包含了物理、化学、生物等各种科学问题
MMLU-sci:这个更全面,包含了14个科学学科
相当于是从基础到高等的科学知识都测试了一遍。
用了最新的CS-Bench数据集
包含了编程、算法等各种计算机科学的问题
这就像是给模型来了次计算机系的期末考试。那模型用什么"教材"来学习呢?
4.2 比较对象
作者找了好几类模型来比较,就像举办一场比赛一样:
医疗领域有PMC-llama、MEDITRON
科学领域有SciTulu
4.3 实验结果
在医疗领域:
在科学领域:
在计算机科学领域:
虽然分数看起来不是很高,但要知道CS-Bench的题目是很难的,这个成绩已经很不错了。
4.4 深入分析
作者还做了一些很有意思的分析:
多选题表现最好,因为选项可以提供线索
开放性问题稍微差一点,这很正常,因为需要自由发挥嘛
判断题介于两者之间
生成的问题很自然,答案也很准确,不是简单的复制粘贴。
5. 局限性和未来展望
当然,这个方法也不是完美的,还有一些可以改进的地方:
就像我们复习,多复习几遍效果会更好
未来可以尝试迭代式的生成方式
生成和过滤数据需要不少时间
但好在这些都是训练时的开销,用的时候不会变慢
比如说用70B的模型可能效果会更好
但这样就需要更多计算资源了
这种自我提升的思路其实在很多领域都能用。比如说,我们学习新知识的时候,也可以先掌握基础,然后自己出题来检验,这样不是很像SimRAG的思路吗?
原文:《》
本文转载自,作者:
本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://jmbhsh.com/baihuo725/32872.html