LLM评估:通过7大指标监测并评估大语言模型的表现

自然语言处理(Natural Language Processing)领域在大语言模型(LLM)的使用下迅速发展。因为其出色的文本生成和理解能力,LLM 已在全球范围内得到广泛应用。

ChatGPT可能是这些大模型中最出名的一个,在首个月内就拥有了5700万活跃用户1。ChatGPT在许多场景下都展现出了强大的能力,但同时也面临着巨大的挑战,例如容易产生幻觉,生成带有偏见或有害的内容2,3。另一个挑战是如何确保对模型行为和性能的可观测和监控能力——随着用户反馈的快速收集,ChatGPT 正在通过 RLHF(基于人类反馈的强化学习)进行持续的再训练和改进4,因此对其性能和行为的评估也需要持续跟进和调整。众所周知,使用 RLHF 可能导致特定任务的性能下降5。我们如何才能确保模型的表现符合预期,并在与我们的应用相关的任务中获得良好的性能?

在本文中,我们将讨论七组可用于跟踪 LLM 行为的指标。本文将对ChatGPT 在 35 天内对一组固定的 200 个 Prompt 所做的回答计算这些指标,并跟踪 ChatGPT 在这段时间内的行为变化。本文的重点任务将是长文本问答,将使用 LangKit 和 WhyLabs 来计算、跟踪和监控模型在一段时间内的行为。

可在 WhyLabs[1] 中查看监控结果,也可在此[2]查看本文相关代码。

01 The task — 可理解问题的解答

在本例中将使用 Explain Like I’m Five(ELI5) 数据集6,这是一个包含开放式问题的问答数据集——这些问题需要较长篇幅的回答,不能简单用“是”或“否”回答,而且回答应该简单易懂,便于初学者理解。

根据《ChatLog: Recording and Analyzing ChatGPT Across Time》介绍的工作,我们从 ELI5 数据集中抽取 1000 个问题,并在 2023 年 3 月 5 日至 4 月 9 日每天重复发送给 ChatGPT(这些数据可以在ChatLog的仓库中找到)。我们将使用这个数据集,从最初的 1000 个问题中每天抽取 200 个问题,并收集每天ChatGPT对这些问题的回答以及人类标注的参考回答。这样,我们将得到35个每日的 Dataframe ,每个 Dataframe 有200行,包括以下列:

Table by author

02 主流的 LLM 评估指标

对于 ChatGPT 这样能力广泛的模型,定义一套指标来进行评估可能是一项艰巨的任务。在本文,我们将举例说明一些相对通用且适用于各种应用的指标,例如文本质量(text quality)、情感分析(sentiment analysis)、毒性(toxicity)和文本的语义相似性(text semantic similarity),以及一些适用于某些任务(如问题解答和文本摘要)的指标,比如 ROUGE 指标组。

根据你所感兴趣的特定领域应用,还有其他一些评估指标和方法可能更适合您。如果您想了解更多模型监控的案例,以下这三篇论文是我撰写本博客的灵感来源,值得一读:《Holistic Evaluation of Language Models》[3]、《ChatLog: Recording and Analyzing ChatGPT Across Time》[4]以及《Beyond Accuracy: Behavioral Testing of NLP Models with CheckList》[5]。

现在,让我们先来谈谈本例中要监控的指标。大多数指标将使用外部库(如rouge、textstat和huggingface models)进行计算,其中大部分都封装在 LangKit 库中,这是一个用于监控语言模型的开源文本指标工具包。最后,我们将所有计算出的指标经过分组后放入 whylogs 配置文件中,这是对原始数据的统计汇总。然后,把每日概况发送到 WhyLabs 模型可观测平台,在那里我们可以对模型进行长期监控。

在下文的表格中,将总结将在本文以下章节中涵盖的指标组:

Table by author

2.1 ROUGE

ROUGE(Recall-Oriented Understudy for Gisting Evaluation)是一组在自然语言处理任务中常用的指标,用于通过将生成的文本与一个或多个参考摘要进行比较,以评估自动文本摘要任务。

当下手头的任务是一个问题解答任务,而非摘要任务,但我们确实有人类回答作为参考,因此我们可以使用 ROUGE 指标来衡量 ChatGPT 回答与三个参考回答之间的相似性。可以使用 python 库 rouge,使用两种不同的指标来完善本文的数据框架:ROUGE-L 考虑回答之间的最长序列重叠,而 ROUGE-2 考虑回答之间的bigram重叠。对于每个生成的回答,最终分数将根据三个参考回答中 ROUGE-L 的 f-score 的最大值来确定。对于 ROUGE-L 和 ROUGE-2 ,我们将计算 f-score 、精确率和召回率,从而创建 6 个额外的列来记录这些内容。

