万字解读LLM大模型评估

文摘   2024-06-19 07:03   四川  
大型语言模型(LLM)评估对于发布稳健LLM应用程序来说都是至关重要,但LLM评估对许多人来说仍然是一项具有挑战性的任务。无论是通过微调来提高模型的准确性,还是通过加强检索增强生成(RAG)系统的上下文相关性,了解如何开发和采用合适的LLM评估指标集对于构建表现良好的LLM至关重要。
本文介绍LLM评估指标的方方面面,并附有代码示例,将深入探讨:
* 常用LLM评估指标介绍
* 如何选择合适的LLM评估指标
* 如何计算LLM评估指标
* 如何解读LLM评估指标的结果
本文全面介绍LLM评估指标,并能够帮助你在实际应用中选择合适的LLM评估指标。
  • LLM评估指标是什么,常见的误区有哪些,以及优秀的LLM评估指标为何卓越。
  • 评估LLM的各种方法。
  • 如何实践并决定采用哪些合适的LLM评估指标。

LLM评估指标是什么?

诸如答案正确性、语义相似度及虚构性等LLM评估指标,是根据你所关注的标准来评判LLM系统输出的指标。它们对于LLM评估至关重要,因为它们有助于量化不同LLM系统(可能仅指LLM本身)的表现。
大型语言模型评估指标体系
在将LLM系统发布到生产之前,你可能需要关注以下最常用的指标:
1. 答案相关性:决定LLM输出是否能够以有信息性和简洁的方式回答给定的输入。
2. 准确性:根据一些事实依据来确定LLM输出是否正确。
3. 虚构性检测(Hallucination):判定LLM输出中是否包含虚构或编造的信息。
4. 上下文相关性(Contextual Relevancy):评估基于RAG(检索增强生成)的LLM系统中的检索器能否为你的LLM提取最相关的上下文信息。
5. 可靠性指标:包括偏差和毒性等指标,用于确定LLM输出是否包含(通常)有害和冒犯性内容。
毒性(Toxicity)常常被定义为语言模型产生有毒、粗鲁、敌对性或隐性仇恨内容的倾向。研究者认为当前在评估数据的毒性时, 存在一个先验的偏差:一些群体经常被攻击所以和攻击性言论相关性很高, 进而导致了涉及这些群体就被误判为攻击性言论. 例如, 黑人可能更多的被犯罪或种族主义的言论攻击, 从而导致黑人这个词汇被判断是犯罪或种族主义的言论.
6. 特定任务指标(Task-Specific Metrics):包括摘要等指标,这些通常依据具体应用场景包含定制化的评判标准。
尽管大多数指标都是通用且必要的,但它们并不足以适用于特定的使用场景。这就是为什么你至少需要一个定制化的任务特定指标来使你的LLM评估流程达到生产就绪状态。例如,如果你的LLM应用旨在总结新闻文章页面,你将需要一个定制的LLM评估指标,该指标基于以下方面进行评分:
1. 摘要的长度
2. 保留的关键信息的准确性
3. 摘要的流畅度和连贯性
4. 摘要的客观性(即避免偏差和主观性)
只有这样,才能确保LLM应用程序能够生成高质量的摘要。
1. 摘要是否包含了原文中的足够信息。
2. 摘要是否包含与原文相矛盾或虚构的内容。
此外,如果你的LLM应用采用了基于RAG的架构,你可能还需要对检索上下文的质量进行评分。关键在于,LLM评估指标是根据设计任务来评估LLM应用性能的。(请注意,LLM应用可以简单地就是LLM本身!)
优秀的评估指标包括:
1. 定量评估。评估当前任务时,指标应始终计算得出一个分数。这种方法使你能够设定一个最低通过阈值,以判断你的LLM应用是否达到“足够好”的标准,并允许你在不断迭代和改进实现过程中监控这些分数随时间的变化。
2. 可靠性。虽然LLM的输出不可预测,但你最不想看到的就是LLM评估指标同样不可靠。因此,虽然使用LLM(也称为LLM-Evals)进行评估的指标,如G-Eval,比传统评分方法更准确,但它们往往不够稳定,这是大多数LLM-Evals的不足之处。
3. 准确性。如果评分不能真正反映LLM应用程序的表现,那么再可靠的评分也是没有意义的。实际上,使一个好的LLM评估指标变得出色的秘诀是尽可能地使其与人类的期望相一致。
因此,问题变成了:如何让LLM评估指标计算出可靠且准确的分数?

