前言
我带队的整个大模型项目团队超过40人了,分六个项目组,每个项目组都是全职带兼职,且都会每周确定任务/目标/计划,然后各项目组各自做任务拆解,有时同组内任务多时 则2-4人一组 方便并行和讨论,每周文档记录当周工作内容,平时群内随时讨论 1-2周一次语音会,最后通过相关课程不断招募各项目组成员
比如在我司审稿项目之前的工作中,我们依次想尽各种办法微调以下模型(我之外,包括且不限于阿荀、朝阳、三太子、文弱、鸿飞、apple、不染、贾斯丁等)
- 七月论文审稿GPT第1版:通过3万多篇paper和10多万的review数据微调RWKV
- 七月论文审稿GPT第2版:用一万多条paper-review数据集微调LLaMA2 7B最终反超GPT4
- 七月论文审稿GPT第2.5和第3版:分别微调GPT3.5、Llama2 13B以扩大对GPT4的优势
- 七月论文审稿GPT第3.2版和第3.5版:通过paper-review数据集分别微调Mistral、gemma
- 七月论文审稿GPT第4版:通过paper-review数据集微调Mixtral-8x7b,对GPT4胜率超过80%
如上文文末回复一读者的评论所说,“近期 我们一方面 等llama2 70b的结果,一方面 准备提高下数据的质量了”,故有了本文
而如何提高数据质量呢,便是我和我司审稿项目组在3月底登杜甫江阁时所确定的:一个是提高review的质量(从而考虑到可以提高GPT对一篇篇paper的多个review做多聚一摘要出来的大review的质量,由于是设计prompt从而让GPT做多聚一的摘要操作,故可以优化下该prompt),一个是看有没办法可以拿到review出来之前更早期的论文版本
总之,对于4月和整个Q2而言,除了RAG 2.0版(含通用文档理解)、机器人、两个agent项目之外,论文项目组也有9个事待并行推进:
- 1 70b的微调,2 清洗prompt的优化,3 论文早期版本的爬取,4 review特异性的增强
- 5 论文评分,6 审稿新数据爬取,7 金融审稿模型的微调,8 论文翻译,9 论文检索 idea提炼
第一部分 提升七月论文审稿模型效果的三大要素
1.1 让GPT对Review做多聚一操作的摘要prompt的优化
如本文开头所说,当我们把各种模型都微调一遍之后,发现最终还是得回归到我司爬的数据上
- 在针对review做多聚一之前,只是经过简单初筛(比如去除过短的review)后的总paper数-30186份:
2023Q4(含全部会议,2018-2023)-23176份
2024Q1(含全部会议,2017-2024)-7010份
这里面ICLR、NeurIPS这两个会议的总数是24210份「相当于,ICLR(2017-2024,从某paperreview网页访问可以访问到2013-2016的iclr,但相关的详细数据接口没有暴露这部分年份的数据,所以只能取到2017-2024的iclr),和NIPS(2019-2023)的量还是很大的
当然,这个数据量是在多聚一之前的(也就是只去除了Review过短项后的),后续还会根据是否有对应paper、去除无效内容等进一步过滤,还会再少一截」,其中包含:
2023Q4爬到的(含ICLR 2018-2023共14424份、NeurIPS 2019-2022共6347份)-20571份
2024Q1爬到的(含ICLR 2017/2021/2024共1653份、NeurIPS 2019/2021/2022/2023共1986份)-3639份- 让鸿飞爬取NIPS官方源的review数据
共爬取有2485篇(2014-2020),初步去掉与上面30186份中重叠的18篇,最终剩余2467篇
那怎么提高数据质量呢?其中一个便是提高review的质量
在我们之前的一系列工作中,我们针对一篇篇论文的多个review做多聚一,且摘要出多个要点,从而,一篇paper 一条review,最后,就可以弄成qa对 去微调开源模型
而之前5k 15k条paper-review数据对中的review,就是根据旧prompt 通过GPT3.5 16K摘要出来的,但之前的旧prompt 比较简单,就4个点
- 重要性和新颖性
- 可能被接收的原因
- 可能被拒绝的原因
- 其他改进建议
现在,想把review摘要的更好些,好提高微调效果,说白了,如果摘要出来的review质量不够高,会非常影响咱们微调模型的效果
总之,咱们的核心目标还是
不断逼近顶会审稿人的视角,以一针见血指出论文的问题、闪光点,从而侧面帮助作者修订论文
在经过反复看一系列论文的review意见之后我个人的反复琢磨,以及七月平台上一系列顶会审稿人对审稿的意见,外加和审稿项目组阿荀、朝阳等人的反复讨论之后,暂定把摘要prompt优化如下(至于完整的prompt设计见七月官网的:大模型商用项目之审稿GPT实战)
- ** How to evaluate the idea of the paper **,
- ** Compared to previous similar works, what are the essential differences **,
- ** How to evaluate the experimental results in the paper **,
- ** Possible reasons for its acceptance **,
- ** Possible reasons for its rejection **,
- ** Other suggestions for improving the quality of the paper **,
- and ** Other important review comments **.
总的思路就是,对于一篇paper,先看它的重要性、新颖性以及与众不同之处;接着看实验是否充分有说服力,然后总结闪光点、不足;最后看如果改进,看往哪几个方面做改进
1.2 论文早期版本的爬取
我们之前爬的paper-review数据中,paper大部分都是根据某个或某几个review意见而修改后的版本,相当于paper是新paper,可review还是旧review,相当于没法做到paper与review的100%匹配,这个问题曾一度困扰我们
包括来自厦门大学NLP实验室的这篇论文《MOPRD: A multidisciplinary open peer review dataset,其对应数据地址为dataset》也提到了这个问题:
“大多数提供公开访问同行评审数据的期刊只呈现其论文的已发表版本,而原始手稿通常是保密的。没有原始手稿,许多与开放同行评审相关的研究将变得不可能。 例如,基于修订来研究审稿意见将毫无意义。毕竟在修订中,已经采纳了审稿意见,并解决了原始手稿中的相关问题。总之,如果没有可靠地与原始手稿进行比较,将无法充分理解审稿意见的有效性,对于开放同行评审的研究,审稿意见将变得不太有效”
顺带,意外收获了一个可以获取各个学科审稿意见的网站,即:PeerJ
4.3日,我又开始反复琢磨之前阿荀爬下来的review数据
结果那晚在反复琢磨review数据时,发现可爬到review对应的论文早期版本
从而,也就解决了审稿项目的这个大问题,毕竟我们要的就是这种论文所对应的最早的审稿版本,这样和review的匹配程度 才能更高(至于如何具体爬取见七月官网的:大模型商用项目之审稿GPT实战)
1.3 训练策略:增强review特异性
什么叫做特异性,比如最左侧的review便是特异性,而最右侧的review则丧失了特异性,对于作者而言,最希望看到的就是这种的放之四海而皆准的review
// 待更
自从我司于23年7月开始涉足论文审稿领域之后,在业界的影响力越来越大,所以身边朋友如发现业界有相似的工作,一般都会第一时间发给我,比如本文第二部分之康奈尔大学的reviewer2
当然,我自己也会各种看类似工作的论文,毕竟
在大模型时代
- 一个技术人保持竞争力的最佳方式就两点:保持对最新技术/paper的跟踪,每天各种大量实践/折腾/实验
- 对于一个组织也是如此,通过项目(整个小组 + 2-4人的小队伍双重协作),是提高组织战斗力的最佳方式,不然各自为战
比如本文第二部分的Reviewer2和第三部分的PeerRead,同行之间的工作一定会互相借鉴的,包括我们会学他们,他们看到我们的工作后自然也会受到不小的启发
第二部分 康奈尔大学之论文审稿工作Reviewer2:特异性很强
对于论文审稿,我司的思路是通过一系列paper-review对去微调一系列开源模型,而对于review数据的处理更多是把一篇篇paper的多个review做多聚一的摘要操作,且从中梳理出来4或7个要点,然后基于这4-7个要点让微调后的模型去自动生成一篇篇新paper的review
而这4-7个要点就显得比较重要
- 一方面要尽可能涵盖所有论文的核心特征,这叫通用性,比如斯坦福那篇论文让GPT4当审稿人,梳理出来4个方面的要点:重要性 新颖性、可能被接收的原因、可能被拒绝的原因、其他重要改进建议
- 二方面 又要尽可能抓住每一篇具体paper的各自特色,这叫特异性,比如马上要介绍的康奈尔大学的reviewer2
总之,这两方面在一定程度上是有点矛盾的,所以需要想尽办法做好平衡。
接下来,咱们来具体看下康奈尔大学的reviewer2
2.1 REVIEWER2的整体训练流程与推理流程
2.1.1 REVIEWER2的整体训练流程
24年2月,康奈尔大学通过此篇论文《Reviewer2: Optimizing Review Generation Through Prompt Generation》,也提出了一个论文审稿模型Reviewer2,其整体流程为(注意,表示review的prompt,表示review本身,表示论文)
- 用PGE方法从人工review中生成预设问题数据(相当于从review当中提炼审稿人针对一篇篇paper所对应的关注问题点),相当于paper =》 人工review =》通过PGE:即llama2 70B提炼预设问题 =》预设问题
然后使用 [paper, 预设问题] 数据训练得到一个能根据不同paper提出不同预设问题的模型
相当于让模型A学会根据不同的paper提问(毕竟,每篇review的预设问题不太一样),毕竟提问是门艺术
即to produce a set of aspect prompts x1, ...xk for paper p that cover the aspects that a reviewer may comment on for this paper
这里有比较重要的一点是,可能会有读者疑问,这个prompt到底是根据paper生成,还是根据review去生成,实际上可以这么理解,即prompt的ground true是基于PGE方法从人工review当中生成的prompt,而训练模型的时候(当然 更包括推理),是根据paper去预测prompt
可能又有读者疑问,那为何不人工根据一些paper标注其对应的「ground true版的prompt」,然后再训练模型去预测prompt呢?这点请读者先自行思考,^_^。至于什么是PGE,下文2.2节会重点阐述 - 使用 [paper + 产生的预设问题, review] 训练模型
a) 即先把不同的paper输入模型来产生对应的预设问题(好引导或提示模型去输出与paper息息相关的review)
b) 然后再把paper和预设问题输入模型来得到review
c) 最终和人工review对比词的叠度以不断迭代模型
且类似七月审稿GPT,其也基于longlora的S2-Attn和FlashAttention2把llama2 70B的上下文长度扩展到了32k
2.1.2 Reviewer2的推理流程
推理的时候,在为新的论文 生成评论时,我们首先查询 以获取review prompt 。 然后我们查询 以为生成的方面提示生成review
2.2 PGE:在上下文示例下基于Review生成ground true版prompt(含其评估)
为了给每个review生成相应的prompt,Reviewer2提出了带有评估的提示生成(Prompt Generation with Evaluatio,简称PGE)流程,包括生成步骤和评估步骤
具体来说,给定篇论文,和相应的人工review「其中是论文的review数量,即一篇paper一般都会有多个review,比如一篇论文5个review」
- 该流程的目标是在上下文数百个review-prompt的示例下生成一组review的prompt,其中一个prompt对应一个review,比如5个review则有5个对应的prompt
即对于review,生成步骤生成一个prompt - 然后对生成的prompt进行评估,评估在上下文25个review-prompt-score的示例下且基于一个5分制度,完成对生成的prompt的打分(比如1-5分)
- 如果得分为5,那么对便存储在集合 中,,否则重新生成提示
整个过程跟self-instruct还是有点类似的(至于什么是self-instruct,详见此文的2.1.2 什么是self-instruct方式:提示GPT3/GPT3.5/GPT4的API收集数据 ),下面更加细致的逐一阐述上述三个步骤
2.2.1 Prompt的具体生成:基于数百个示例
为了更好的根据review生成prompt,咱们总得有些示例 是不?那怎么构建review-prompt的示例呢,先机器生成然后人工注释,最后示例生成后便可以初始化,具体而言
- 首先使用Llama-2-70B-Chat以zero-shot的方式为随机选择的100个review生成prompt「To construct these examples, we use Llama-2-70B-Chat (Touvron et al., 2023) to generate prompts for a randomly selected subset of 100 reviews in a zero-shot fashion 」
- 然后,通过删除prompt中与review不相关的问题,且添加在review中涵盖但prompt中遗漏的问题,并以与实际review中蕴含问题的开放式格式对齐等这3种方式来手动优化review prompt(we manually refine the prompts by removing irrelevant questions, adding missing questions that are covered in the review, and refining to align with the open-ended format of review questions)
以下便是一个review-prompt对的示例
这些示例将在prompt的生成过程中用作初始上下文示例「即We initialize S with human-annotated examples that will be used as initial in-context examples during generation,说白了,为了提高提示生成的性能,作者团队在review prompt生成的过程运用了上下文学习(in-context learning,简称ICL)」
其中,有两个小细节
- 由于上下文示例是从中随机抽样的。 随着更多的prompt生成并保存到中,可用示例的池也扩大了(一开始中虽然只有100个review-prompt示例,但可以不断扩大到数百个示例),确保了prompt的多样性
As more prompts are generated and saved to S, the pool of available examples also expands, ensuring the diversity of the prompts. - 且总是在满足模型上下文长度约束的同时,采样最大可能数量的上下文示例
We always sample the maximum possible number of in-context examples while satisfying the context length constraint
2.2.2 Prompt的具体评估:以25个人工review-prompt-score示例为参考基准
与生成类似,Reviewer2在评估步骤中也应用ICL
使用Llama-2-70B-Chat根据5分制评估review-prompt对,每个分数从1到5都有五个上下文示例(相当于总计有25个评分示例)。注意,此处的上下文示例是手动构建的,并在所有评估中保持一致「We use Llama-2-70B-Chat to evaluate the review-prompt pair based on a 5-point scale with five in-context ex-amples for each score from 1 to 5. The in-context examples (shown in Appendix C) are manually constructed and remain consistent across all evalutions」
以下便是一个最终对所生成的review prompt评分为3分的示例(可想而知,这样评分为3分的示例有5个)
且受到思维链提示的启发,还会提示LLM在生成最终分数之前为分数生成解释,以鼓励更准确的评估
2.2.3 Prompt的再生:基于人工评分基准评判下得分不够则重新生成
为了确保生成的prompt的质量,如果得分不是 5,则会重新生成prompt
由于生成prompt时的上下文示例是随机抽样而不是固定集合,重新生成步骤保证了与之前的生成相比,必会生成不同的prompt,从而减少冗余(Since the in-context examples for generation are randomly sampled rather than a fixed set, the regeneration step is guaranteed to generate a different prompt compared to the previ-ous generations, minimizing redundancy)
最终,我们每个review限制生成prompt 5次,并且如果超过限制,则不再生成。超过 90%的prompt在3次或更少的生成次数内达到 5分(We use a limit of 5 generations per review, and the review is excluded from further generation if it exceeds the limit. More than 90% of the reviews take less than or equal to 3 generations to reach a score of 5)
2.3 Reviewer2数据集的详细信息
如下图所示,对于Reviewer2的数据集,其来源于多个会议
- 来自PeerRead的CONLL-16和ACL-17
- 来自NLPeer的 COLING-20和 ARR-22
- 来自openreview的ICLR papers from 2017 to 2023
- 来自papers.neurips.cc的NeurIPS papers from 2016 to 2020
- 来自openreview的NeurIPS papers 2021 to 2022
综合3 4 5,则意味着包含了ICLR 17-23 and NeurIPS 16-22的paper
对于每篇论文的评论,我们遵循之前数据集的格式,尽可能保留参考文献和官方评审员的元评审和最终决策等元数据信息
// 待更
第三部分 PeerRead:根据review给paper的各方面要点打分
昨晚在思考:如何评判一篇论文是否是好论文,或是否可以中稿顶会,然后无意中看到这篇论文:A Dataset of Peer Reviews (PeerRead): Collection, Insights and NLP Applications
可以好好读一下
// 待更