Atman深度AI撰写研究综述
作者: Atman语言智能 来源: Atman语言智能
引言:话说隔壁老王
为啥要写这样一篇用AI写研究综述的文章,这还得从前两天的一件事说起。前两天,隔壁老王来找我,让帮忙写一篇《AI+新的电池技术进展》的综述。以下是对话实录🤣
🐴归🐴。金子招牌不能砸。还好老王对成品的要求不高。简单做了思考之后,开始了写作过程。先给看看成品状况吧。这是全文的提纲,以及文章开头的样式。
全文共计16,485词,总共耗时3.5个小时,全程手工操作。下图是某一个章节(例如,章节 5.4)的截图。
由于是一事一例来做,没有办法使用代码做完整的自动化。基本的生成框架是通过和若干工具软件的对话交互完成。因此耗时相对较长。同时,为了能用最短的时间完成样式,对于找到的数据(如PDF、PPT、网页等),没有做深入的分析,这些都可以进一步的优化。但是,需要保证找到的数据都可溯源,并且给出引用标记(如上图)。
1、整体流程
手工完成这件事的整体流程如下。
如果看过前两天本公号转发的《高级RAG技术》的读者可能会看出来:
①这个工作的最外层是一个考虑了文章层次结构的内容生成,用于将每一个章节生成的内容做进一步总结,从而层次连贯的章节内容。
②每一个章节的内容生成是一个标准的基于HYDE的RAG(基于检索增强的内容生成)。
③考虑到文档的多样性,文档内容提取部分使用了Atman的文档提取服务。
该流程的输入是老王定的研究课题。输出包含了三部分内容:章节及章节描述、章节内容的背景知识的进一步解释、以及跟章节相关的参考内容(文献、产品、报道等)。
该流程涉及到的主要操作模块有:
①****搜索资料 :回想我们自己做科研,给了一个研究课题(或子课题),都会去网上找研究素材(论文、报道、以及其他公司的产品等),也可以在自己公司积累的版权数据中找资料。这里,我使用的是Bing作为搜索引擎来搜索资料。(其实,Atman在生物医学领域的搜索产品积累了3000万的文献,可以做很好的资料收集和文档提取工作。)不过,这里的课题并非是医药相关,因此无法直接使用。
②****提取文档内容 :从互联网方式得到的资料格式是多样的,有PDF/WORD/PPT等。需要从这些文档中提出有结构化的内容。如果是扫描格式的PDF,还需要对文档做OCR和结构分析。幸运的是,这一块可以直接取用公司成熟的文档智能产品,可以从文档中抽取文本、标题、章节、图像、表格等结构化的信息。从而进一步给大模型做分析和整理。对于网页数据,还需要去掉不相关的内容(如广告),只保留有价值的核心内容。
③****生成参考文献 :对于论文等文档资料,包含的信息是很多的,这里简化了这个流程。从每一篇文档中只提取“标题,文献出处,文献总结,以及和章节描述的相关系数”这几个结构化数据。在具体应用中可以抽取更多的相关信息。
④****文档总结 :有了章节描述和提取的文档内容,可以使用大模型对每一篇文档的总结进行润色,从而产生的文档描述和该章节的主题更加对齐。让产生的章节内容浑然一体而不是像拼凑得到的。不过,这里偷懒了,用的就是简单的文档描述。这样的工作只能交给自动化来做。
⑤****进一步解释 :在科研中,难免会遇到新的概念和术语。通常,我们是通过大量阅读和反复对比来得到对这些概念的理解。幸运的是,给大模型加上搜索的能力,我们可以让大模型帮我们加速理解新知识。例如:我们可以让大模型先用高中生能理解的概念给我们解释一遍,然后再用科学的语言解释一遍。
2、外层:生成章节提纲
生成章节提纲是标准的大模型的生成模式。在这里有一个技巧:使用英文进行提示可以得到更好的输出结果。最后,为了方便老王阅读,在最后的生成结果使用了翻译软件将输出转换成中文。
将给定的研究课题生成提纲,这里主要使用以下两条指令。第一条指令根据研究课题的标题生成第一级的标题。第二条指令用于生成第二级以下的标题。这里需要注意的是父子章节之间的连贯性(对于写小说更重要)。需要将子标题的内容范围限定在父标题的内容范围之内。
但是,大模型本身是没有状态和记忆的,每一个问答都是独立的。这就需要我们给他这个历史上下文。
在通过网页使用chatgpt的时候,这个问题不需要我们管理。因为chatgpt总是把历史的对话作为上下文再次发送给大模型,从而造成我们可以多轮对话的假象。– 对话时间越长历史包袱越重,耗费的token数也越多(会截断到上限)。在使用API调用的时候,这些都会被计费。
注:为了阅读方便,本文所有的提示词都以中文方式描述。
下图是生成的第一级标题的内容。
使用第二条指令让大模型生成二级标题
“提高电池性能(Improved Battery Performance)”的章节内容如下:
可以看到结构非常清晰,可以用手工或程序将子章节的标题和介绍内容提取出来。其他章节可以如法炮制,最终可以得到和本文最初图中边栏类似的文档结构。
如果希望得到更详细的章节内容介绍,可以使用这里的章节标题和章节介绍作为初始种子,结合后面提取的文档资料内容,让大模型重新生成优化的章节介绍。只需要记住,大模型是没有记忆的,把历史的数据给他,并给出清晰的目标,就能够生成更好的结果。
现在网络上有很多教人写提示词(prompt)的文章和教程,也总结除了很多写作的框架,例如:CRISPE、ICIO、TAG等等。这些框架可以帮助用户形成固定的思维套路(听起来像咒语),防止忘掉一些重要的内容。可以选择一个自己顺手的方式来应用。不过,随着模型基础能力的提升,并非一定需要特定的框架来使用大模型。
大模型的确会对特定的动词(verbal)和限定语敏感,本质原因是由训练数据决定的。在训练不够充分的情况下,这些词的敏感程度一定会比其他同义词的敏感程度更高,掌握一些重要的动词和限定语是有价值的。比如:生成(generate),总结(summarize),列表(list),翻译(translate)等等。只要你有这些词,大概率会主导最后生成的风格。
其实,对于ChatGPT来说,你还可以用程序的伪代码、甚至json文件方式写提示语,效果很多时候比自然语言更好。这是由于ChatGPT在训练的时候将自然语言和代码混合在一起进行训练。模型对代码的语义敏感程度甚至比自然语言更高。
安利一个我个人常用的方式:层次递进的提示法。可以类比我们将英文内容翻译成中文的过程。由于对于中国人英语不是母语,很多人翻译的时候会将一个英文的长句先整体表达一下,这时候会暂时忽略限定从句。之后逐层的将限定语和从句填回到句子中完成翻译。而写提示语,最重要是表述清楚,信息完备,没有歧义。模型并不在乎是不是优美,因此我们可以就保留逐层表达的方式来写提示语。比如上文我用到的提示语,可以看到明显的这种风格。
3、RAG:搜索研究资料
RAG是英文搜索增强的内容生成(Retrieval Augmented Generation)的首字母缩写。
为什么引入RAG技术?通过大模型训练,会将学习到的知识分布式存储在模型的参数中。但是,由于大模型的训练成本高,知识更新速度就比较慢。同时,跟我们人类一样,对于不确信的知识,如果强迫回答就会胡诌一通(也叫作幻觉问题)。RAG技术能够较好的缓解以上两个问题。
RAG是什么?说白了,就像我们开卷考试一样,根据用户的问题,首先翻书(通过搜索引擎、或者本地知识库)找到最相关的一些可能性。然后让大模型参考这些信息再做回答。大部分情况,这些参考的信息的优先级会更高,能够覆盖大模型之前学到的内容。这样就可以完成知识更新的需求。
可以看到,数据积累对于用户(尤其是行业用户)至关重要,毕竟大模型不可能行行精通,不过大模型可以不断的提升学习能力,这样就能够进一步学习行业知识,形成行业专家。这也是OpenAI最近开放GPT Builder和GPT Store的原因 – 收集全世界的行业知识。
同时,当数据规模大于一定程度,普通用户并没有能力进行管理和处理,这时候就需要搜索引擎作为工具来帮我们筛选内容。如果是版权数据,还需要使用自运营的本地化搜索引擎来保证数据的安全性。不过,这里的研究课题使用开放的搜索引擎来寻找资料就可以了。
3.1 提取搜索关键词
这里产生一个技术点,如何向搜索引擎提问?我们知道,Google/Bing 这样的搜索引擎本质上是关键词匹配的方式。设定好的搜索关键词对结果有一定的影响。对于我们研究一个新的领域,我们已有的知识可能不足以支持我们提出更好的搜索关键词。另外,之前生成的标题和介绍也不适合直接放在搜索引擎中。这时候,再一次我们可以祭出大模型。
输出结果如下:
这样,我们就得到若干组搜索的关键词。在每组关键词下,我们可以搜索个100篇网页和内容。最后把这些内容去重复后编制成如下的格式的列表。其中文章介绍部分是根据抽取的文章介绍,让大模型用一句话(或几句话)重新产生的。
当然,一般情况下这个动作不是完全手工可以完成的。给出一个研究的子课题,都可以得到大约150-300篇的文献或文章的列表。这几百篇的文章根据一些指标(如稀疏匹配用的BM25,以及密集匹配用的余弦距离)进行相似度排序的。最终保留几篇文章进行之后的操作。如果是完全程序化的操作,还可以让大模型再对这100+文章进行深度挑选,方法就是看看文章的研究总结和章节的描述是不是匹配,如果不匹配,需要进一步剔除。这里因为是手搓,就看10篇左右的文章。
之前曾经看到一个说法,“搜索实际上是一个稀缺技能”。我非常认同这句话。事实上,互联网拉平了世界,而搜索引擎拉平了知识。基本上,我们想学的,想了解的信息都可以通过互联网获取。但是,现实中我们发现,真正想找到匹配的信息又是非常困难。或许,加上大模型的能力,我们能够更好的整合搜索引擎的能力。在开放数据和版权数据中能够更有效的获取所需信息。
3.2 文档内容提取和总结
文档内容的提取实际上是一个非常有技巧的事情。且不说文档自身就有格式上差异化带来的难点,即使能够完美从文档中提取出文字,在送给大模型做问答的时候,文档语义结构会对问答的结果造成巨大的影响。比如,论文中不同的章节对用户的回答是有语义影响的,大部分情况不需要带上参考文献部分,用户问工作细节的时候不需要带上背景介绍,用户做总结的时候又不需要工作的细节。这实际上是要求对文档有语义级别的理解。
除此之外,知识和信息越来越向富媒体文档转移。培训数据可能是视频方式保存,研发过程可能是音频记录,就算是图像记录,在OCR技术相当成熟的今天,想更好的利用好大模型的问答能力,也需要对文档类型和语义结构有深入积累和处理能力。
这里,对于手搓报告还有一个挑战就是候选文档的规模太大了。即使每一个子标题只有10篇文档(可能是网页,可能是PDF),想生成几句话的总结也不容易。25个子章节 x 10篇文档 = 250 篇文档。每个文档都做个总结怎么办?还是再次祭出大模型帮我们做总结。
①对于网页,我们使用网页的主体部分(复制就好)
②对于文档(尤其是论文),使用论文的第一页内容,不用关注格式,复制就好
然后使用下面的提示语
这部分是整个写作过程中最考验体力的部分,至少80%的时间花费在这个环节。通常情况下,应该使用程序来实现这个过程。Atman在医学领域的内容写作上有更多的积累,配合积累的数据库(含3千多万医学相关文献)可以实现分钟级的检索和生成。
3.3 生成二级章节内容
到这里,我们已经拿到的信息有:
①二级章节的标题,和初始的简介;
②该章节下检索到的文档列表,包含文档标题,和文档的一句话总结。
我们可以做的操作有:
①把文档按照“论文、产品、报道、更多”的类别进行分类列举 – 这个动作手工执行,可以得到之前的截图;
②也可以结合搜索到的文档,再次生成章节的介绍 – 这个可以使用大模型。
再次生成章节介绍的提示语逻辑如下:
4、外层:生成一级章节内容
生成一级章节的方式和生成二级章节内容的方式类似。不同的是这里给出的参考文档列表是一级章节的标题和介绍。并且增加了相应总结的字数。列举提示语如下:
写在后面
至此,我们描述了如何纯手工用AI撰写研究综述的方法。虽然心中有剑,不过为了能够手工完成全流程,同时尽可能让流程清晰,这里只使用了最简单的生成过程。
大模型发展到今天,虽然时间不长(ChatGPT产品的发布时间是2022年11月20日),对行业和技术发展的影响已经非常深远。正如本文所写的综述文章的任务,在所有行业都是一个基础的工作,所消耗的人力资源也是巨大的。一篇好的综述需要资深人员来执笔,传统的综述需要半年时间来准备大量的调研工作。虽然AI目前还无法自发产生深度的思考和见解,但是我们也看到使用AI在初期的调研工作中已经能够极大的解放人力,同时,分钟级别的综述写作能力也可以帮助重塑资深人员的工作流程和习惯,迭代的把相关工作做好。
这篇文章能够阐述的跟AI、大模型、AIGC相关的内容和技术是非常有限的,以下的技术都没有办法体现
在本文。例如:
①文章配图:生成研究的时间线和文章的知识图谱;
②文档智能:给文档智能留下空间,能够更好的检索和准备数据给RAG;
③思维框架:大模型的神髓,模拟了人类的思维模式或习惯。比如CoT(思维链)、ToT(思维树)、CoC(代码链)等等;
④机器人代理:大模型的未来,简单的说就是AI管着AI干活,这也是比尔盖茨认为今年的重点。
我们希望在以后的文章、工作介绍、包括产品中展示AI更多的潜力。
公众号:Atman语言智能
售前与商务合作:[email protected]
售后与问题咨询:[email protected]
苏州公司:苏州市工业园区金尚路仙峰大厦南楼5层
北京公司:北京市海淀区北四环中路智优沃大厦4层
更多AI工具,参考Github-AiBard123,国内AiBard123