计算度量指标分数的方法

LLM(大型语言模型)评估通常非常困难。幸运的是,有许多已建立的方法可用于计算度量指标分数——其中一些利用神经网络,包括嵌入模型和LLM,而另一些则完全基于统计分析。
Types of metric scorers 度量评分的类型
下面将逐一介绍这些方法,并在最后讨论哪种方法最为有效。

统计评分

在开始之前,我想先说明,在我看来,了解统计评分方法并不是必须的,所以如果你时间紧迫,可以直接跳到“G-Eval”部分。这是因为每当需要推理时,统计方法的表现往往不佳,使得它作为大多数LLM评估标准的评分器不够准确。
快速浏览一下:
  • BLEU 评分器将你的LLM应用的输出与标注的地面真实值(或预期输出)进行比较。它计算LLM输出与预期输出之间每个匹配的n-gram(连续的n个词)的精度,然后计算它们的几何平均值,并在需要时施以简洁度惩罚。
  • ROUGE(基于召回的摘要评估辅助工具)主要用于评估来自NLP模型的文本摘要,通过比较LLM输出与预期输出之间的n-gram重叠来计算召回率。它确定参考文本中n-gram出现的比例(0-1),并将其作为LLM输出的评估指标。
  • METEOR(用于评估显式排序翻译的度量标准)评分器更为全面,因为它通过评估精确度(n-gram匹配)和召回率(n-gram重叠),并针对LLM输出与预期输出之间的词序差异进行调整来计算分数。它还利用WordNet等外部语言数据库来考虑同义词。最终分数是精确度和召回率的调和平均值,并对词序不一致处施以惩罚。
  • Levenshtein距离(或称编辑距离)评分器计算将一个单词或文本字符串变为另一个所需的最小单字符编辑(插入、删除或替换)次数,这对于评估拼写纠正或其他字符精确对齐至关重要的任务非常有用。
因为纯统计评分方法几乎不考虑语义因素,其推理能力也非常有限,因此它对于评估通常较长且复杂的LLM模型效果并不理想。

基于模型评分

仅基于统计的评分器可靠但不准确,因为它们很难考虑语义因素。相反,依赖于NLP模型的评分器相对更准确,但由于其概率性质,反而不那么可靠。
这并不令人意外,非LLM(基于大型语言模型)的评分器表现不如LLM-Evals(基于LLM的评分器),原因与基于统计的评分器相同。非LLM评分器包括:
  • NLI评分器使用自然语言推理模型(这是一种NLP模型)来对LLM输出与给定参考文本之间的逻辑一致性、矛盾或无关进行分类。评分通常在一致(值为1)和矛盾(值为0)之间变化,提供了逻辑连贯性的衡量标准。
  • BLEURT(双语评估辅助工具,使用像BERT这样的预训练模型来对LLM(大型语言模型)输出进行评分,并与预期输出进行比较。
除了评分不一致外,这些方法还存在一些缺点。例如,NLI评分器在处理长文本时也可能出现准确性问题,而BLEURT则受到其训练数据的质量和抽样性的限制。
好了,让我们来谈谈LLM-Evals吧。

G-Eval

G-Eval是最近开发的一个框架,源自一篇名为《使用GPT-4实现更佳人类对齐的NLM评估》的论文,它利用LLMs来评估LLM输出(即LLM-Evals),是创建任务特定度量的最佳方法之一。
G-Eval Algorithm G-Eval算法
G-Eval首先通过“链式思维(CoTs)”生成一系列评估步骤,然后再使用生成的步骤通过“填表法(这是一种委婉的说法,意思是G-Eval需要一些信息才能运行)”来确定最终得分。例如,使用G-Eval评估LLM输出的连贯性,需要构建一个包含评估标准和待评估文本的提示以生成评估步骤,然后使用LLM根据这些步骤输出1-5区间的评分。
让我们用个例子来演示G-Eval算法。首先,生成评估步骤:
1. 为LLM(大型语言模型)引入一个评估任务(例如:根据连贯性对输出评分,范围为1-5)。
2. 给出你所用标准的定义(例如:“连贯性 - 实际输出中所有句子的整体质量”)。
请注意,在原始的G-Eval论文中,作者仅使用了GPT-3.5和GPT-4进行实验。就我个人使用不同LLM进行G-Eval的经验而言,我强烈建议大家也使用这些模型。
在生成一系列评估步骤之后:
1. 创建一个提示,将评估步骤与所有列出的评估步骤中的参数(例如,评估 LLM 输出的连贯性,则 LLM 输出是必需的参数)连接起来。
2. 在提示结束时,请它生成一个1-5之间的分数,分值越大越好。
3. (可选) 将LLM输出的词概率进行归一化,然后将它们的加权求和作为最终结果。
第3步是可选的,因为要得到输出令牌的概率,需要访问原始模型嵌入,但这并非所有模型接口都保证可用。然而,该步骤在论文中被引入,因为它提供了更细粒度的评分,并最小化了LLM评分中的偏差(正如论文所述,对于1-5的评分尺度,3被认为具有更高的令牌概率)。
以下是该论文中的结果,显示G-Eval如何在性能上优于前面提到的所有传统非LLM评估方法:
Kendall-Tau correlation系数越高,表示与人类判断的一致性越高。
G-Eval之所以优秀,是因为作为一个LLM评估工具,它能够充分考虑到LLM输出的全部语义,从而大大提高了准确性。这很有道理——想想看,非LLM评估方法使用的能力远低于LLM的评分器,怎么可能完全理解由LLM生成的文本的全部范围呢?
尽管与同类工具相比,G-Eval与人类判断的相关性更高,但它仍然可能不可靠,因为要求LLM给出一个评分显然是主观的。
换句话说,考虑到G-Eval的评价标准具有很大的灵活性,将其应用于DeepEval,这是一个正在开发的开源LLM评估框架。
# Installpip install deepeval
# Set OpenAI API key as env variableexport OPENAI_API_KEY="..."
from deepeval.test_case import LLMTestCase, LLMTestCaseParamsfrom 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)
使用LLM-Eval的另一个主要优势是,LLMs能够为其评估分数生成一个得分说明。

