LLMs NLP模型评估Model evaluation ROUGE and BLEU SCORE
在整个课程中,你看到过类似模型在这个任务上表现良好,或者这个微调模型在性能上相对于基础模型有显著提升等陈述。
这些陈述是什么意思?如何形式化你的微调模型在你起初的预训练模型上的性能改进?让我们探讨一些由大型语言模型开发者使用的指标,你可以用这些指标评估你自己的模型的性能,并与世界上的其他模型进行比较。
在传统的机器学习中,你可以通过观察模型在已知输出的训练和验证数据集上的表现来评估模型的表现。
你可以计算诸如准确率这样的简单指标,准确率表示所有预测中正确的比例,因为模型是确定性的。
但是在大型语言模型中,输出是非确定性的,基于语言的评估要困难得多。
以句子为例,Mike really loves drinking tea. 这句话与 Mike adores sipping tea. 相似。但是如何衡量相似性呢?
让我们看看另外两个句子:Mike does not drink coffee. 和 Mike does drink coffee. 这两个句子之间只有一个词的差异,但含义完全不同。
对于像我们这样具有有机软脑的人类来说,我们可以看出相似之处和不同之处。但当你在数百万个句子上训练模型时,你需要一种自动化的结构化方法来进行测量。
ROUGE和BLEU是两个广泛使用的用于不同任务的评估指标。ROUGE代表Recall Oriented Under Generated summaries Evaluation回忆定向自动摘要评估,主要用于通过将自动生成的摘要与人工生成的参考摘要进行比较来评估其质量。
另一方面,BLEU代表Billingual Evaluation双语评估研究,是一种用于评估机器翻译文本质量的算法,同样是通过将其与人工生成的翻译进行比较来评估的。
现在,单词BLEU是法语中的“蓝色”。你可能听到人们称之为“蓝色”,但我将坚持使用原始的BLEU。
在开始计算指标之前,让我们先复习一些术语。在语言的解剖学中,一个unigram等同于一个单词。一个bigram是两个单词,n-gram是n个单词的组合。
非常简单的东西。首先,让我们看一下ROUGE-1指标。
为此,让我们看一个人工生成的参考句子:It is cold outside 和一个生成的输出:very cold outside。
你可以执行类似于其他机器学习任务的简单度量计算,使用召回率、精确率和F1。
召回率指标测量了参考和生成输出之间匹配的单词或unigram数量,除以参考中的单词或unigram数量。在这种情况下,完全匹配的单词得分为1,因为所有生成的单词都与参考中的单词匹配。
精确率测量了unigram匹配除以输出大小。
F1分数是这两个值的调和平均。
这些都是非常基本的指标,只关注单个单词,因此名称中有“1”,并且不考虑单词的顺序。它可能具有误导性。生成得分高但主观上可能较差的句子是完全可能的。
暂停片刻,想象一下,如果模型生成的句子只是多了一个单词,而不是 “It is not cold outside.”,得分将是相同的。
通过考虑一次从参考和生成句子中获取两个词的bigram或两个词的组合,你能够计算ROUGE-2。
现在,你可以使用bigram匹配来计算召回率、精确率和F1分数,而不是使用单个单词。你会注意到分数比ROUGE-1分数要低。
在较长的句子中,bigram不匹配的可能性更大,分数可能更低。
与继续计算ROUGE分数的n-gram增大到三个或四个不同,让我们采取不同的方法。
相反,你将寻找在生成输出和参考输出中都存在的最长公共子序列。在这种情况下,最长匹配子序列是 “it is” 和 “cold outside”,每个子序列的长度都为2。
现在,你可以使用LCS值来计算召回率、精确率和F1分数,其中召回率和精确率计算中的分子都是最长公共子序列的长度,即2。总体上,这三个量被称为Rouge-L分数。与所有ROUGE分数一样,你需要将值放在上下文中进行解释。
只有在为相同的任务确定了分数时,你才能使用这些分数来比较模型的能力。
例如,摘要任务。不同任务的Rouge分数不能相互比较。
正如你所见,简单的Rouge分数的一个特定问题是,不好的完成可能会得到很好的分数。
例如,考虑以下生成的输出:cold, cold, cold, cold。由于这个生成的输出包含了参考句子中的一个单词,它的分数会相当高,即使同一个单词多次重复。
Rouge-1精确率分数将是完美的。
你可以通过使用剪辑函数来解决这个问题,将unigram匹配的数量限制为参考中该unigram的最大计数。
在这种情况下,参考中出现了一个 “cold”,因此在带有unigram匹配剪辑的修改精确率下,分数大幅降低。
然而,如果生成的单词都存在,但顺序不同,你仍然会面临挑战。
例如,对于这个生成的句子:“outside cold it is.”,即使在带有剪辑函数的修改精确率下,这个句子仍然是完美的,因为在参考中的所有单词和生成的输出都存在。
虽然使用不同的ROUGE分数可以帮助解决这个问题,但选择一个计算最有用分数的n-gram大小将取决于句子、句子大小和你的用例。
需要注意的是,许多语言模型库(例如,Hugging Face,你在第一周的实验中使用过)都包含了Rouge分数的实现,你可以用它来轻松评估模型的输出。
在本周的实验中,你将有机会尝试使用Rouge分数,并将其用于比较模型在微调前后的性能。
评估模型性能的另一个有用分数是BLEU分数,它代表双语评估研究。提醒一下,BLEU分数对于评估机器翻译文本的质量非常有用。
该分数本身是通过多个n-gram大小的平均精确率来计算的,就像我们之前看过的Rouge-1分数一样,但是计算的是一系列n-gram大小,并进行平均。
让我们更详细地看看这个指标的测量方法以及如何计算。
BLEU分数通过检查机器生成的翻译中有多少个n-gram与参考翻译中的n-gram相匹配来量化翻译质量。
为了计算分数,你需要在一系列不同的n-gram大小上计算平均精确率。如果你手动计算,你将进行多次计算,然后将所有结果平均,以找到BLEU分数。
在这个示例中,让我们看一个较长的句子,以便更好地了解分数的值。
人类提供的参考句子是:“I am very happy to say that I am drinking a warm cup of tea.”。现在,由于你已经深入研究了这些单独的计算,我将使用标准库展示BLEU的结果。
使用来自Hugging Face等提供商的预编写库来计算BLEU分数非常简单,我已经为我们的每个候选句子计算了BLEU分数。
第一个候选句子是:“I am very happy that I am drinking a cup of tea.”,BLEU分数为0.495。
随着我们越来越接近原始句子,得分也越来越接近1。
无论如何,Rouge和BLEU都是相当简单的指标,并且计算成本相对较低。
你可以在迭代模型时使用它们进行简单的参考,但不应仅凭此来报告大型语言模型的最终评估。
对于摘要任务,使用Rouge进行诊断性评估,对于翻译任务,使用BLEU。
然而,为了全面评估模型的性能,你需要查看研究人员开发的评估基准之一。在下一个视频中,让我们更详细地看看其中一些。
参考
https://www.coursera.org/learn/generative-ai-with-llms/lecture/8Wvg3/model-evaluation
相关文章:

LLMs NLP模型评估Model evaluation ROUGE and BLEU SCORE
在整个课程中,你看到过类似模型在这个任务上表现良好,或者这个微调模型在性能上相对于基础模型有显著提升等陈述。 这些陈述是什么意思?如何形式化你的微调模型在你起初的预训练模型上的性能改进?让我们探讨一些由大型语言模型开…...

BlazorServer中C#与JavaScript的相互调用
BlazorServer中C#与JavaScript的相互调用 前言: 虽然BlazorServer中推荐使用C#在razor页面中的替代JavaScript来完成逻辑的编写,但当需要使用第三方的javascript文件/组件里的内容时,则难免要在C#中调用其方法或对象。反之当你的(用到第…...
深入理解 MD5 消息摘要算法和在密码存储中的应用及安全隐患
MD5 算法相信很多开发人员都听说过, 一个最常见的使用到它的地方就是密码的存储. 当然, 很多人会说, 这个算法已经不太安全了, 确实如果你想更安全的保存密码, 则应该考虑其它更安全的算法, 不过这不属于此次讨论的主题. 什么是 MD5 MD5 是一种算法, MD5 中的 MD 代表 Message…...

python网络爬虫指南二:多线程网络爬虫、动态内容爬取(待续)
文章目录 一、多线程网络爬虫1.1 线程的基础内容、GIL1.2 创建线程的两种方式1.3 threading.Thread类1.4 线程常用方法和锁机制1.5 生产者-消费者模式1.5.1 生产者-消费者模式简介1.5.2 Condition 类协调线程 1.6 线程中的安全队列1.6 多线程爬取王者荣耀壁纸1.6.1 网页分析1.6…...
华为AirEgine9700S AC配置示例
Vlan97为管理Vlan <AirEgine9700S>dis cu Software Version V200R021C00SPC100 #sysname AirEgine9700S #http timeout 60http secure-server ssl-policy default_policyhttp secure-server server-source -i allhttp server enable #set np rss hash-mode 5-tuple # md…...
VUE3基础
一、vue-router v4.x 介绍 | Vue Router 1、安装 yarn add vue-routernext next代表最新的版本 2、路由配置 在src目录下,新建router/index.ts,具体配置如下 import {RouteRecordRaw,createRouter,createWebHashHistory} from vue-router const r…...