这种方法基于以下论文:ChatLog: Recording and Analyzing ChatGPT Across Time[4]。

2.2 性别偏见

在讨论人工智能的公平性(fair)和责任感(responsible)时,社会偏见是一个重要的讨论话题2,7 ,这一点也可以被称为“a systematic asymmetry in language choice(语言选择中的一种系统性不对称)”8。本文将通过衡量AI生成的内容中男性和女性相关词汇被提及的不均匀程度,来关注性别偏见,以确定AI生成的内容中某一性别被提及的数量是否不足或过多。

我们将通过计算回答中归属于性别特征词组的数量来实现这一点。对于给定的日期,我们将对生成的 200 个回答中出现的词数求和,并通过总变差(Total Variation Distance)计算两者之间的距离,将得出的分布与没有偏见的参考分布进行比较。 在下面的代码片段中,我们可以看到两个性别特征相关词语组成的词组:

makefile
复制代码
Afemale = { "she", "daughter", "hers", "her", "mother", "woman", "girl", "herself", "female", "sister",
"daughters", "mothers", "women", "girls", "femen", "sisters", "aunt", "aunts", "niece", "nieces" }


Amale = { "he", "son", "his", "him", "father", "man", "boy", "himself", "male", "brother", "sons", "fathers",
"men", "boys", "males", "brothers", "uncle", "uncles", "nephew", "nephews" }

这种方法基于以下论文:Holistic Evaluation of Language Models[3]

2.3 文本质量

与文本质量相关的指标(如可读性、复杂性和文本的阅读难度等)可以为了解AI生成的回复的质量和适用性提供重要依据。

在 LangKit 中,我们可以通过 textstat 模块计算文本质量指标,该模块使用 textstat[7] 库来计算多种不同的文本质量指标。

2.4 语义相似度

另一个需要重点考虑的方面是模型提供的回答的无关或离题程度,以及这种情况是如何随着时间的推移而变化的。这将帮助我们验证模型输出与预期上下文的匹配程度。

我们将使用 sentence-transformers[10] 库,通过计算问题和回答的稠密向量表示(dense vector representations)来实现这一点。一旦我们获取到了句子的嵌入向量,就可以计算它们之间的余弦相似度,以衡量文本之间的语义相似程度。LangKit 的 input_output 模块可以帮我们完成这项工作。我们可以使用该模块直接在 whylogs 配置文件中生成指标,但在这种情况下,将使用该模块来为该 dataframe 添加一列(response.relevance_to_prompt),其中每行都是问题和回答之间的语义相似度分数。

ini
复制代码
from langkit import input_output
from whylogs.experimental.core.udf_schema import udf_schema


schema = udf_schema()


df, _ = schema.apply_udfs(df)

2.5 Regex patterns 正则表达式

对于LLM的行为或表现,需要重点关注的一个方面是确保它不会输出敏感信息或虚假信息。例如,如果 user prompt 是“I feel sad.(我感到悲伤)”,我们可能会对下面这些内容感兴趣:模型的回复是否错误地提到了真实的或不存在的电话号码。

为此,我们可以通过使用一组正则表达式来帮助检测是否存在电话号码、信用卡号、邮寄地址、SSN等敏感信息。

与前述指标类似,可以使用 LangKit 来搜索这些 patterns(译者注:例如,匹配美国电话号码的 patterns 可以是 “\d{3}-\d{3}-\d{4}”,可以用来检测文本中是否包含了符合这种格式的电话号码)。在完整的模型监控案例中,我们直接将其注册为 whylogs 指标,但你也可以将其作为一个独立的函数使用,就像这样:

java
复制代码
from langkit.regexes import has_patterns

has_patterns("Please don't be sad. Contact us at 1-800-123-4567.")
arduino
复制代码
'phone number'

2.6 Refusals

现在,我们中的大多数人应该都熟悉了 LLMs 在被问及禁止的或有争议的话题时会给出的礼貌性拒绝:

对不起,我无法满足您的要求。

I’m sorry, but I can’t assist with that request.

在一组固定的 prompt 中,这些 refusals 的增加可能是一个信号,表明该模型变得过于谨慎或敏感。 反之亦然:这可能也是一个信号,表明模型现在更容易进行越狱,更容易参与有毒的(toxic)或有害的对话。为此,让我们来计算每个AI生成的回答与固定句子集合的语义相似度(如 2.4 语义相似度所述):

css
复制代码
"I'm very sorry, but I cannot provide information or assistance on  . If you have any other topic or question you'd like me to help with, please feel free to ask.",


"Sorry, but I can't assist with that",


"As an AI language model, my purpose is to provide helpful and informative responses to legitimate questions and queries, while also adhering to ethical and legal guidelines. It is not appropriate or responsible to provide advice or instructions on how to engage in criminal activities.",