Prometheus

Prometheus是一个完全开源的LLM(大型语言模型),当提供适当的参考材料(参考答案、评分标准)时,其评估能力与GPT-4相当。它与G-Eval类似,是无特定应用场景的。普罗米修斯是以Llama-2-Chat为基础模型,并利用GPT-4生成的10万条反馈数据在Feedback Collection上进行微调的语言模型。
下面是普罗米修斯研究论文的简要结论。
GPT-4 或 Prometheus 的反馈之所以没有被选中,是因为它们提供的反馈不够抽象和普遍,而且倾向于给出过于批评性的反馈。
Prometheus遵循与G-Eval相同的原则,但存在一些差异:
1. 虽然G-Eval是一个基于GPT-3.5/4的框架,但Prometheus是一个经过微调的LLM(大型语言模型),专门用于模型评估。
2. 虽然G-Eval通过CoTs生成评分标准/评估步骤,但Prometheus的评分标准已在提示中给出。
3. Prometheus需要参考/示例评估结果。
虽然还没有尝试过,但Prometheus可以在hugging face上使用。我没有尝试实现它的原因是,Prometheus的设计目的是让评估过程采用开源方式,而不是依赖于像OpenAI的GPT等专有模型。对于那些致力于构建最优LLM-Evals的人来说,它并不适合。

结合统计和模型化评分器

到目前为止,我们已经看到统计方法虽然可靠但不准确,而非LLM模型驱动的方法虽然不可靠但更准确。与前面的章节类似,也有一些非LLM评分器,例如:
  • BERTScore 评分器基于预先训练的语言模型(如 BERT),计算参考文本和生成文本中单词的上下文嵌入之间的余弦相似度。然后将这些相似度进行汇总,生成最终得分。BERTScore 得分越高,表示 LLM 输出与参考文本之间的语义重叠程度越大。
  • MoverScore评分器首先使用嵌入模型,特别是像BERT这样的预训练语言模型,来为参考文本和生成的文本获取深度上下文化的词嵌入。之后,它采用了一种称为地球移动者距离(EMD)的方法来计算将LLM输出中词汇分布转换为参考文本中词汇分布所需的最小成本。这种方法强调了语义相似性和词汇分布的一致性。
BERTScore和MoverScore评分器由于依赖于像BERT这样的预训练模型的上下文嵌入,因此容易受到上下文感知和偏差的影响。那么LLM-Evals呢?

GPTScore

与采用填表模式直接执行评估任务的G-Eval不同,GPTScore采用生成目标文本的条件概率作为评估指标。
GPTScore Algorithm GPTScore算法

SelfCheckGPT