Qt应用开发(基础篇)——日历 QCalendarWidget
一、前言 QCalendarWidget类继承于QWidget,是Qt设计用来让用户更直观的选择日期的窗口部件。 时间微调输入框 QCalendarWidget根据年份和月份初始化,程序员也通过提供公共函数去改变他们,默认日期为当前的系统时间,用户通过鼠标和…...

Python学习笔记:正则表达式、逻辑运算符、lamda、二叉树遍历规则、类的判断
1.正则表达式如何写? 序号实例说明1.匹配任何字符(除换行符以外)2\d等效于[0-9],匹配数字3\D等效于[^0-9],匹配非数字4\s等效于[\t\r\n\f],匹配空格字符5\S等效于[^\t\r\n\f],匹配非空格字符6\w等效于[A-Za-z0-9]&…...

【滑动窗口】leetcode1004:最大连续1的个数
一.题目描述 最大连续1的个数 这道题要我们找最大连续1的个数,看到“连续”二字,我们要想到滑动窗口的方法。滑动窗口的研究对象是一个连续的区间,这个区间需要满足某个条件。那么本题要找的是怎样的区间呢?是一个通过翻转0后得到…...

力扣:73. 矩阵置零(Python3)
题目: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 - 全球极客挚…...
VB|基础语法 变量定义 函数定义 循环语句 IF判断语句等
文章目录 变量定义函数定义控制台输入输出switch case语句IF语句FOR循环语句不等于逻辑运算符 变量定义 int Dim 变量名 As Int32 0 string Dim 变量名 As String "" bool Dim 变量名 As Boolean False 枚举 Dim 变量名 As 枚举名 数组 Dim array(256) As String…...
Github 博客搭建
Github 博客搭建 准备工作 准备一个 github 账号;建立 github 仓库,仓库名为 username.github.io,同时设置仓库为 public;clone 仓库,写入一个 index.html 文件,推送到仓库(许多网上的教程会有…...
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
文章目录 网络搜索介绍步骤参数代码实现 网络搜索 介绍 网格搜索(Grid Search)是一种超参数优化方法,用于选择最佳的模型超参数组合。在机器学习中,超参数是在训练模型之前设置的参数,无法通过模型学习得到。网格搜索…...

创建型模式-建造者模式
使用多个简单的对象一步一步构建成一个复杂的对象 主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部…...

Rust常用加密算法
哈希运算(以Sha256为例) main.rs: use crypto::digest::Digest;use crypto::sha2::Sha256;fn main() { let input "dashen"; let mut sha Sha256::new(); sha.input_str(input); println!("{}", sha.result_str());} Cargo.toml: [package]n…...

[管理与领导-55]:IT基层管理者 - 扩展技能 - 1 - 时间管理 -2- 自律与自身作则,管理者管好自己时间的五步法
前言: 管理好自己的时间,不仅仅是理念,也是方法和流程。 步骤1:理清各种待办事项 当提到工作事项时,这通常指的是要完成或处理的工作任务或事务。这些事项可以包括以下内容: 任务分配:根据工作…...
电子商务员考试题库及答案(中级)--判断题
电子商务员题库 一、判断题 1.EDI就是按照商定的协议,将商业文件分类,并通过计算机网络,在贸易伙伴的计算机网络系统之间进行数据交换和自动处理。〔〕 2.相互通信的EDI的用户必须使用相同类型的计算机。〔 〕 3.EDI采用共同…...

(WAF)Web应用程序防火墙介绍
(WAF)Web应用程序防火墙介绍 1. WAF概述 Web应用程序防火墙(WAF)是一种关键的网络安全解决方案,用于保护Web应用程序免受各种网络攻击和威胁。随着互联网的不断发展,Web应用程序变得越来越复杂&#x…...
SpringMVC拦截器常见应用场景
在Spring MVC中,拦截器是通过实现HandlerInterceptor接口来定义的。该接口包含了三个方法: preHandle:在请求到达处理器之前执行,可以进行一些预处理操作。如果返回false,则请求将被拦截,不再继续执行后续的…...

爬虫:绕过5秒盾Cloudflare和DDoS-GUARD
本文章仅供技术研究参考,勿做它用! 5秒盾的特点 <title>Just a moment...</title> 返回的页面中不是目标数据,而是包含上面的代码:Just a moment... 或者第一次打开网页的时候: 这几个特征就是被Cloud…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...