首页 > 其他分享 >SELF-REFINE: Iterative Refinement with Self-Feedback

SELF-REFINE: Iterative Refinement with Self-Feedback

时间:2024-11-15 17:11:54浏览次数:1  
标签:Feedback SELF Iterative 生成 Refine LLM GPT Self

1. 概述

基于给定的Prompt,大语言模型生成的Reponse可能不是最好的(这一点我认为当前的LLM大部分都是Decoder架构,基于已生成的结果产生下一个Token,一旦之前生成结果出错,也不容易及时改正。)。

本文为原始的生成添加了额外的反思重写步骤,过程如下:

  1. 对于给定的\(Input\),先交给LLM生成第一个版本的\(Output_n\),n表示生成的第n轮回复,初始值为1,
  2. 然后将\(Input\)、\(Output_n\)交给LLM,让其提出\(Feedback_n\)。
  3. 将\(Feedback_1\)到\(Feedback_n\)、\(Input\)、\(Output_n\)交给LLM,使其反思重写得到\(Output_(n+1)\)
    重复2-3步骤,直到满足停止条件(轮数条件 or 数据质量条件)

作者用7类任务以及3个闭源模型(GPT-3.5、ChatGPT、GPT-4)进行验证,任务如下:

  • 段落情绪反转(输入一段文字和一个情绪,把这段文字改写成输入的情绪)
  • 对话生成
  • 代码优化
  • 代码可读性提升
  • 数学推理
  • 首字母缩略词生成
  • Constrained Generation(根据给定条件进行结果生成)

除数学推理任务以外,反思重写基本都有大幅度的效果提升。

2. 方法细节

其中

  1. \(P_(gen)\)是当前任务的Prompt。
  2. \(x\)表示任务输入,\(y_n\)则是每一次LLM输出的结果。\(||\)为串联符号。
  3. \(stop()\)函数为任务特定的停止函数,返回true表示不再需要进一步的生成反馈。
  4. \(P_(fb)\)是用于生成反馈的Prompt,\(fb_t\)则为生成的反馈信息。注意,不同任务使用了不同的\(P_(fb)\)。
  5. \(P_(refine)\)为重写原始Response的Prompt

3. 实验

实验过程中使用的LLM包括:

  1. GPT-3.5
  2. ChatGPT
  3. GPT-4
  4. CODEX(代码任务额外使用了这个模型)

3.1 评估方式

  1. 任务metric:对于不同任务,评估标准采用和Baseline相同的metric。
  2. 人工评估(GSB)
  3. GPT-4评估

3.2 结果

  1. 除了数学推理任务,其他任务都有较大提升。
  2. 对于Constrained Generation任务,纠错现象极其频繁。
  3. 数学推理任务,由于错误过于细节,导致LLM无法纠错(会回答"everything looks good")。但是如果外部信息告知Response是否正确,反思重写能带来5%左右的提升。基于Oracle feedback进行Response正确性反馈的情况下,反思重写效果如下:
  4. Self-Refine的提升与模型规模相关联。 可以看到Self-Refine对于GPT-4的提升是大于GPT-3.5的,尽管有些情况下GPT-4的效果不如GPT3.5,例如Acronym Generation任务,仅使用GPT-4和GPT-3.5处理该问题,前者弱于后者11个点左右,但Self-Refine对GPT-4的提升却远超GPT-3.5

3.3 分析

3.3.1 反馈质量的影响

作者通过对3个任务(代码优化、情绪反转、首字母缩略词生成),采用不同的Feedback生成方式进行实验,包括:

  1. Self-Refine feedback
  2. Generic feedback:LLM生成的Feedback更加通用,而非精细的策略。例如,优化代码的策略可能会是Improve the efficiency of the code而不是Avoid repeated calculations in the for loop。
  3. No feedback:去掉LLM生成Feedback这一步,单纯的将上一步的输出交给LLM,让其重写。

实验证明:精细化的Feedback > 通用Feedback > 无Feedback

3.3.2 迭代Refine的影响

作者对3个任务(代码优化、情绪反转、Constrained Generation),统计Self-Refine进行不同轮次的Refine,效果变化。

\(y_n\)中的n代表迭代轮次。上图显示随着迭代轮次的增加,生成Response的效果会提升,但提升幅度会逐渐降低。

注意:作者发现,Feedback带来的提升是多方向的提升,可能存在单方向的降低,而别的方向更加优秀。