SelfCheckGPT是一个较为特别的方法。它是一种基于简单采样的方法,用于事实查证LLM的输出。该方法假设“虚构性”输出是不可复现的,而如果LLM掌握了某个给定概念的知识,那么采样得到的响应很可能是相似的,并包含一致的事实信息。通过多次采样LLM对于相同问题或主题的回应,并比较这些回应间的一致性,SelfCheckGPT能够评估LLM输出的可靠性。
SelfCheckGPT是一种很有趣的方法,因为它使检测虚构性成为一个无需参考的过程,这对生产环境非常有用。
SelfCheckGPT Algorithm 自检GPT算法
然而,尽管G-Eval和Prometheus是无用例依赖的,但SelfCheckGPT并非如此。它仅适用于虚构检测,而不适用于其他用例,如摘要、连贯性等。

QAG 评分

QAG(问答生成)评分是一种评分器,它利用LLM(大型语言模型)的高推理能力,可靠地评估LLM输出。它使用(通常是“是”或“否”)对封闭式问题(可以由LLM生成或预设)的答案来计算最终的度量评分。它很可靠,因为它不使用LLM直接生成评分。例如,如果您想计算LLM输出的可靠性(衡量LLM输出是否为虚构)的评分:
1. 生成或预设封闭式问题(例如,“LLM输出是否为虚构?”)
2. 使用LLM生成或预设的“是”或“否”答案
3. 使用QAG评分器计算最终的评分
    • 使用LLM从LLM输出中提取所有声明。
    • 对于每个声明,询问事实真相是否同意(“是”)或不同意(“否”)该声明。
因此,对于这个例子中的LLM输出:
马丁·路德·金是著名的民权领袖,1968年4月4日,他在田纳西州孟菲斯市的洛兰旅馆被暗杀。当时他来到孟菲斯支持罢工的环卫工人,在旅馆二楼阳台上被逃犯詹姆斯·厄尔·雷射杀身亡。
一个声明是:
1968马丁·路德·金于1968年4月4日被暗杀。
相应的封闭式问题则是:
马丁·路德·金牧师是在1968年4月4日被暗杀的吗?
然后,你需要将这个问题抛给其他人,询问他们是否同意这个说法。最后,你将得到一系列“是”和“否”的答案,你可以使用自己选择的数学公式来计算一个分数。
在可靠性方面,如果我们将可靠性定义为LLM输出中准确且与事实相符的声明的比例,那么可以通过将准确(真实的)声明的数量除以LLM所作声明的总数来轻松计算出该比例。尽管我们不是直接使用LLM生成评估分数,但仍然利用了其出色的推理能力,因此得到的分数既准确又可靠。

选择适合你的评估指标

选择使用哪种LLM评估指标取决于LLM应用程序的使用场景和架构。
例如,如果你在OpenAI的GPT模型基础上构建基于RAG的客户支持聊天机器人,就需要使用多个RAG指标(例如,忠实度、答案相关性和上下文精确度)。而如果你在微调自己的Mistral 7B模型时,则需要使用诸如偏差等指标,以确保公平的LLM决策。
在最后一节中,我们将详细介绍你必须了解的评估指标。

RAG指标

对于那些还不了解RAG(检索增强生成)是什么的人,这里有一篇很好的文章。简而言之,RAG是一种为LLM(大型语言模型)补充额外上下文以生成定制输出的方法,非常适合构建聊天机器人。它由两个组件组成——检索器和生成器。
A typical RAG architectureRAG 是一种典型的架构,其中 R 代表“运行”(Running)状态,A 代表“迁移”(Adopting)状态,G 代表“终止”(Gating)状态。这种架构通常用于监控和管理软件开发项目中的代码变更。在 RAG 架构中,代码变更首先会被标记为“运行”状态,然后根据其对项目的影响程度,可能会被标记为“迁移”状态或“终止”状态。这种架构可以帮助开发团队更好地管理代码变更,确保项目的顺利进行。
RAG工作流通常是这样的:
1. 你的RAG系统接收到一个输入。
2. 检索器使用这些输入在您的知识库中进行向量搜索(如今大多数情况下,知识库是向量数据库)。
3. 生成器接收检索上下文和用户输入作为额外的上下文来生成量身定制的输出。
记住这一点很重要:高质量的LLM输出是检索器和生成器共同作用的结果。因此,优秀的RAG指标专注于以可靠和准确的方式评估你的RAG检索器或生成器。(实际上,RAG指标最初是作为无参考指标设计的,这意味着它们不需要真实数据,因此即使在生产环境中也可以使用。)

