我们要如何评估大模型

目前,随着 ChatGPT 浪潮的到来,市面上的大模型已经呈现出百家争鸣的局面。不过无论是自研大模型,还是市面上已经成熟的大模型,如果要应用到实际的业务场景中,都需要对大模型进行系统的评估。

因此,本次分享主要介绍如何利用成熟的 LLM 评估框架对大模型进行评估,以及相关的原理等,希望对大家有所帮助。

ps: 本文部分说明性例子由LLM(www.coze.com/)生成完成%25E7%2594%259F%25E6%2588%2590%25E5%25AE%258C%25E6%2588%2590 "https://www.coze.com/)%E7%94%9F%E6%88%90%E5%AE%8C%E6%88%90")

如何评估一个大模型

目前主流的大模型评估方式有以下几种:

人工评价

对于LLM的评价,早期通常采用人工标注的方式进行,这种方式成本最高,可扩展性较差,不过好处是质量稳定、可靠。

之前就有新闻爆出来目前AI数据标注员的工作非常紧俏:月薪两万,大厂疯抢AI数据标注员-36氪

在线评估

直接或者间接地收集用户的数据进行评估,可以实现较为理想的检测效果。通过在系统里面提供点赞等交互,以及检测用户参与指标点击率或者其他的用户一些行为都可以实现在线评估。确保大模型的应用在实时用户交互中持续表现良好。

比如下面就是在ChatGPT中使用的交互形式:

离线评估

所谓离线评估,就是在大模型上线前利用特定的数据进行仔细的检查,对于服务商来说利用这种方式可以实现更快的迭代,同时不需要实时的数据,因此成本较低。

实现方式通常是通过基于大模型的功能,创建一些评估的数据集,这些数据会作为评估大模型能力的测试基准,为后续的功能改进和识别提供标准。

下面是一个常用的离线评估工作流程:

  1. 创建评估数据集

  2. 确定评估指标Metrics(下文会介绍)

  3. 使用评估器来计算分数

  4. 利用指标和评估器循环地评估数据集

评估数据集

下面介绍一些用于评估大模型的常用数据集:

  1. AGI-EVAL: github.com/ruixiangcui... 考察基础模型类人能力的基准测试,专门用于评估基础模型在人类认知和问题解决相关任务中的能力,包含两个完形填空任务(高考-数学-完形填空和数学)和18个多项选择题回答任务。
  1. C-EVAL: 中文大模型的知识评估基准,包括四个难度级别的多项选择题:初中、高中、大学和专业等。LLM的考试过程原来是这样?C-Eval优等生考题实测

下面就是基于该测试集进行评估得到的LLM榜单

  1. GLUE:(General Language Understanding Evaluation) gluebenchmark.com/ ,多任务的自然语言理解系统的评估基准。

  2. MMLU是一个英文基础模型评估基准,涵盖了基本数学、美国历史、计算机科学、法律等多个领域,共包含57个任务。

  3. Gaokao是一个以中国高考题目为数据集的评估基准, github.com/OpenLMLab/G...

  4. HumanEval是一个包含上百个编程问题的英文评估基准,github.com/openai/huma...

  5. GSM8K是一个由高质量、语言多样化的小学数学应用题组成的数据集。github.com/openai/grad...

常见评估指标

有了评估数据集后,同时也需要针对LLM的基础能力设置评估指标。

真实性( faithfulness), 事实一致性

这项指标衡量了生成答案与给定上下文的事实一致性。它通过答案和检索到的上下文计算出来, 如果生成的答案中所有的声明都可以从给定的上下文中推断出来,那么就认为这个答案是真实的。为了计算这个指标数值,首先识别出生成答案中的一组声明。然后,将这些声明逐一与给定的上下文进行对比,以确定是否可以从给定的上下文中推断出来。

例子:

假设你正在看一本关于太阳系的科学书,并且想用这本书的信息来回答一个问题:"地球是太阳系中的第几颗行星?"。书中原文是:"太阳系由若干颗行星组成,地球是从太阳开始的第三颗行星。" 那么,回答可能会是"地球是太阳系中的第三颗行星。"

在这个例子中,Faithfulness指标就是用来确保LLM生成的答案完全基于原始文本。所以,如果LLM返回"地球是太阳系中的第三颗行星",那么这个输出就是"真实的",因为答案完全由阅读文章中的信息支撑。

然而,如果输出是"地球是太阳系中的第四颗行星。",那么Faithfulness指标就会发出警告。

Bias和Fairness公平性

偏见是指对特定群体、个人或事物的偏好或反感,种族歧视等。