3.3.3 Self-Refine是否适用于弱模型

作者采用Vicuna-13B验证Self-Refine,但是它无法很好的完成refine工作,主要表现在无法很好的生成feedback。

错误分析

作者对70条数据(30条有正向提升,30条负向)进行分析,发现Self-Refine表现差主要由于Feedback生成较差(94%),而不是Refine过程出现问题(6%)。

标签:Feedback,SELF,Iterative,生成,Refine,LLM,GPT,Self
From: https://www.cnblogs.com/yanlishao/p/18526188

相关文章

  • self-respect和self-esteem的区别
    说起“自尊心”这个概念,只接受过国内英语教育的人第一个想到的词一定是“self-respect”。然而,如果你经常看美剧你会发现,在表达“伤自尊”这个意思时,大多数时候美剧里的角色会说“hurtmyself-esteem”。这是因为中文的“自尊”实际上包含两种含义:1.自信、自豪(小明是一个自尊......
  • kinect2.0 Self-Learning (1) - recycling disconnect (solved)
    Firstedit:Afterdowningkinect2.0sdk,Ifollowedacoursetoverifyifkinect2.0canconnectwithmylaptop.Everythingseemsgoingwell.However,Ifoundthekinect2.0wouldconnectfor5secondsthendisconnectfor5secondsagainandagain,thatrea......
  • 《VATT: Transformers for Multimodal Self-Supervised Learning from Raw Video, Aud
    文章汉化系列目录文章目录文章汉化系列目录摘要1引言2相关工作2.1Vision中的Transformer2.2自监督学习3方法3.1标记化与位置编码3.1.1DropToken3.2Transformer架构3.3公共空间投影3.4多模态对比学习4实验4.1实验设置4.2结果4.2.1视频动作识别的微调4.2......
  • Linux下使用makeself制作一键安装包
    Linux下使用makeself制作一键安装包下载makeselfyum-yinstallmakeselfmakeself命令和参数makeself.sh--gzip.<output_file.run>"<display_name>"<startup_script>.表示当前目录,这样makeself将会打包当前目录下的所有文件和子目录。该目录最好使用绝对路径......
  • MMdetection 问题报错 mmdet/evaluation/metrics/coco_metric.py data[‘category_id
    方案一:有人说在自己定义的conifg文件中增加 metainfo={'classes':('class1','class2','class2',),'palette':[(220,20,60),(221,11,22),(221,11,42),]}方案二:修改mmdet/evaluation/metrics文件的内......
  • Python中self的作用!
    首先self必须跟python中的类class一起使用。在Python中,self是一个在类方法中使用的约定名称,用来代表类的实例本身。实例是指类的具体对象如下面代码的p,后续调用self可以访问类的属性和方法(类中的函数),使得我们能够在类的不同方法中共享数据。理解的关键在于类和实例。以下......
  • mysql CA certificate ca.pem is self signed 如何解决
    当MySQL的CA证书(ca.pem)是自签名时,这意味着该证书不是由受信任的证书颁发机构(CA)签发的。这可能导致在客户端和服务器之间建立安全连接时出现问题,特别是在需要验证证书链的情况下。以下是一些解决方法和步骤,可以帮助你处理自签名的CA证书:1.将CA证书添加到受信任的证......
  • 【论文精读】On the Relationship Between Self-Attention and Convolutional Layers
    【论文精读】OntheRelationshipBetweenSelf-AttentionandConvolutionalLayers作者:Jean-BaptisteCordonnier,AndreasLoukas,MartinJaggi发表会议:ICLR2020论文地址:arXiv:1911.03584v2目录【论文精读】OntheRelationshipBetweenSelf-AttentionandConv......
  • __init__? self.value = value? constructor? instance object?
    为什么会出现self.value=value的实例变量呢?为什么要给类设置出一个构造函数呢.下面具体谈一下实例化对象的一些特点和用途:封装性和复用性:实例化对象可以将数据和行为封装在一起,从而提高代码的可维护性和复用性。例如,在上面的例子中,Person类定义了一个通用的人的属性和行为,我......
  • Create a self-signed certificate
    Preconditions:sendmessages)Tasks-Changeyourexistinghttpservertohttpsserver-ImplementabasicuserauthenticationBackgroundreading:Classesneededintheimplementation:com.sun.net.httpserver.HttpsServecom.sun.net.httpserver.HttpsConfiguratorco......