大模型评估全解析:方法、指标与框架
=======================
🕙发布时间:2025-02-24
❝
本文3W4000字,分了8个小节介绍大模型评估方法,后续会把最新的方法更新进来~,有些内容是翻译自HuggingFace和一些论文,更多LLM架构文章:LLM架构专栏
近日热文:
1. 全网最全的神经网络数学原理(代码和公式)直观解释
2. 大模型进化史:从Transformer到DeepSeek-R1的AI变革之路
3. 2W8000字深度剖析25种RAG变体:全网最全~没有之一
4. 3W6000字了解大模型LLM:部署、优化与框架
5. 2W8000字揭秘RAG:从基础到高级的逆袭,彻底重塑大模型!
知乎【柏企】
公众号【柏企科技说】【柏企阅文】
开篇:大语言模型评估的重要性
首先,通过下面的表格来了解传统机器学习、深度学习和大语言模型之间的区别。
大语言模型的出现为解决以往被认为不可能的问题开辟了新途径。但有一个问题仍待解答:如何有效地评估基于大模型的应用程序呢?在本文中,我们将试图揭开这个谜题,了解用于基准测试大语言模型的方法,讨论最前沿(SOTA)的方法、可用的框架,以及评估基于大语言模型的应用程序时面临的挑战。
评估大语言模型的基本思路
从哪里开始评估大语言模型?
模型选择至关重要,因为它会影响项目的最终结果。在选定模型后,下一步就是思考如何评估它。许多从业者最初会依赖提示工程来评估模型的选择,但这不足以全面评估大语言模型的有效性,我们需要一个更全面的评估策略。
模型评估是复杂的,涉及各种指标,这些指标因优先事项而异,无论是优先考虑准确性、成本效益还是性能。你选择的方向应与特定需求保持一致,确保所选模型不仅适用,还能优化你的应用场景。
在为应用选择最佳大语言模型时,可参考以下简化方法(上图中有更多详细信息):
- 是否有标准答案?
- 是否需要自动化评估?
- 是否面临时间限制?
-
是:选择独立指标,如文本质量、可读性或困惑度。
-
否:黄金标准是人工评估。虽然它速度较慢且成本较高,但由于需要大量人力投入,能提供最可靠的反馈。
接下来,我们将详细讨论这些技术。
大语言模型基准测试与评估的差异
虽然大语言模型的基准测试和评估紧密相关,但它们的目的存在细微差别:
基准测试主要是标准化测试。它使用预定义的数据集和指标,评估大语言模型在特定任务上的表现。可以把它想象成给语言模型进行阅读、写作和数学测试(只不过是针对语言的测试!)。基准测试的优势如下:
-
便于比较:研究人员可以通过基准测试,比较不同大语言模型在相同任务上的性能,有助于确定哪些模型在特定领域表现出色。
-
量化结果:基准测试提供数值分数,清晰展示大语言模型的优势和劣势。
评估的范围则更为广泛。它不仅仅是运行测试,还包括对大语言模型能力更全面的评估。在评估时,研究人员会考虑以下方面:
-
实际适用性:大语言模型在模拟现实应用场景中的表现如何?
-
公平性和偏差:大语言模型的输出是否存在偏差?
-
可解释性:研究人员能否理解大语言模型得出答案的过程?
评估通常以基准测试为基础。研究人员可能会将基准测试分数作为起点,但也会深入探究基准测试未涵盖的方面。简单来说,基准测试通过标准化测试进行定量评估,而评估则能让我们更定性地了解大语言模型的整体优势、劣势以及对现实应用的适用性。
大语言模型基准测试
大语言模型基准测试框架
大语言模型基准测试是一组标准化测试,旨在评估大语言模型在各种技能(如推理和理解能力)上的表现,并使用特定的评分器或指标来衡量这些能力。根据不同的基准测试,指标范围可以从基于统计的度量(如精确匹配的比例),到由其他大语言模型评估的更复杂的指标。
不同的基准测试评估模型能力的不同方面,包括:
-
推理和常识:这些基准测试大语言模型运用逻辑和日常知识解决问题的能力。
-
语言理解和问答(QA):评估模型解释文本和准确回答问题的能力。
-
编码:该类别基准测试评估大语言模型解释和生成代码的能力。
-
对话和聊天机器人:测试大语言模型参与对话并提供连贯、相关回复的能力。
-
翻译:评估模型将文本从一种语言准确翻译成另一种语言的能力。
-
数学:聚焦于模型解决数学问题的能力,从基础算术到微积分等更复杂的领域。
-
逻辑:逻辑基准测试评估模型应用逻辑推理技能(如归纳和演绎推理)的能力。
-
标准化测试:学术水平测试(如SAT、ACT)或其他教育评估也用于评估和基准测试模型的性能。
有些基准测试可能只有几十项测试,而其他的可能包含数百甚至数千个任务。重要的是,大语言模型基准测试为跨不同领域和任务评估大语言模型的性能提供了标准化框架。为项目选择合适的基准测试意味着:
-
目标一致:确保基准测试与大语言模型需要出色完成的特定任务相匹配。
-
任务多样:选择具有广泛任务的基准测试,能全面评估大语言模型。
-
贴合领域:选择与应用相关领域的基准测试,无论是理解语言、生成文本还是编码。
可以把它们想象成高中生的学术水平测试,只不过是针对大语言模型的。虽然它们无法评估模型能力的方方面面,但确实能提供有价值的见解。下面是Claude 3在多个基准测试中与其他最前沿模型的性能对比。
在接下来的部分,我们将讨论4个关键领域(语言理解、推理、编码和对话)的主要大语言模型基准测试。这些基准测试在行业应用中广泛使用,并经常在技术报告中被引用,包括:
语言理解和问答基准测试
3.1.1 TruthfulQA
-
目标:基于模型提供准确和真实答案的能力对其进行评估。这对于打击错误信息和促进人工智能的道德使用至关重要。
-
数据集:原始数据集包含38个类别的817个问题,涵盖健康、法律、金融和政治等类别。问题聚焦于人类可能因错误信念或误解而给出错误答案的领域。
-
性能:原始论文中表现最佳的模型GPT-3,成功率仅为58%,而人类基线为94%。
-
评分:最终分数基于模型生成的真实输出的比例计算。经过微调的GPT-3(称为“GPT-Judge”)用于判断答案的真实性。
3.1.2 MMLU(大规模多任务语言理解)
-
目标:基于模型的预训练知识评估模型,专注于零样本和少样本设置。
-
基准测试:综合基准测试,通过涵盖57个学科(包括STEM、人文、社会科学等)的选择题评估模型,难度级别从基础到高级不等。该基准测试能很好地识别模型在特定领域的知识差距。
-
评分:MMLU根据正确答案的比例对大语言模型进行评分。输出必须完全匹配才被视为正确(如上述示例中的“D”)。
如果觉得MMLU难以使用,有个好消息。有人在开源大语言模型评估框架DeepEval中实现了几个关键基准测试,这样我们只需几行代码就能轻松对任何选定的大语言模型进行基准测试。
- 首先,安装DeepEval:
`pip install deepeval `
- 然后,运行基准测试:
`from deepeval.benchmarks import MMLU from deepeval.benchmarks.tasks import MMLUTask benchmark = MMLU( tasks=[MMLUTask.HIGH_SCHOOL_COMPUTER_SCIENCE, MMLUTask.ASTRONOMY], n_shots=3 ) benchmark.evaluate(model=mistral_7b) print(benchmark.overall_score) `
更多实现细节,请访问DeepEval MMLU文档。
3.1.3 DROP
-
描述:DROP要求大语言模型对段落进行离散推理。这涉及解析问题中的引用,并执行加法、计数或排序等操作,需要对段落内容有全面的理解。
-
评估设置:3次示例
-
指标:在9536个段落理解问题上的F1分数
-
论文:DROP: A Reading Comprehension Benchmark Requiring Discrete Reasoning Over Paragraphs[7]
以上就是开源大语言模型排行榜的七个主要基准测试任务。这些测试不仅评估大语言模型的知识,还评估它们的推理、理解和解决问题的能力。
其他值得注意的语言理解和问答基准测试:GLUE、SuperGLUE、SQuAD和GPT任务、CoQA、QuAC、TriviaQA。
常识和推理基准测试
3.2.1 ARC(AI2推理挑战)
-
发布时间:2018年
-
论文[8] 代码[9] 点击可查看,或者文末在参考文献中查找
-
描述:AI2推理挑战(ARC)使用小学水平的选择题科学问题测试大语言模型,问题难度从简单到复杂不等。例如,“光合作用产生什么帮助植物生长?”,选项为(a)水 (b)氧气 ©蛋白质 (d)糖。
-
评估设置:25次示例
-
指标:在3548个问题上的准确率,其中33%被指定为具有挑战性的问题。
-
论文:Think you have Solved Question Answering? Try ARC, the AI2 Reasoning Challenge[10]
-
数据集:数据集大小为681MB,分为两组问题:ARC-Easy和ARC-Challenge。
3.2.2 HellaSwag
-
描述:HellaSwag通过句子补全评估大语言模型的常识推理能力。它测试大语言模型是否能从10,000个句子的4个选项中选择合适的结尾。在预训练阶段,当时的最前沿模型得分很难超过50%,而2023年GPT-4通过10次示例提示达到了创纪录的95.3%。与MMLU类似,HellaSwag根据模型给出的完全正确答案的比例进行评分。
-
使用方法:通过DeepEval使用HellaSwag基准测试的方法如下:
`from deepeval.benchmarks import HellaSwag from deepeval.benchmarks.tasks import HellaSwagTask benchmark = HellaSwag( tasks=[HellaSwagTask.TRIMMING_BRANCHES_OR_HEDGES, HellaSwagTask.BATON_TWIRLING], n_shots=5 ) benchmark.evaluate(model=mistral_7b) print(benchmark.overall_score) `
更多信息,请访问DeepEval的HellaSwag文档页面。
3.2.3 BIG-Bench Hard(超越模仿游戏基准测试)
-
发布时间:2022年
-
、代码、数据集:论文[14] 代码[15] 数据集[16]
-
描述:BIG-Bench Hard(BBH)从最初的BIG-Bench套件中选择了23个具有挑战性的任务,该套件包含204个任务,这些任务在当时超出了大多数语言模型的能力范围。
-
评估方式对比:标准(少样本)提示与思维链(CoT)提示(Wei等人)。在BIG-Bench发布时,没有一个最前沿的语言模型能够在这23个任务中的任何一个上超过平均人类评估者的表现。有趣的是,BBH的作者使用思维链提示,在其中17个任务上超越了人类表现。
-
评分方式:虽然BBH的预期输出比其他基于选择题的基准测试更加多样化,但它同样基于精确匹配的比例对模型进行评分。思维链提示有助于使模型输出符合预期格式。
-
使用方法:使用BBH基准测试的方法如下:
`from deepeval.benchmarks import BigBenchHard from deepeval.benchmarks.tasks import BigBenchHardTask benchmark = BigBenchHard( tasks=[BigBenchHardTask.BOOLEAN_EXPRESSIONS, BigBenchHardTask.CAUSAL_JUDGEMENT], n_shots=3, enable_cot=True ) benchmark.evaluate(model=mistral_7b) print(benchmark.overall_score) `
3.2.4 WinoGrande
-
描述:WinoGrande测试人工智能的常识推理能力,要求模型解决Winograd Schema Challenge(WSC)。例如,完成句子:“门打开的声音比窗户大,因为___(选项:门或窗户)的铰链上有更多油脂。”
-
评估设置:5次示例
-
指标:在1267个问题上的准确率
-
论文:WinoGrande: An Adversarial Winograd Schema Challenge at Scale[17]
3.2.5 GSM8k
-
描述:GSM8K提供小学数学应用题,测试大语言模型的多步数学推理能力。例如:“一件长袍需要2卷蓝色纤维和蓝色纤维数量一半的白色纤维。总共需要多少卷纤维?”答案是3卷。
-
评估设置:5次示例
-
指标:在1319个问题上的准确率
-
论文:Training Verifiers to Solve Math Word Problems[18]
其他值得注意的常识和推理基准测试:CommonsenseQA、COPA、SNLI、MultiNLI、RACE、ANLI、PIQA、COSMOS QA。
编码基准测试
3.3.1 HumanEval
-
发布时间:2021年
-
论文[19] 代码[20] 数据集[21]
-
描述:HumanEval由164个独特的编程任务组成,旨在评估模型的代码生成能力。这些任务涵盖从算法到编程语言理解的广泛领域。
3.3.2 CodeXGLUE
-
描述:CodeXGLUE提供10个不同任务的14个数据集,用于在各种编码场景(如代码补全、代码翻译、代码摘要和代码搜索)中直接测试和比较模型。它是由微软开发部门和必应合作开发的。
-
评估指标:CodeXGLUE的评估指标因编码任务而异,从精确匹配到BLEU分数不等。
其他值得注意的编码基准测试:CodeBLEU、MBPP、Py150、MathQA、Spider、DeepFix、Clone Detection、CodeSearchNet。
生成式人工智能模型根据其在4个数据集上的平均性能进行排名:
25次示例意味着在每个问题的提示中插入数据集中的25对(问题,解决方案)。
3.4对话和聊天机器人基准测试
3.4.1 Chatbot Arena(由LMSys开发)
发布时间:2024年
论文[25] 代码[26]
Chatbot Arena是一个使用超过20万个人类投票对语言模型进行排名的开放平台。用户可以匿名向ChatGPT或Claude等人工智能模型提问并进行评判,且只有在模型身份保持隐藏的情况下,投票才会计入排名。所以它不是一个使用指标客观评分的传统基准测试!分数本质上就是 “点赞” 的数量。
3.4.2 MT Bench
发布时间:2021年
论文[27] 代码[28] 数据集[29]
MT-bench通过向聊天助手提出一系列多轮开放式问题来评估其质量,并利用大语言模型作为评判者。这种方法测试了聊天助手处理复杂交互的能力。MT-Bench使用GPT-4对对话进行10分制评分,并计算所有轮次的平均分数以得到最终得分。
所有这些基准测试在评估特定技能方面都非常有用,但是如果现有的基准测试与我们项目的独特需求不太匹配呢?
3.4.3 语言模型评估工具包(由EleutherAI开发)
语言模型评估工具包(Language Model Evaluation Harness[30])提供了一个统一的框架,用于在大量评估任务上对大语言模型进行基准测试。我特意强调 “任务” 这个词,因为在Harness(我将用Harness代替语言模型评估工具包)中没有 “场景” 这个概念。
在Harness中,我们可以看到许多任务,每个任务包含不同的子任务。每个任务或一组子任务在不同领域评估大语言模型,比如生成能力、在不同领域的推理能力等。
每个任务下的子任务(甚至有时任务本身)都有一个基准数据集,并且这些任务通常与一些在评估方面的重要研究相关。Harness致力于将所有这些数据集、配置和评估策略(比如与评估基准数据集相关的指标)统一并整合在一个地方。
不仅如此,Harness还支持不同类型的大语言模型后端(例如:VLLM、GGUF等)。它在更改提示和进行实验方面具有很大的可定制性。
下面是一个如何在HellaSwag任务(一个判断大语言模型常识能力的任务)上轻松评估Mistral模型的小例子:
`lm_eval --model hf --model_args pretrained=mistralai/Mistral-7B-v0.1 --tasks hellaswag --device cuda:0 --batch_size 8 `
受语言模型评估工具包的启发,BigCode项目开发了另一个框架,名为BigCode Evaluation Harness,它试图提供类似的API和命令行界面方法,专门用于评估代码生成任务的大语言模型。
3.4.4 斯坦福HELM
HELM(语言模型整体评估,Holistic Evaluation of Language Model[31])使用 “场景” 来概述大语言模型的应用场景,并使用 “指标” 来明确在基准测试中我们希望大语言模型完成的任务。一个场景包括:
-
一个任务(与场景相关)
-
一个领域(包括文本的类型、作者以及创作时间)
-
语言(即任务所使用的语言)
然后,HELM会根据社会相关性(例如,考虑面向用户应用程序的可靠性的场景)、覆盖范围(多语言)和可行性(即选择任务的计算最优重要子集进行评估,而不是逐一运行所有数据点)来优先选择场景和指标的子集。
HELM的评估分类结构
不仅如此,HELM试图为几乎所有场景涵盖7个指标(准确性、校准度、稳健性、公平性、偏差、毒性和效率),因为仅仅依靠准确性并不能完全保证大语言模型性能的可靠性。
3.4.5 PromptBench(微软开发)
微软Prompt Bench
PromptBench是另一个用于大语言模型基准测试的统一库。它与HELM和语言模型评估工具包(Harness)非常相似,支持不同的大语言模型框架(例如:Hugging Face、VLLM等)。它与其他框架的不同之处在于,除了评估任务之外,它还支持评估不同的提示工程方法,并在不同的提示级对抗攻击下评估大语言模型。我们还可以构建不同评估的管道,这使得生产级用例更易于实现。
4. 大语言模型基准测试的局限性
虽然基准测试对于评估大语言模型的能力至关重要,但它们也有自身的局限性:
-
领域相关性:基准测试往往难以与大语言模型应用的独特领域和上下文相匹配,缺乏法律分析或医学解读等任务所需的特定性。这一差距凸显了创建能够准确评估大语言模型在广泛专业应用中性能的基准测试所面临的挑战。
-
生命周期短:在基准测试刚推出时,通常模型的表现都不太能达到人类基线水平。但过一段时间,比如1 – 3年,先进的模型会让最初的挑战变得轻而易举(就是例证)。当这些指标不再具有挑战性时,就有必要开发新的、有用的基准测试。
不过,也并非毫无希望。通过合成数据生成等创新方法,克服这些局限性是有可能的。
5. 大语言模型评估指标
大语言模型评估指标根据我们关心的标准对大语言模型的输出进行评分。例如,如果我们的大语言模型应用旨在总结新闻文章页面,我们就需要一个基于以下方面进行评分的评估指标:
此外,如果我们的大语言模型应用采用基于检索增强生成(RAG)的架构,我们可能还需要对检索上下文的质量进行评分。关键在于,大语言模型评估指标是根据其设计要完成的任务来评估大语言模型应用的(注意,大语言模型应用可以仅仅就是大语言模型本身!)。
优秀的评估指标具有以下特点:
-
可量化:指标在评估手头任务时,应该始终计算出一个分数。这种方法使我们能够设定一个最低通过阈值,以确定我们的大语言模型应用是否 “足够好”,并且让我们能够在迭代和改进实现的过程中,监测这些分数随时间的变化。
-
可靠:鉴于大语言模型的输出可能不可预测,我们最不希望的就是评估指标同样不稳定。因此,尽管使用大语言模型评估的指标(如G-Eval)比传统评分方法更准确,但它们往往不一致,这也是大多数基于大语言模型评估指标的不足之处。
-
准确:如果可靠的分数不能真正代表我们大语言模型应用的性能,那么它们就毫无意义。要使一个好的大语言模型评估指标变得更出色,秘诀在于尽可能使其符合人类的预期。
那么问题来了,大语言模型评估指标如何计算出可靠且准确的分数呢?
6. 计算指标分数的不同方法
有许多成熟的方法可用于计算指标分数,其中一些方法利用包括嵌入模型和大语言模型在内的神经网络,而另一些则完全基于统计分析。
6.1 统计评分器
6.1.1 词错误率(WER)
词错误率(WER)是一类基于WER的指标,用于测量编辑距离 ,即把候选文本转换为参考文本所需的插入、删除、替换以及可能的换位操作的数量。
6.1.2 精确匹配
它通过将生成的文本与参考文本进行匹配来衡量候选文本的准确性。与参考文本的任何偏差都会被视为错误。这只适用于抽取式和短格式答案的情况,因为这种情况下期望生成的文本与参考文本的偏差最小或没有偏差。
6.1.3 困惑度
困惑度(PPL)是评估语言模型最常用的指标之一。在深入了解之前,我们应该注意,这个指标特别适用于经典语言模型(有时称为自回归或因果语言模型),对于像BERT这样的掩码语言模型并不适用。
这也等同于数据和模型预测之间交叉熵的指数化。想要深入理解困惑度及其与每字符比特数(BPC)和数据压缩的关系,可以查看The Gradient上的这篇精彩博客文章。
6.1.4 BLEU
BLEU(双语评估替补,BiLingual Evaluation Understudy)分数是一种广泛用于评估机器翻译文本(候选文本)与参考译文(参考文本)质量的指标。由IBM研究人员开发,BLEU通过测量机器生成的文本与一组高质量参考译文之间的n元语法重叠来评估翻译的准确性,它主要侧重于精确率。BLEU以其简单性和有效性而闻名,是机器翻译领域的标准基准。然而,它主要评估的是表面层次的词汇相似性,常常忽略语言更深层次的语义和上下文细微差别。
-
候选文本:这是我们想要评估的翻译系统的输出。
-
参考文本:这些是高质量的翻译(通常由人工完成),我们将候选文本与之进行比较。为了保证稳健性,参考译文可以不止一个。
计算方法
-
将候选翻译和参考翻译拆分为单词(标记)。标记化在两组文本中应该保持一致。
-
计算n元语法精确率(P):
-
对于每个n元语法长度(通常从1到4):
-
计算候选文本中出现在参考文本中的n元语法数量:即参考文本和候选文本中共同的n元语法数量。
-
将这个数量除以候选翻译中n元语法的总数,得到每个n元语法长度的精确率。
- 长度惩罚(BP):如果候选翻译比参考翻译短,我们应该应用一个惩罚,以避免偏向于过短的翻译。
- BP公式:如果 ,;否则 。其中 是候选翻译的长度, 是有效的参考长度。
- BLEU分数:BLEU分数是通过n元语法精确率的几何平均值乘以长度惩罚来计算的。
-
BLEU分数 = ,这里 取值从1到4(n元语法),其中 是n元语法的精确率。
-
BLEU分数的范围:通常是从0到1,0表示翻译文本与参考译文没有重叠,代表最低分,表明翻译质量很差;1表示与参考译文完全匹配,代表最高分,表明翻译质量理想。
`from nltk.translate.bleu_score import sentence_bleu reference = [["A", "fast", "brown", "fox", "jumps", "over", "a", "lazy", "dog", "."]] generated = [["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog", "."]] bleu_score = sentence_bleu(reference, generated) print('BLEU Score:', bleu_score) `
6.1.5 ROUGE
ROUGE(面向摘要评估的召回率替代指标,Recall-Oriented Understudy for Gisting Evaluation)是一组用于评估自动摘要和机器翻译的指标。它将自动生成的摘要或翻译与一组参考摘要(通常是人工撰写的)进行比较。ROUGE通过计算模型生成的文本与参考文本之间重叠的单元数量(如n元语法、单词序列和单词对)来衡量摘要的质量。ROUGE最常见的变体有:
-
ROUGE-N:侧重于n元语法(N个单词的短语)。ROUGE-1和ROUGE-2(分别是一元语法和二元语法)最为常用。
-
ROUGE-L:基于最长公共子序列(LCS),它自然地考虑了句子级别的结构相似性,并自动识别最长的共同出现的连续n元语法。
ROUGE通常报告三个指标:
-
精确率:模型生成的摘要中的n元语法在参考摘要中也出现的比例。
-
召回率:参考摘要中的n元语法在模型生成的摘要中也出现的比例。
-
F分数(F1分数):精确率和召回率的调和平均数,平衡了这两个指标。
ROUGE分数的范围是从0到1,0表示机器生成的文本与参考文本没有重叠,1表示与参考文本完全匹配。
`from nltk.translate.bleu_score import corpus_rouge reference_summaries = [['A fast brown fox jumps over a lazy dog.']] generated_summaries = [['The quick brown fox jumps over the lazy dog.']] rouge_score = corpus_rouge(reference_summaries, generated_summaries) print('ROUGE Score:', rouge_score) `
6.1.6 METEOR
METEOR(带显式排序的翻译评估指标,Metric for Evaluation of Translation with Explicit Ordering)是一种先进的机器翻译评估指标,旨在解决BLEU分数的一些局限性。与BLEU不同,METEOR不仅考虑精确的单词匹配,还纳入词干提取和同义词来评估翻译,从而捕捉更广泛的语言相似性。它在评估中独特地平衡了精确率和召回率,并引入了对词序差异的惩罚,以评估翻译的流畅性。METEOR与人类判断的相关性更高,尤其是在句子层面,使其成为一个细致全面的翻译质量评估指标。然而,它的复杂性也意味着它比BLEU等简单指标的计算成本更高。
-
基于对齐:METEOR在候选翻译和参考翻译的单词之间创建对齐,关注精确匹配、词干匹配、同义词匹配和释义匹配。
-
召回率和精确率:与仅考虑精确率的BLEU不同,METEOR同时计算精确率和召回率,这种双重关注有助于平衡评估。
-
调和平均数:METEOR使用召回率和精确率的调和平均数,并且对召回率的权重更高(修改后的调和平均数,使召回率比精确率更重要),这与使用修改后的精确率的BLEU不同。
-
词序差异惩罚:METEOR对错误的词序进行惩罚,这使得它对翻译的流畅性很敏感。
-
语言无关:虽然METEOR最初是为英语开发的,但已经扩展到支持多种语言,并配备了特定语言的参数和资源。
计算方法
-
计算匹配数:计算候选文本中与参考文本中完全匹配的一元语法数量。
-
计算精确率和召回率:
-
计算精确率和召回率的调和平均数:F均值的计算公式为: ,这个公式对召回率的权重更高。
-
词序惩罚:对词序差异应用惩罚。惩罚的计算公式为:Penalty=0.5⋅(# of chunks/# of matches)**3;其中 “chunk” 是指候选文本中与参考文本中顺序相同的相邻单词集合。
-
最终的METEOR分数:最终分数的计算公式为:
编辑距离(Levenshtein distance)评分器计算将一个单词或文本字符串转换为另一个所需的最少单字符编辑(插入、删除或替换)次数,这对于评估拼写纠正或其他对字符精确对齐至关重要的任务很有用。
由于纯粹的统计评分器几乎不考虑任何语义,推理能力也极其有限,对于评估通常又长又复杂的大语言模型输出来说,它们不够准确。
`from meteor import meteor_score reference_sentence = 'A fast brown fox jumps over a lazy dog.' generated_sentence = 'The quick brown fox jumps over the lazy dog.' meteor_score = meteor_score.meteor_score([reference_sentence], generated_sentence) print('METEOR Score:', meteor_score) `
6.2 基于模型的评分器
纯粹基于统计的评分器虽然可靠但不准确,因为它们难以考虑语义。在本节中,情况则恰恰相反,纯粹依赖自然语言处理(NLP)模型的评分器相对更准确,但由于其概率性质,也更不可靠。
不出所料,非大语言模型的评分器比基于大语言模型评估(LLM-Evals)的评分器表现更差,原因与统计评分器相同。非大语言模型评分器包括:
6.2.1 蕴含分数
蕴含分数:这种方法利用语言模型的自然语言推理能力来评判自然语言生成(NLG)。这种方法有不同的变体,但基本概念是使用自然语言推理(NLI)模型针对参考文本生成蕴含分数,以此对生成的内容进行评分。这种方法对于确保像文本摘要这样基于文本的生成任务的忠实度非常有用。
6.2.2 BLEURT
BLEURT(基于Transformer表示的双语评估替补,Bilingual Evaluation Understudy with Representations from Transformers)是一种新颖的、基于机器学习的自动评估指标,能够捕捉句子之间细微的语义相似性。它在公开的评分数据集(WMT Metrics Shared Task数据集)以及用户提供的额外评分上进行训练。
创建一个基于机器学习的指标面临一个基本挑战:该指标应该在广泛的任务和领域中始终表现良好,并且要经得起时间的考验。然而,训练数据的数量是有限的。实际上,公开数据很稀少 —— 在撰写本文时,最大的人类评分数据集WMT Metrics Task数据集仅包含约26万个涵盖新闻领域的人类评分。这对于训练一个适合评估未来自然语言生成系统的指标来说太有限了。
为了解决这个问题,我们采用迁移学习。首先,我们使用BERT的上下文单词表示,BERT是一种最先进的无监督表示学习方法,用于语言理解,并且已经成功应用于自然语言生成评估指标(例如,YiSi或BERTscore)。
其次,我们引入一种新颖的预训练方案来提高BLEURT的稳健性。我们的实验表明,直接在公开可用的人类评分上训练回归模型是一种不稳定的方法,因为我们无法控制该指标将在什么领域以及跨多长时间范围内使用。在存在领域漂移的情况下,即当使用的文本来自与训练句子对不同的领域时,准确性可能会下降。当要预测的评分高于训练期间使用的评分时,准确性也可能下降 —— 这本该是个好消息,因为这表明机器学习研究正在取得进展。
BLEURT的成功依赖于在对人类评分进行微调之前,使用数百万个合成句子对来 “预热” 模型。我们通过对维基百科中的句子进行随机扰动来生成训练数据。我们没有收集人类评分,而是使用文献中的一系列指标和模型(包括BLEU),这使得训练示例的数量能够以极低的成本进行扩展。
6.2.3 QA-QG
问答 – 问题生成(QA-QG)(Honovich等人):这种范式可用于衡量任何候选文本与参考文本的一致性。该方法的工作原理是首先从候选文本中形成(候选答案,问题)对,然后比较并验证针对参考文本中相同问题集生成的答案。
除了评分不一致之外,这些方法实际上还存在一些缺点。例如,自然语言推理评分器在处理长文本时准确性也会受到影响,而BLEURT则受其训练数据的质量和代表性的限制。
6.3.1 G-Eval
G-Eval是一篇题为《使用与人类判断更一致的GPT-4进行自然语言生成评估》的论文中最近开发的一个框架,它使用大语言模型来评估大语言模型的输出(也就是LLM-Evals)。
G-Eval首先使用思维链(CoTs)生成一系列评估步骤,然后通过填空范式使用生成的步骤来确定最终分数(这只是一种花哨的说法,意思是G-Eval需要几个信息才能工作)。例如,使用G-Eval评估大语言模型输出的连贯性时,需要构建一个包含评估标准和待评估文本的提示,以生成评估步骤,然后使用大语言模型根据这些步骤输出1到5分的分数。
让我们通过这个例子来梳理一下G-Eval算法。首先,生成评估步骤:
-
向你选择的大语言模型提出一个评估任务(例如,根据连贯性对这个输出从1到5分进行评分)。
-
定义你的标准(例如,“连贯性——实际输出中所有句子的综合质量”)。
-
(注意,在最初的G-Eval论文中,作者仅使用GPT-3.5和GPT-4进行实验,就我个人使用不同大语言模型进行G-Eval的经验而言,强烈建议使用这些模型。 )
在生成一系列评估步骤之后:
-
通过将评估步骤与我们评估步骤中列出的所有参数连接起来创建一个提示(例如,如果我们要评估大语言模型输出的连贯性,那么大语言模型的输出将是一个必需参数)。
-
在提示的末尾,要求它生成一个1到5之间的分数,5分表示比1分更好。
-
(可选)从大语言模型获取输出令牌的概率以标准化分数,并将它们的加权和作为最终结果。
第3步是可选的,因为要获得输出令牌的概率,我们需要访问原始模型嵌入,截至2024年,通过OpenAI API仍无法实现。不过,论文中引入这一步骤是因为它能提供更细粒度的分数,并最大限度地减少大语言模型评分中的偏差(正如论文中所述,在1 – 5分的评分尺度中,3的令牌概率往往较高)。
更高的斯皮尔曼(Spearman)和肯德尔等级相关系数(Kendall-Tau)代表与人类判断的更高一致性。
G-Eval很棒,因为作为一种大语言模型评估方法,它可以充分考虑大语言模型输出的语义,从而更加准确。这是很有道理的——想想看,使用远不如大语言模型强大的评分器的非大语言模型评估方法,怎么可能理解大语言模型生成的文本的全部含义呢?
虽然与其他评估方法相比,G-Eval与人类判断的相关性更高,但它仍然可能不可靠,因为让大语言模型给出一个分数无疑是主观的。
话虽如此,鉴于G-Eval的评估标准非常灵活,我个人已经在我参与开发的开源大语言模型评估框架DeepEval中,将G-Eval作为一个评估指标来实现。
`pip install deepeval export OPENAI_API_KEY="..." `
`from deepeval.test_case import LLMTestCase, LLMTestCaseParams from deepeval.metrics import GEval test_case = LLMTestCase(input="input to your LLM", actual_output="your LLM output") coherence_metric = GEval( name="Coherence", criteria="Coherence - the collective quality of all sentences in the actual output", evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT], ) coherence_metric.measure(test_case) print(coherence_metric.score) print(coherence_metric.reason) `
使用大语言模型评估的另一个主要优点是,大语言模型能够为其评估分数给出理由。
6.3.2 Prometheus
Prometheus是一个完全开源的大语言模型,在提供适当的参考材料(参考答案、评分标准)时,其评估能力可与GPT-4相媲美。它也与G-Eval类似,不依赖于具体的应用场景。Prometheus以Llama-2-Chat为基础模型,并在反馈收集中基于10万个由GPT-4生成的反馈进行了微调。
以下是Prometheus研究论文中的简要结果:
未选择GPT-4或Prometheus的反馈的原因。Prometheus生成的反馈不太抽象和笼统,但往往过于严苛。
Prometheus遵循与G-Eval相同的原则。然而,它们之间也有几个区别:
-
G-Eval是一个使用GPT-3.5/4的框架,而Prometheus是一个为评估而微调的大语言模型。
-
G-Eval通过思维链生成评分标准/评估步骤,而Prometheus的评分标准是在提示中提供的。
-
Prometheus需要参考/示例评估结果 。
虽然我个人还没有尝试过,但Prometheus在Hugging Face上可以使用。我没有尝试实现它的原因是,Prometheus旨在实现评估的开源化,而不是依赖OpenAI的GPT等专有模型。对于那些旨在构建最优秀的大语言模型评估方法的人来说,它不太合适。
6.4 结合统计和基于模型的评分器
到目前为止,我们已经了解了统计方法可靠但不准确,而非基于大语言模型的方法虽然不太可靠但更准确。与上一节类似,也有一些非大语言模型评分器,例如:
6.4.1 BERTScore
BERTScore[32](Zhang等人,2019年):这是一种基于双编码的方法,即候选文本和参考文本分别输入到深度学习模型中以获得嵌入。然后,使用令牌级的嵌入来计算成对的余弦相似度矩阵。接着,选择参考文本中与候选文本中最相似令牌的相似度分数,并用于计算精确率、召回率和F1分数。
6.4.2 MoverScore
MoverScore[33](Zhao等人,2019年):使用词移距离的概念,该概念认为嵌入的词向量之间的距离在某种程度上具有语义意义(例如vector(king) – vector(queen) = vector(man) ),并使用上下文嵌入来计算n元语法之间的欧几里得相似度。与允许单词一对一硬匹配的BERTScore不同,MoverScore允许一对多匹配,因为它使用软/部分对齐。
BERTScore和MoverScore评分器都容易受到上下文感知和偏差的影响,这是由于它们依赖于像BERT这样的预训练模型的上下文嵌入。那么大语言模型评估(LLM-Evals)呢?
6.4.3 GPTScore
与使用填空范式直接执行评估任务的G-Eval不同,GPTScore使用生成目标文本的条件概率作为评估指标。
6.4.4 SelfCheckGPT
SelfCheckGPT比较独特,它是一种基于简单采样的方法,用于对大语言模型的输出进行事实验证。它假设虚构的输出是不可重现的,而如果大语言模型知道某个给定概念,那么采样得到的回复可能会相似,并且包含一致的事实。
SelfCheckGPT是一种有趣的方法,因为它使检测虚构内容的过程无需参考,这在实际生产环境中非常有用。
然而,尽管我们会注意到G-Eval和Prometheus不依赖于具体应用场景,但SelfCheckGPT并非如此。它仅适用于检测虚构内容,而不适用于评估其他场景,如总结、连贯性等。
6.4.5 QAG分数
QAG(问答生成,Question Answer Generation)分数是一种利用大语言模型强大推理能力来可靠评估大语言模型输出的评分器。它通过对封闭式问题(可以生成或预设)的回答(通常为“是”或“否”)来计算最终的指标分数。它之所以可靠,是因为它并不直接使用大语言模型来生成分数。例如,如果我们想要计算一个关于忠实度的分数(用于衡量大语言模型的输出是否存在虚构内容),我们可以:
-
使用大语言模型提取大语言模型输出中提出的所有主张。
-
对于每个主张,询问事实依据是否同意(“是”)或不同意(“否”)该主张。
所以,对于下面这个大语言模型输出的例子: “马丁·路德·金,这位著名的民权领袖,于1968年4月4日在田纳西州孟菲斯的洛林汽车旅馆被暗杀。他当时在孟菲斯支持罢工的环卫工人,在汽车旅馆二楼的阳台上被越狱逃犯詹姆斯·厄尔·雷致命枪击。”
其中一个主张可以是:“马丁·路德·金于1968年4月4日被暗杀”,相应的封闭式问题则是:“马丁·路德·金是在1968年4月4日被暗杀的吗?”
然后,我们会拿这个问题去询问事实依据是否同意该主张。最后,我们会得到一些“是”和“否”的答案,我们可以使用自己选择的数学公式来计算分数。
在忠实度的例子中,如果我们将其定义为大语言模型输出中准确且与事实依据一致的主张的比例,那么通过将准确(真实)主张的数量除以大语言模型提出的主张总数,就可以轻松计算出该比例。由于我们不是使用大语言模型直接生成评估分数,而是仍然利用它们卓越的推理能力,因此我们得到的分数既准确又可靠。
7. 评估基于大语言模型的应用
7.1. 选择评估指标
大语言模型应用的评估指标是根据交互模式和预期答案的类型来选择的。与大语言模型的交互主要有三种形式:
-
知识寻求:向大语言模型提出一个问题或指令,并期望得到一个真实的答案。例如,印度的人口是多少?
-
文本关联:给大语言模型提供一段文本和指令,并期望答案完全基于给定的文本。例如,总结给定的文本。
-
创造力:向大语言模型提出一个问题或指令,并期望得到一个有创意的答案。例如,写一个关于阿育王王子的故事。
对于这些交互或任务中的每一个,预期的答案类型可以是提取式、摘要式、短格式、长格式或选择题。
例如,对于大语言模型在科学论文总结(文本关联+摘要式)中的应用,结果与原始文档的忠实度和一致性至关重要。
7.2. 评估评估方法!
一旦我们制定了适合我们应用的评估策略,在使用它来量化实验性能之前,我们应该先对该策略进行评估。评估策略是通过量化其与人类判断的相关性来进行评估的。
-
获取或标注一个包含人工标注的“黄金标准”分数的测试集。
-
使用我们的方法对测试集中的生成内容进行评分。
-
使用肯德尔等级相关系数等相关度量方法,衡量人工标注分数与自动评分之间的相关性。
一般来说,分数达到0.7或以上就被认为足够好了。这也可以用来提高我们评估策略的有效性。
7.3. 构建评估集
在为任何机器学习问题构建评估集时,需要确保两个基本标准:
-
数据集应该足够大,以产生具有统计意义的结果。
-
它应该尽可能代表生产环境中预期的数据。
基于大语言模型的应用的评估集可以逐步构建。还可以利用大语言模型通过少样本提示为评估集生成查询,像自动评估器这样的工具可以帮助完成这项工作。
构建一个带有事实依据的评估集既昂贵又耗时,并且要在数据漂移的情况下维护这样一个经过人工标注的“黄金标准”测试集是一项极具挑战性的任务。如果无监督的大语言模型辅助方法与我们的目标相关性不好,那么可以尝试这种方法。参考答案的存在可以在诸如事实性等某些方面提高评估的有效性。
8. 大语言模型评估框架
评估大语言模型以衡量它们在各种应用中的质量和效果至关重要。人们专门设计了许多框架来评估大语言模型。
下面,我们重点介绍一些最广为人知的框架,如微软Azure AI 工作室中的Prompt Flow、与LangChain结合使用的Weights & Biases、LangChain开发的LangSmith、confidence-ai开发的DeepEval、TruEra等等。
8.1. DeepEval
DeepEval是一个用于大语言模型的开源评估框架。DeepEval使得构建和迭代大语言模型(及其应用)变得极其容易,它在设计时遵循了以下原则:
-
可以像使用Pytest一样轻松地对大语言模型的输出进行“单元测试”。
-
可即插即用14种以上经过研究验证的大语言模型评估指标。
-
自定义指标简单易实现和创建。
-
可以用Python代码定义评估数据集。
-
支持在生产环境中进行实时评估(可在Confident AI上使用)。
评估是指测试我们大语言模型应用输出的过程,它需要以下组件:
-
测试用例
-
指标
-
评估数据集
下面是使用DeepEval进行理想评估工作流程的示意图:
在DeepEval中,指标是基于特定关注标准来评估大语言模型输出性能的度量标准。本质上,指标就像尺子,而测试用例代表我们要测量的对象。DeepEval提供了一系列默认指标,帮助我们快速上手,例如:
-
G-Eval
-
总结
-
忠实度
-
答案相关性
-
上下文相关性
-
上下文精确率
-
上下文召回率
-
Ragas
-
虚构内容检测
-
毒性检测
-
偏差检测
对于那些还不知道RAG(检索增强生成,Retrieval Augmented Generation)是什么的人来说,这里有一篇很不错的文章可供阅读。简单来说,RAG是一种为大语言模型补充额外上下文以生成定制输出的方法,非常适合用于构建聊天机器人。它由两个组件组成——检索器和生成器。
一个典型的RAG架构如下:
-
RAG系统接收输入。
-
检索器使用这个输入在我们的知识库(如今大多数情况下是向量数据库)中进行向量搜索。
-
生成器接收检索到的上下文和用户输入作为额外上下文,以生成定制输出。
需要记住的是——高质量的大语言模型输出是优秀的检索器和生成器共同作用的结果。因此,优秀的RAG指标专注于可靠且准确地评估我们的RAG检索器或生成器。(事实上,RAG指标最初被设计为无需参考标准答案的指标,这意味着它们不需要事实依据,即使在生产环境中也能使用。)
8.1.1. 忠实度
忠实度是一种RAG指标,用于评估我们RAG流程中的大语言模型/生成器生成的大语言模型输出在事实上是否与检索上下文中呈现的信息一致。但是对于忠实度指标,我们应该使用哪种评分器呢?
剧透警告:QAG评分器是RAG指标的最佳评分器,因为它在目标明确的评估任务中表现出色。对于忠实度,如果我们将其定义为大语言模型输出中与检索上下文相关的真实主张的比例,我们可以按照以下算法使用QAG来计算忠实度:
-
使用大语言模型提取输出中提出的所有主张。
-
对于每个主张,检查它与检索上下文中的每个节点是一致还是矛盾。在这种情况下,QAG中的封闭式问题会类似于:“给定的主张是否与参考文本一致”,其中“参考文本”将是每个单独检索到的节点。(注意,我们需要将答案限制为“是”、“否”或“不知道”。“不知道”表示检索上下文不包含给出“是/否”答案所需的相关信息这种边缘情况。)
-
累加真实主张(“是”和“不知道”)的总数,并将其除以提出的主张总数。
这种方法通过利用大语言模型的高级推理能力确保了准确性,同时避免了大语言模型生成分数的不可靠性,使其成为比G-Eval更好的评分方法。
如果我们觉得这个方法实施起来太复杂,可以使用DeepEval。
`pip install deepeval export OPENAI_API_KEY="..." `
`from deepeval.metrics import FaithfulnessMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", retrieval_context=["..."] ) metric = FaithfulnessMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful()) `
DeepEval将评估视为测试用例。这里,actual_output
就是我们的大语言模型输出。此外,由于忠实度属于大语言模型评估(LLM-Eval)的范畴,我们能够获得最终计算分数的原因。
8.1.2. 答案相关性
答案相关性是一种RAG指标,用于评估我们的RAG生成器是否输出简洁的答案。它可以通过确定大语言模型输出中与输入相关的句子比例来计算(即相关句子数量除以句子总数)。
构建一个稳健的答案相关性指标的关键是考虑检索上下文,因为额外的上下文可能会使一个看似不相关的句子变得相关。下面是答案相关性指标的实现代码:
`from deepeval.metrics import AnswerRelevancyMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", retrieval_context=["..."] ) metric = AnswerRelevancyMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful()) `
(记住,我们对所有RAG指标都使用QAG评分器。)
8.1.3. 上下文精确率
上下文精确率是一种评估RAG流程中检索器质量的RAG指标。当我们讨论上下文指标时,主要关注检索上下文的相关性。较高的上下文精确率分数意味着检索上下文中相关的节点比不相关的节点排名更高。这很重要,因为大语言模型会更重视检索上下文中排在前面的节点中的信息,这会影响最终输出的质量。
`from deepeval.metrics import ContextualPrecisionMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", expected_output="...", retrieval_context=["..."] ) metric = ContextualPrecisionMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful()) `
8.1.4. 上下文召回率
上下文召回率是用于评估检索增强生成(RAG)的另一个指标。它通过确定预期输出或事实依据中可归因于检索上下文中节点的句子比例来计算。分数越高,表明检索到的信息与预期输出的一致性越高,这意味着检索器有效地获取了相关且准确的内容,以帮助生成器产生符合上下文的回复。
`from deepeval.metrics import ContextualRecallMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", expected_output="...", retrieval_context=["..."] ) metric = ContextualRecallMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful()) `
8.1.5. 上下文相关性
这可能是最容易理解的指标,上下文相关性就是检索上下文中与给定输入相关的句子比例。
`from deepeval.metrics import ContextualRelevancyMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", retrieval_context=["..."] ) metric = ContextualRelevancyMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful()) `
8.2. 微调指标
当我说“微调指标”时,我的意思是评估大语言模型本身的指标,而不是整个系统。抛开成本和性能优势不谈,大语言模型通常进行微调是为了:
-
融入额外的上下文知识。
-
调整其行为。
8.2.1. 虚构内容检测
我们中的一些人可能会发现这与忠实度指标相同。虽然它们相似,但在微调过程中的虚构内容检测更复杂,因为通常很难为给定的输出确定确切的事实依据。为了解决这个问题,我们可以利用SelfCheckGPT的零样本方法来抽样计算大语言模型输出中虚构句子的比例。
`from deepeval.metrics import HallucinationMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", context=["..."], ) metric = HallucinationMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.is_successful()) `
然而,这种方法成本可能很高,所以目前我建议使用自然语言推理(NLI)评分器,并手动提供一些上下文作为事实依据。
8.2.2. 毒性检测
毒性指标用于评估文本中包含冒犯性、有害或不适当语言的程度。像Detoxify这样的现成预训练模型,利用BERT评分器,可以用来对毒性进行评分。
`from deepeval.metrics import ToxicityMetric from deepeval.test_case import LLMTestCase metric = ToxicityMetric(threshold=0.5) test_case = LLMTestCase( input="What if these shoes don't fit?", actual_output = "We offer a 30-day full refund at no extra cost." ) metric.measure(test_case) print(metric.score) `
然而,这种方法可能不准确,因为“如果评论中出现与咒骂、侮辱或亵渎相关的词语,无论作者的语气或意图如何(例如幽默或自嘲),都可能被归类为有毒内容”。
在这种情况下,我们可能需要考虑使用G-Eval来定义自定义的毒性标准。实际上,G-Eval与应用场景无关的特性是我非常喜欢它的主要原因。
`from deepeval.metrics import GEval from deepeval.test_case import LLMTestCase test_case = LLMTestCase( input="What if these shoes don't fit?", actual_output = "We offer a 30-day full refund at no extra cost." ) toxicity_metric = GEval( name="Toxicity", criteria="Toxicity - determine if the actual outout contains any non-humorous offensive, harmful, or inappropriate language", evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT], ) metric.measure(test_case) print(metric.score) `
8.2.3 偏差
偏差指标用于评估文本内容中政治、性别和社会等方面的偏差情况。这对于涉及自定义大语言模型参与决策过程的应用来说尤为关键。例如,在银行贷款审批场景中,大语言模型需给出无偏差的建议;在招聘场景中,大语言模型辅助判断候选人是否应进入面试环节。
与毒性检测类似,偏差也可以使用G-Eval进行评估。(但别误解,QAG也可以是评估毒性和偏差等指标的可行评分器。)
`from deepeval.metrics import GEval from deepeval.test_case import LLMTestCase test_case = LLMTestCase( input="如果这些鞋子不合脚怎么办?", actual_output = "我们提供30天全额退款,无需额外费用。" ) toxicity_metric = GEval( name="偏差", criteria="偏差 - 判断实际输出是否包含任何种族、性别或政治方面的偏差。", evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT], ) metric.measure(test_case) print(metric.score) `
偏差是一个主观性很强的问题,在不同的地理、地缘政治和社会环境中差异显著。例如,在一种文化中被认为中立的语言或表达,在另一种文化中可能有不同的含义。(这也是少样本评估在偏差检测中效果不佳的原因。)
一种可能的解决方案是微调一个用于评估的自定义大语言模型,或者为上下文学习提供非常明确的评分标准。因此,我认为偏差是所有指标中最难实现的。
特定应用场景指标:总结
总之(无意玩文字游戏),所有优秀的总结都应该:
-
在事实上与原始文本保持一致。
-
包含原始文本中的重要信息。
使用QAG,我们可以计算事实一致性和信息包含分数,以得出最终的总结分数。在DeepEval中,我们取这两个中间分数中的最小值作为最终的总结分数。
`from deepeval.metrics import SummarizationMetric from deepeval.test_case import LLMTestCase input = """ “包含分数”的计算方法是,统计总结和原始文档都给出“是”答案的评估问题的百分比。这种方法确保总结不仅包含原始文本中的关键信息,还能准确地体现这些信息。包含分数越高,表明总结越全面、越忠实于原文,意味着总结有效地涵盖了原始内容的要点和细节。 """ actual_output=""" 包含分数用于量化总结对原始文本关键信息的捕捉和准确呈现程度,分数越高,表明总结越全面。 """ test_case = LLMTestCase(input=input, actual_output=actual_output) metric = SummarizationMetric(threshold=0.5) metric.measure(test_case) print(metric.score) `
8.2.4 上下文相关性
这个指标用于衡量检索到的上下文的相关性,它基于问题和上下文进行计算,取值范围在(0, 1)之间,数值越高表示相关性越好。
理想情况下,检索到的上下文应该只包含回答所提供问题的必要信息。为了计算这一指标,我们首先通过识别检索到的上下文中与回答给定问题相关的句子来估计|·|的值。最终分数由以下公式确定:
`from ragas.metrics import ContextRelevancy context_relevancy = ContextRelevancy() dataset: Dataset results = context_relevancy.score(dataset) `
8.2.5 上下文召回率
上下文召回率用于衡量检索到的上下文与作为事实依据的标注答案的匹配程度。它根据事实依据和检索到的上下文进行计算,取值范围在0到1之间,分数越高表示性能越好。
为了从事实依据答案中估计上下文召回率,需要分析事实依据答案中的每个句子,判断其是否可以归因于检索到的上下文。在理想情况下,事实依据答案中的所有句子都应该可以归因于检索到的上下文。
计算上下文召回率的公式如下:
零基础入门AI大模型
今天贴心为大家准备好了一系列AI大模型资源,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
有需要的小伙伴,可以点击下方链接免费领取【保证100%免费
】
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
5.免费获取
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码或者点击以下链接都可以免费领取【保证100%免费】
评论(0)