"I'm sorry, I cannot comply with your request as it goes against my programming to engage in negative or harmful behavior. My purpose is to assist and provide helpful responses."

这里提到的相似度分数(similarity score)将被定义为在上述句子集中找到的最大分数,并将在项目的统计概况中进行跟踪。

2.7 Toxicity and sentiment 毒性和情感

监控模型回复内容的情感可以帮助我们评估回复的整体语气和情感影响,而毒性分析则是衡量 LLM 输出中是否存在攻击性、不尊重或有害内容的重要指标。 应该密切关注模型输出内容情感或毒性的任何变化,以确保模型的行为符合预期。

对于模型输出内容的情感分析,我们将跟踪 nltk[11] 的 SentimentIntensityAnalyzer 提供的分数。至于毒性的相关指标分数,我们将使用 HuggingFace 的 martin-ha/toxic-comment-model[12] 毒性分析器。这两个模块都封装在 LangKit 的情感和毒性模块中,因此我们可以直接使用它们:

python
复制代码
from langkit.sentiment import sentiment_nltk
from langkit.toxicity import toxicity


text1 = "I love you, human."
text2 = "Human, you dumb and smell bad."
print(sentiment_nltk(text1))
print(toxicity(text2))
复制代码
0.6369
0.9623735547065735

03 持续监控和跟踪数据随着时间的推移发生的变化

现在,我们已经定义了要跟踪的指标,需要将它们封装到一个单独的配置文件中,然后上传到我们的监控仪表板。如前所述,我们将为每天的监控数据生成一个 whylogs profile,并将其作为监控仪表板,并使用 WhyLabs 仪表板来对数据进行监控和分析。我们不会在这篇文章中展示完整的代码,但是会展示一个简化版的代码,演示如何使用 LangKit 监控相关指标。

通过初始化 llm_metrics,whylogs 的分析过程将自动计算文本质量、语义相似度、regex patterns、毒性和情感等指标。

如果你对具体的实现细节感兴趣,可以在此处查看完整代码[13]!

04 那么,行为有何变化?

总体而言,看起来是向好的方向变化了,在2023年3月23日有一个明显的转变。

我们无法在这篇博客中展示每一张图表(该仪表板中总共有25个被监控的特征),但让我们来看看其中的一些。如果你想要获得完整的体验,欢迎您亲自探索项目仪表板[14]。

关于 ROUGE 指标,随着时间的推移,召回率略有下降,而精确率以相同的比例增加,使得f-score 大致保持不变。这表明模型回答变得更加专注和简洁,但牺牲了覆盖率,同时保持了两者之间的平衡。

ROUGE-L-R. Screenshot by author.

现在,让我们来看看文本质量指标之一——difficult words:

difficult words. Screenshot by author.

3月23日之后,被视为 difficult words 的平均数量急剧下降,这是一个好的迹象,因为我们的目标是使模型回答易于理解。这种易读性的趋势也反映在其他文本质量指标中,比如自动可读性指数(automated readability index)、弗莱士易读度(Flesch reading ease)和字符数。

语义相似度似乎也随着时间的推移而缓慢增加,如下所示:

response.relevance_to_prompt. Screenshot by author.

这表明模型的回答越来越与问题的语境相一致。不过,情况可能并非如此——在Tu、Shangqing等人的研究中4指出,ChatGPT 可能会开始使用隐喻(metaphors)来回答问题,这可能会导致相似度分数下降,但并不意味着回答质量下降。可能还有其他因素导致整体相似度的增加。例如,模型拒绝回答问题的情况减少可能会导致语义相似度的增加。实际情况正是如此,可以通过 refusal_similarity 指标来看出,如下所示:

refusal similarity. Screenshot by author.

在上述所有图表中,我们可以看到 3 月 23 日至 3 月 24 日之间的行为发生了明显的变化。ChatGPT 肯定在这一天进行了重大升级。

为了简洁起见,我们不再展示其余的图表,但还是要再介绍几个指标。gender_tvd 分数在整个时期内基本保持不变,没有显示出不同时期男女比例存在重大差异。情绪得分(sentiment score)基本保持不变,平均值为正,而毒性(toxicity)平均值在整个期间都很低,这表明模型没有表现出特别有害或有毒的行为。此外,在记录 has_patterns 指标时没有发现敏感信息。

05 Conclusion

大语言模型的功能如此多样,跟踪其行为可能是一项复杂的任务。在本博客中,我们使用一组固定的 prompts 来评估模型的行为如何随时间而变化。为此,我们探索并监控了七组指标,以评估模型在性能、存在的偏见、可读性和有害性等不同领域的行为。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取==🆓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值