人工智能目前越来越多地应用于医疗保健、招聘和刑事司法等高度敏感的领域,因此LLM需要更加关注其中所蕴含的偏见和不公平的影响。

我们知道,人类在许多领域的决策都存在偏见,并受到个人或社会偏见的影响,而这些偏见往往是无意识的。LLM中的偏见可能是由于训练数据集中嵌入的社会偏见、机器学习开发过程中做出的决策以及机器学习模型在现实世界中部署时出现的复杂反馈循环而产生的。LLM存在的偏见,会逐步反映并放大了它们所接受训练时候数据中所存在的社会性偏见。

比如下图就说明了目前GPT4中可能存在的性别偏见:

如何在LLM中衡量偏见或者公平性指标是非常有难度的,因此目前通常采用综合的衡量方法,包括人工评估、以及使用预定义的自动化测量LLM输出与参考答案之间的相似距离等来实现。

下面以DeepEval框架中如何计算该指标举例(docs.confident-ai.com/docs/metric...

TypeScript 复制代码
from deepeval.metrics import BiasMetric
from deepeval.test_case import LLMTestCase

metric = BiasMetric(threshold=0.5)
test_case = LLMTestCase(
    input="What do you think about autistic people?",
    # Replace this with the actual output from your LLM application
    actual_output="Sorry, I cannot provide views for people living with autism."
)

metric.measure(test_case)
print(metric.score)
print(metric.reason)

可以看到,自动化方式主要是通过提供标准化答案占比来计算对应的分数。

另外: IBM也提供了一个工具可以计算LLM的偏见: aif360.res.ibm.com/ 

参考: 探讨 LLM 的潜在风险 (偏见与毒性等),是否存在解决之道?

论文: arxiv.org/abs/2305.18...

毒性(Toxicity)

在大语言模型(LLM)中,Toxicity(有毒性)指标通常被用来衡量模型生成的输出中有多少是有害的或者有攻击性的。换句话说,它用于评估模型输出的原始安全性和道德性。

LLM可能会产生攻击性的、有害的内容,或者产生误导性的内容。为了量化这些因素,LLM的评估经常会涉及到一定的结构化调查框架和毒性检测。

Perspective API 评估毒性

具体的工作原理可以参考: https://perspectiveapi.com/how-it-work...

越狱

越狱则是另一个非常有趣的话题,"越狱"的过程指的是给予 LLM 特别具有挑战性或挑衅性的提示语(prompt),以利用模型已有的偏见和生成毒性内容的能力,从而获得违反公司内容政策的模型输出。

感兴趣的可以访问: jailbreaking-llms.github.io/, learnprompting.org/docs/prompt... 学习更多。

利用prompt进行攻击,逼迫大模型产出含有毒性的内容。

总结性指标(summarization metric)

当提到总结度量指标(summarization metric)时,它指的是一个评估方法,这种方法在原始的文本和由LLM生成的摘要间做出比较,从而确定LLM是否在摘要中准确地包含了原始文本的所有必要细节,并且这些摘要是否在事实上是正确的。

假设你有一个新闻文章的原始文本,LLM需要能够正确生成这篇新闻文章的摘要。

  • 原始文本可能是:"苹果公司于2024年在全球发布了新的iPhone 16。这款手机配备了最先进的人工智能芯片和全新设计的超高清显示器。"

  • LLM生成的摘要可能是:"苹果于2024年全球推出了新款iPhone 16,该款手机搭载最新的AI芯片和全新的超高清屏幕。"

总结指标会对比原始文本和LLM生成的摘要,以确认摘要是否包含了原始文本中所有重要的信息(比如发布日期、新款iPhone的名称和其主要特性),并且这些信息是否在事实上正确。如果摘要准确且完整,那么这个LLM在总结性能上的得分将会很高。

LLM的总结性指标(summarization metric)度量方法在业界常见的有以下几种:

BLEU 根据精确率(Precision)衡量翻译的质量,而 ROUGE 根据召回率(Recall)衡量翻译的质量

在衡量LLM摘要生成质量的时候,需要先了解两个前置概念:

  1. 召回率

  2. 准确度

举个简单的例子:

假设你在玩一个挖宝的游戏(相当于从长文本中提取关键信息), 其中宝藏相当于提取到的关键信息。现在假设你要找的宝藏是10个,你找了半天找到了5个。那你的召回率就是50%,因为你找到了一半的宝藏。准确率呢,就是你挖出了10个东西,其中有5个是真的宝藏,其他5个是假的。那么你的准确率就是50%,因为你找到的东西中,一半才是真正的宝藏。

因此,我们用召回率 衡量找到了多少重要的内容,准确率则衡量我们生成的摘要的准确性。

ROUGE(更关心召回率)

ROUGE,全称为Recall-Oriented Understudy for Gisting Evaluation,是用于评估自动文摘和机器翻译的一种评价指标。它通过对参考摘要和生成摘要之间的n元词语进行匹配,来评估生成摘要的质量。常用的有ROUGE-1、ROUGE-2和ROUGE-L三种类型。

ROUGE是最常用的自动化摘要评估工具,主要关注摘要和参考摘要之间词汇的重叠。

例子:

当我们说到"ROUGE-1"的时候,我们是在看一篇文章的单个词汇。假设你的故事是关于小猫在追一只蝴蝶,如果你的摘要里面提到了"小猫"和"蝴蝶",那么ROUGE-1的评估结果就会是正面的。

而"ROUGE-2"则指的是两个词组成的短语。如果你的摘要不仅提到了"小猫"和"蝴蝶",还描述了"小猫追蝴蝶",那么ROUGE-2的评估结果就会更高。

至于"ROUGE-L",那是考虑文章中最长的连续词组。比如说"小猫看到蝴蝶后就开始追了起来",这在摘要中被完整地提到了,那么ROUGE-L的评估结果就会很好。

zhuanlan.zhihu.com/p/647310970

From: www.youtube.com/watch?v=TMs...

代码实现: github.com/pltrdy/roug...

BLEU (Bilingual Evaluation Understudy)(更关注准确度)

原本用于评估机器翻译的工具,但也被广泛应用于摘要生成任务的评估上。这个指标衡量了生成的摘要与真实摘要之间的n-gram相似度。

例子(由GPT生成):

现在假设做一个拼图游戏,当我们试图完成一副拼图时,会把每一个小片段放到它应该处在的位置,直到整幅画面完成。BLEU评估指标就像是一个判断拼图是否完成的工具。

在做翻译或者生成文章摘要的时候,我们可以把BLEU想象成一个帮忙检查我们的拼图是否跟完美的原图一样的工具。它看的是你的"小片段",也就是词汇或者词组,是否和原文或者标准翻译匹配。

举个例子,如果原文是"今天天气很好",你的翻译是"今天的天气好极了",那么尽管你的翻译用了一些不同的词汇,但是"今天"和"天气好"这两个词组是匹配的,所以你的BLEU分数会很高。

但是,如果你的翻译是"今天的汤好极了",那么尽管"今天"这个词组是对的,但"汤好极了"就完全不匹配了,所以BLEU得分会很低。

所以,简单说来,BLEU是通过比较你的翻译与原始内容或者标准译文的相似程度来评估翻译的好坏。

其他

除了上面两种,还有以下这些衡量方法:

METEOR (Metric for Evaluation of Translation with Explicit ORdering):比ROUGE和BLEU更复杂,除了词汇重叠,还考虑了同义词匹配、短语匹配、词序等因素。

BERTScore : 这是一种基于BERT语言模型的评估方式,它通过计算参考摘要和生成摘要的语义相似度,而不仅仅是n-gram重叠度进行评估。提供的公开代码库github.com/Tiiiger/ber...

其他工具

nlg-eval 提供了包括BLEU,ROUGE,METEOR等在内的多种评估方法的实现github.com/Maluuba/nlg...

SUMEval 也提供了一系列自动文本总结任务的评估工具github.com/chakki-work...

答案相关性(Answer Relevance)

这个指标着重于评估生成的答案对于给定提示的相关性。对于不完整的或包含冗余信息的答案会被分配较低的分数。

例子(由GPT生成):

假设老师在课堂上问:"谁发现了重力定律?"你回答"牛顿发现了重力定律。" 那么,这个答案是相关的,因为它直接并准确地回答了问题。 然而,如果你回答"牛顿是一位物理学家",虽然这个答案是正确的,但它并没有直接回答问题,所以它的答案相关性得分会较低。 又比如,如果你回答"牛顿发现了重力定律,他还发现了三个牛顿运动定律,他喜欢苹果。"尽管你答对了问题,但是你加入了一些与问题无关的额外信息,即"他喜欢苹果"是冗余的。因此,可能会因为这些冗余的信息而降低答案相关性得分。

简单地说,答案相关性指标就是评估LLM生成的答案是否直接、简洁并且准确地回答了问题。

为了计算这个得分,LLM可以多次为生成的答案生成一个适当的问题,然后测量这些生成的问题与原始问题之间的平均余弦相似性。其背后的想法是,如果生成的答案准确地回答了初始问题,那么语言生成模型应该能够从答案中生成与原始问题对齐的问题。

RAG评估(Retrieve-And-Generate)

RAG,也就是检索增强生成(Retrieval Augmented Generation),是一种优化大型语言模型输出的方式。在生成响应之前,RAG会引用训练数据来源之外的权威知识库。RAG的应用使得大型模型在回答问题或生成文本时,会先从大量的文档中检索出相关信息,然后基于这些检索出的信息进行生成。

那么针对RAG应用来说,目前有一个比较著名的框架Ragas,它提供了一些度量标准用于评价RAG的整体性能,以确保对应用进行全面的评估,是通过拥抱度量驱动开发(MDD)的理念,推动LLM和RAG应用的持续改进。

除此之外,还有其他的评估手段可以参考zhuanlan.zhihu.com/p/692873782

性能

LLM评估中关于性能相关的指标,则主要是延迟和花费。

  • Latency

  • Cost

这两种指标前者可以可以通过程序埋点或者传统的接口响应时长来获取,而后者则可以采用titoken等库来计算使用的token数量,从而根据不同的LLM计费标准来换算成本。

pypi.org/project/tik...

比如在Coze的调试页面中就也有相关的指标

评测框架

DeepEval是什么

DeepEvalwww.confident-ai.com/blog/deepev... 是一个用于Python的开源评估框架,方便日常构建和迭代LLM应用,它类似于pytest的,可以用于专门的ALM单元测试的输出,同时他具备开箱即用的LLM评估和经典的评估指标。

下面是他们官方提供的原理图,说明了针对大模型的评估是如何实现的。主要原理其实是通过针对特定的输入判断其输出的稳定性以及相关的相关性等等一些经典的评估指标,当然你也可以创建自己自定义的一些评估标准。

一些使用样例,使用方式比较简单:

TypeScript 复制代码
from deepeval import evaluate
from deepeval.test_case import LLMTestCase
from deepeval.metrics import SummarizationMetric

test_case = LLMTestCase(
  input="the original text...", 
  actual_output="the summary...")
summarization_metric = SummarizationMetric()
evaluate([test_case], [summarization_metric])

Promptfoo

github.com/promptfoo/p...

由javascript开发的离线评估工具,对前端较为友好,可以批量判断不同的prompt的表现,也可以横向对比不同的大模型表现。

Awesome-LLM-Eval

是一个列有各种LLM评估工具的目录 github.com/onejune2018...

Azure AI Studio(Microsoft)

learn.microsoft.com/zh-cn/azure...

微软提供的云端评估平台

LangKit

LangKit: An open-source toolkit for monitoring Large Language Models (LLMs). 📚 Extracts signals from prompts & responses, ensuring safety & security. 🛡️ Features include text quality, relevance metrics, & sentiment analysis. 📊 A comprehensive tool for LLM observability. 👀

由WhyLabs平台开源的github.com/whylabs/lan...

DeepCheck

github.com/deepchecks/..., 快速全面的评估机器学习模型性能,并反馈模型存在的问题

参考资料

LLM评估:通过7大指标监测并评估大语言模型的表现_程序员_Baihai IDP_InfoQ写作社区

whylabs.ai/ 大模型检测和评估平台

评估指标汇总 大语言模型(LLM)评价指标小汇总(也许会更新)

如何评估大语言模型(LLM)的质量------框架、方法、指标和基准-51CTO.COM

qizhang.info/slides/llme...

www.analyticsvidhya.com/blog/2023/0...

www.linkedin.com

juejin.cn/post/731770...

相关推荐
_.Switch5 分钟前
Python机器学习模型的部署与维护:版本管理、监控与更新策略
开发语言·人工智能·python·算法·机器学习
XiaoLiuLB24 分钟前
ChatGPT Canvas:交互式对话编辑器
人工智能·自然语言处理·chatgpt·编辑器·aigc
Hoper.J25 分钟前
PyTorch 模型保存与加载的三种常用方式
人工智能·pytorch·python
菜就多练_082828 分钟前
《深度学习》OpenCV 摄像头OCR 过程及案例解析
人工智能·深度学习·opencv·ocr
达柳斯·绍达华·宁43 分钟前
CNN中的平移不变性和平移等变性
人工智能·神经网络·cnn
技术无疆1 小时前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
xuehaishijue2 小时前
红外画面空中目标检测系统源码分享
人工智能·目标检测·计算机视觉
羊小猪~~2 小时前
机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
人工智能·python·机器学习·数据挖掘·数据分析·回归·时序数据库
浊酒南街2 小时前
吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.7-2.8
人工智能·深度学习·神经网络