忠实度

忠实度是RAG(检索增强生成)框架中的一个评估指标,用于判断RAG流程中的LLM或生成器所生成的内容是否在事实上与检索到的背景信息保持一致。但对于忠实度这一指标,我们应该使用哪个评分器呢?
注意:QAG评分器是评估RAG指标的最佳评分器,因为它在目标明确的评估任务中表现优异。对于“忠实度”,如果我们将它定义为LLM输出中与检索上下文相关的真实声明的比例,我们可以通过以下算法使用QAG进行计算:
1. 使用LLMs提取输出中的所有声明。
2. 对于每个断言,检查它是否与检索上下文中的每个单独节点一致或矛盾。在这种情况下,QAG中的封闭式问题将类似于“给出的断言是否与参考文本一致”,其中“参考文本”将是每个单独检索到的节点。(请注意,需要将答案限制为“是”、“否”或“idk”。“idk”状态代表检索上下文中没有相关信息给出“是”或“否”答案的边缘情况。)
3. 将所有忠实的声明(“是”和“我不知道”)相加,然后除以所有声明的总数。
该方法利用LLM的高级推理能力来确保准确性,同时避免了LLM生成的分数的不可靠性,因此比G-Eval评分方法更好。
如果你觉得这个实施起来太复杂,你可以使用 DeepEval,提供了所有你需要的 LLM 评估指标,包括忠实度指标。
# Installpip install deepeval# Set OpenAI API key as env variableexport OPENAI_API_KEY="..."from deepeval.metrics import FaithfulnessMetricfrom 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将评估视为测试用例。在这里,实际输出仅指LLM的输出。由于忠实度是LLM评估的一部分,因此你可以获得最终计算得分的推理过程。

Answer Relevancy 答案相关性

