前沿重器
栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经是20年的事了!)
2024年文章合集最新发布!在这里:再添近20万字-CS的陋室2024年文章合集更新
往期回顾
- 前沿重器[60] | RecSys24:LLMs知识增强推荐系统(上交&华为)
- 前沿重器[61] | Agentic RAG综述解读
- 前沿重器[62] | 综述解读:大模型在搜索推荐中的应用
- 前沿重器[63] | SIGIR25-个性化实时检索增强机器人主动对话能力
- 前沿重器[64] | 阿里妈妈URM大模型:基于LLM的通用推荐新方案
想必大家都会遇到一个问题,很多比较灵活的文本生成场景,我们无法很客观地像分类、实体抽取之类的场景一样快速地把效果指标跑出来,更多是要靠人看,然而实际上文本生成后的内容复杂多变,细节标准也很多,判断起来的难度也就更大了。用大模型进行判断会是一个还不错的方案,目前哪怕是论文这种相对严谨的场景,也有很多开始尝试使用大模型快速判断。
于是,大模型的判断是否靠谱,就成为一个重要课题,最近有一篇综述详细讲解了大模型作为评判者的应用、优势和挑战,今天就和大家分享一下这篇论文,方便大家更快地用起来,解决实际的评判问题。
论文:
- 论文:A Survey on LLM-as-a-Judge
- 论文链接:https://arxiv.org/abs/2411.15594
- PS:与之类似的,在24年末还有一篇类似的,此处不赘述了:https://arxiv.org/abs/2411.16594。
目录:
- 概念与核心流程
- 核心方案和优化方法
- prompt优化策略
- 提升大模型本身的评估能力
- 调整最终效果
- 评判能力的评判
- 应用、挑战和展望
- 一些个人经验
概念与核心流程
首先需要明确的是LLM-as-a-judge的概念,此处我把论文的原话摘出来。
At its core, LLM-as-a-Judge denotes the use of LLMs to evaluate objects, actions, or decisions based on predefined rules, criteria, or preferences. It encompasses a broad spectrum of roles, including: Graders , Evaluators/Assessors , Critics , Verifiers , Examiners , Reward/Ranking Models , etc.
简单的说,便是根据给定规则,对评价对象进行评价。而评价的方式,可以是评分、估计、批判、验证、考试、奖励/排序等,这里并不局限于对错好坏、分数,可能还有描述性的、排序对比类的评价。
那要对进行评价,作者把评价的过程分成了如下部分,上下文学习、模型选择、后处理和评估,具体如下面所示。
首先是上下文学习,此处所指的是其实就是我们日常说的prompt了,这里有两个部分,输入设计和提示设计,即待评估的样本,以及具体的评价任务描述,前者比较简单,后者内容则比较多,首先需要关注的便是评价的任务,这里作者把评价任务分为4种,评分(如0-5分)、是非(如是否)、比较(如谁好谁坏一样,就是常说的GSB)、多选等。来看个例子吧,这是一个是非题的prompt模板。
Is the sentence supported by the article? Answer "Yes" or "No".
Article: {Article}
Sentence: {Sentence}
然后便是模型选择,最简单粗暴的肯定就是直接用开源模型了,当然也有基于任务直接去微调的,流程上看起来是比较常规的。
后处理,则是对大模型的输出进行后处理,这个过程还是非常常见的,尽管如此,但是因为输出的解析不正确而导致的错误还是时有发现,按照文章的描述,把后处理分为3个方案:提取特定标记、约束编码、归一化输出。
- 提取特定标记:根据prompt的约束,以及输出的格式,直接提取字符。
- 约束解码:通过解码约束的方式,要求输出的格式方便解析。
- 归一化输出logits:大模型的输出本就是字符的概率,通过解码的方式得到结果,获取logits并进行判断。
前三步就已经完成了LLM-as-a-Judge,最后的评估(Evaluation),按照我的理解,是指把上述流程串起来然后进行应用,有关应用,作者分为4个情况,可用于模型评估、数据评估(用于支撑训练模型的数据)、Agent评估、推理或者思考(thinking)。
核心方案和优化方法
上文只讲述了最简单的一些流程方案,能让大家有个快速的baseline,但是发现评价效果不好的时候,还是需要优化的,文中提供了大量有效的方案,方便大家结合实际情况选择。在改进的思路上,基本和上面的三个模块对齐,即上下文学习、模型选择、后处理三个模块。
prompt优化策略
prompt要承载的信息太多了,如果信息给的不完整或者不清晰,那大模型的输出并不会有很好的效果。优化的思路上,主要是如下几种。
- 提供例子。
- 纵向,按照步骤进行拆解,把评论任务拆解成多个步骤,逐步分析得到评价结果。
- 横向,把评估拆解为几个维度,拆成几个小类目,逐个评分。
- 为应对位置偏见,对多选题、对比题等,可以随机更换顺序进行评分。
- 优化输出结果,例如构造结构化结果,方便后续的解析和使用。
提升大模型本身的评估能力
这个思路和平时在大模型应用时类似,在大模型效果距离实际业务使用差距太大的时候,最容易想到的方案便是微调,微调的思路也可以分两种。
- 专门构造数据进行专门微调,可以考虑用开放数据集,也可以用自己的场景,或者是大模型额外生成的数据来构造,这种微调使用良好和不良响应的配对数据训练LLM评估器,从而显著减少LLM中的偏见,包括长度偏见、细节性偏见、知识偏见。
- 第二个是借助评估结果反馈来优化。这个其实有点像RL或者是以前曾有过研究的主动学习,借助反馈得到的结果反过来调整大模型的标准。
调整最终效果
在大模型结果出来后,最终的效果按道理已经不错,然而因为大模型的随机性等原因,还是需要再最终的输出中加一些干预,形成最稳定可靠的结果。此处作者提供3大思路。
- 整合多次评估的结果。通过次数增加而磨平不稳定的效果。这里的多次,可以试一个模型多次,也可以是多个模型多次,在资源足够的情况下,多个模型多次甚至可以避免模型自己的偏见问题。
- 直接优化LLM输出,这里的魔改会比较多,类似用logits和LLM输出的分数进行平滑、self-consistency等。
- 从点评估转换为成对比较。点评场景通常是孤例,分数又是对比性质的,这样给的分很容易有偏见,但是如果是横向的对比,优劣势会更明显,此时的评价就会更加客观。当然这个方案要求有对比的对象才行(就像情人节需要有对象才有意义)。
评判能力的评判
用大模型来评估具体结果的好坏,在此之前我最关心的问题便是大模型的可靠性。在这篇文章,作者给出了这套方案比较可靠的评估方式。
所谓借助外力而非人来进行评估,要考验的便是大模型结果和人的一致情况,按照一致为1不一致为0,便可快速给出粗暴的评价,但类似给分的任务,直接评价一致可能并不公平,因此还有类似Spearman相关系数、Cohen's Kappa系数等,当然还有把大模型当做分类问题,使用准召F1三件套。
除此之外,还有比较难检测的偏见,此处作者把大模型的偏见分为两种,任务无关偏见和任务有关偏见。顾名思义,前者所指的是大模型本身固有的偏见,此处包括多样性偏见(如种族、性取向等)、文化偏见、自我增强偏见(大模型会更倾向于自己的结果更合理)。而后者则包括位置偏见(评分结果和位置相关)、自我偏好偏见(倾向于GPT4的结果会有更高的分数)、风格偏见(特定的语言或者情绪说法)、长度偏见(我们其实也会有,类似句子长一些会显得更专业)、细节性偏见(偏向于更有细节的回应,如引用数据、专业文献等)。
应用、挑战和展望
在后面的章节,作者针对应用、挑战和展望进行了不少的总结和阐述,这几章看下来,在这个工具的应用上,有了很多新的思路,这里也简单总结一下。
首先是应用,LLM-as-a-judge的应用范围比想象中还要广。首先还是算法视角的领域,文本生成、推理能力/路径增强、检索上,都有很大作用,辅助进行效果优化,最近的thinking,这个评判分析能力能辅助模型进行更好的推理,然后便是应用场景,社交智能、多模态、金融、法律、科学等,大模型虽说对垂类的效果一般,但在微调后进行评判,还是不错的,例如法律文档的判断,金融合规性检查,应该都大有裨益。
挑战上,LLM-as-a-judge主要有这些。
- 可靠性。大模型做裁判最重要的便是可靠性,偏见问题、过度自信(校准问题)、公平性和泛化能力问题,都还有很大的提升空间。
- 鲁棒性。大模型对特定对抗攻击的抵抗能力还不足,而且也还没有很强的防御机制。
- 大模型基础能力。归根结底,还是需要更强的基座模型,才能最终提升效果。
在此基础上,LLM-as-a-judge在未来的研究方向可以是这些。
- 可靠性提升,即上述的一些问题,需要解决,如偏见问题等。
- 数据标注。数据标注终究是问题,直接用大模型来做标注的质量大家都懂,如果配合LLM-as-a-judge,说不定能提升不少。
- 多模态LLM-as-a-judge。
- 更多的LLM-as-a-judge基准测试,在作者看来(其实篇幅中该问题提的挺多的,也花了很多篇幅),这块的基准测试还不是很多,需要补充,无论是高质量的数据集还是细粒度的评价指标。
- 用于大模型优化。LLM-as-a-judge本就有很强的评价能力,该能力说不定可以用在Agent、LLM调优等问题上,提升模型的推理能力。
一些个人经验
因为文章是综述,所以针对问题的定义、核心方案、评价、应用、挑战等多个角度的问题都有很多,但受限于LLM-as-a-judge本身的研究其实并不多,也只是众多LLM中并不算火的一个应用,所以感觉论文里来去聊的都是那几个方案。此处配合自己的经验,来和大家分享一些这个问题上的经验。
首先是评价任务的标准。分类也好,生成也罢,所谓效果的好坏,我们总需要一个“标准”,当且仅当这个标准足够明确,这个评价才有意义,这不仅是模型层面,而是任务层面,这个别以为很简单,在实践上我们并不能很快很好地把任务描述出来,需要经过反复的探究。
第二是描述。在标准明确后,我们需要把这个标准信息传达给大模型,这个一般是两种方案,一个是描述性的说法,另一个是例子,我们必须描述清楚。很多人总说大模型的效果不好,要微调,很多时候其实在prompt里写上就好了。再者,多让模型输出理由、解决方案,这个类似CoT,评判内容会更可靠。
第三是一定要做case分析。我曾经花了很多笔墨写了一个系列(心法利器[37-40,115] | bad case治疗术:合集),反复强调很多次,很多的问题就暴露在bad case里面,上面有提到评价任务的标准需要反复探究,就来源于此,早期我们并不能很好地理解一些任务,例如“关键词抽取”之类的任务,关键词的概念很模糊,只有看的足够多,逐步明确边界,才能知道何为关键,再者,我们人类的理解要对齐,我们和大模型的理解,也需要达成一致。还需要强调的是,必须看,不要过分相信大模型的结果,很多时候大模型的评价会更保守,召回率低的问题还是比较严重的,记得多看看。
第四,任务拆分。在论文中,有提到纵向的步骤拆分和横向的分维度拆分,是有必要的,实验表明,对一些比较客观的文本生成任务,分维度能让大模型的额评价更加客观完整,单一的评价任务可能会存在一些倾向性,拆分能约束模型思考。
第五,微调。微调是可以做的,但我自己的风格是偏保守的,通常会花点时间先把任务的细节弄清楚再来考虑,
第六,保守的信任。在这个问题上,我总是保守的信任,信任在于大模型却有能力,整体而言虽说分数的绝对值不一定准,但是横向比较,相对分数还是比较可靠的,但是,也要保守,仔细分析case看是否有误判,误判的原因和占比,都需要看数据来分析,及时调整和修改。