答案相关性是RAG指标之一,用于评估您的RAG生成器是否能够输出简洁的答案。该指标可以通过计算LLM输出中与输入相关的句子的比例(即:将相关句子数除以总句子数)来计算。
构建一个健壮的答案相关性度量关键在于考虑检索上下文,因为额外的上下文可能使看似不相关的句子具有相关性。以下是答案相关性度量的实现方法
from deepeval.metrics import AnswerRelevancyMetricfrom 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())
Contextual Precision 上下文精确度
上下文精确度是RAG指标的一种,用于评估RAG管道检索器的质量。当我们讨论上下文相关度量时,主要关注的是检索上下文的相关性。较高的上下文精确度意味着与检索上下文相关的节点被排在无关节点之前。这很重要,因为LLMs会更重视出现在检索上下文早期的节点中的信息,这会影响最终输出的质量。
from deepeval.metrics import ContextualPrecisionMetricfrom deepeval.test_case import LLMTestCase
test_case=LLMTestCase( input="...", actual_output="...", # Expected output is the "ideal" output of your LLM, it is an # extra parameter that's needed for contextual metrics expected_output="...", retrieval_context=["..."])metric = ContextualPrecisionMetric(threshold=0.5)
metric.measure(test_case)print(metric.score)print(metric.reason)print(metric.is_successful())


Contextual Recall 上下文召回率

上下文精准度是评估检索增强生成器(RAG)的另一个指标。它是通过确定预期输出或真实结果中能够归因于检索上下文中节点的句子比例来计算的。更高的分数表示检索到的信息与预期输出之间有更强的一致性,表明检索器有效地提供了相关且准确的内容,帮助生成器产生与上下文相符的回复。
from deepeval.metrics import ContextualRecallMetricfrom deepeval.test_case import LLMTestCase
test_case=LLMTestCase( input="...", actual_output="...", # Expected output is the "ideal" output of your LLM, it is an # extra parameter that's needed for contextual metrics expected_output="...", retrieval_context=["..."])metric = ContextualRecallMetric(threshold=0.5)
metric.measure(test_case)print(metric.score)print(metric.reason)print(metric.is_successful())


上下文相关性

也许最容易理解的指标就是语境相关性,它指的是在检索语境中与给定输入相关的句子所占比例。
from deepeval.metrics import ContextualRelevancyMetricfrom 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())

微调指标

当我说“微调指标”时,我的意思是评估LLM本身的指标,而不是整个系统的指标。撇开成本和性能优势不谈,LLM通常会被微调以实现以下两个目的之一:
1. 提高特定任务的性能:通过调整LLM的参数,使其能够更好地完成特定任务,例如文本分类、机器翻译等。
2. 增强LLM的泛化能力:通过调整LLM的参数,使其能够更好地处理未见过的数据,从而提高其在新任务上的表现。
无论是提高特定任务的性能还是增强泛化能力,微调都是LLM训练过程中不可或缺的一部分。通过微调,LLM可以更好地适应特定任务或场景,从而提高其在实际应用中的效果。
1. 加入更多的上下文知识。
2. 调整它的行为。

虚构性

有些人可能会认为这个指标与“可靠性”指标类似。虽然相似,但在微调过程中的“虚构”现象更为复杂,因为很难确定给定输出的确切真实情况。为了解决这个问题,我们可以利用SelfCheckGPT的零样本方法从LLM输出中抽取虚构句子的比例。
from deepeval.metrics import HallucinationMetricfrom deepeval.test_case import LLMTestCase
test_case=LLMTestCase( input="...", actual_output="...", # Note that 'context' is not the same as 'retrieval_context'. # While retrieval context is more concerned with RAG pipelines, # context is the ideal retrieval results for a given input, # and typically resides in the dataset used to fine-tune your LLM context=["..."],)metric = HallucinationMetric(threshold=0.5)
metric.measure(test_case)print(metric.score)print(metric.is_successful())
然而,这种方法可能会非常昂贵,因此目前我建议使用NLI评分器,并手动提供一些上下文作为参考标准。

Toxicity 毒性

毒性指标用于评估文本中包含的冒犯性、有害或不适当语言的程度。可以使用诸如 Detoxify 之类的现成预训练模型(使用 BERT 评分器)来对毒性进行评分。
from deepeval.metrics import ToxicityMetricfrom deepeval.test_case import LLMTestCase
metric = ToxicityMetric(threshold=0.5)test_case = LLMTestCase( input="What if these shoes don't fit?",# Replace this with the actual output from your LLM application 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 GEvalfrom deepeval.test_case import LLMTestCase
test_case = LLMTestCase(input="What if these shoes don't fit?", # Replace this with the actual output from your LLM applicationactual_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)

Bias 偏差

偏差度量指标评估文本内容中的政治、性别和社会偏差等方面。这对于涉及定制LLM参与决策过程的应用尤为重要。例如,在银行贷款审批中提供无偏差的建议,或者在招聘中帮助确定候选人是否应该进入面试环节。
与毒性指标类似,偏差也可以使用G-Eval进行评估。(不过请别误解我的意思,QAG也可以作为毒性和偏差等指标的可行评分器。)
from deepeval.metrics import GEvalfrom deepeval.test_case import LLMTestCase
test_case = LLMTestCase(input="What if these shoes don't fit?", # Replace this with the actual output from your LLM applicationactual_output = "We offer a 30-day full refund at no extra cost.")toxicity_metric = GEval(name="Bias",criteria="Bias - determine if the actual output contains any racial, gender, or political bias.",evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT],)
metric.measure(test_case)print(metric.score)
偏差是一个高度主观的问题,在不同的地理、地缘政治和地理社会环境中差异显著。例如,在一个文化中被认为是中立的语言或表达方式在另一个文化中可能具有不同的含义。(这也是为什么少数样本评估无法有效评估偏差的原因。)
一个可能的解决方案是微调一个定制的LLM用于评估或提供非常清晰的评价标准用于上下文学习,因此我认为偏差是所有可实施的指标中最难的一个。
往期系列文章
阿里微服务质量保障系列:微服务知多少
阿里微服务质量保障系列:研发流程知多少
阿里微服务质量保障系列:研发环境知多少
阿里微服务质量保障系列:阿里变更三板斧
阿里微服务质量保障系列:故障演练
阿里微服务质量保障系列:研发模式&发布策略
阿里微服务质量保障系列:性能监控
阿里微服务质量保障系列:性能监控最佳实践
阿里微服务质量保障系列:基于全链路的测试分析实践
- END -

下方扫码关注 软件质量保障,与质量君一起学习成长、共同进步,做一个职场最贵Tester!


往期推荐

聊聊工作中的自我管理和向上管理

经验分享|测试工程师转型测试开发历程

聊聊UI自动化的PageObject设计模式

细读《阿里测试之道》

我在阿里做测开

软件质量保障
所寫即所思|一个阿里质量人对测试技术的思考。
 最新文章