LLM (Large language model)的指标参数

1. 背景介绍

我们训练大模型的时候,或者我们用RAG的时候,不知道我们的算法,或者我们的提示,或者我们的本地知识库是否已经整理得符合要求了。又或我们需要一个指标去评估我们目前的所有围绕大模型,向量数据库或外挂知识库是否是向着好的方向进展的。所以,一个符合或者体现目前查询质量的指标很重要。本文会先介绍Rogue指标,并先以不宣传渐进式的方式的发布。

1.1 LLM 评估- 指标

1.1.1 Rouge适用场合
  • 用于文本摘要。
  • 将摘要和一个或多个摘要进行比较。
1.1.2 Bleu 适用场合
  • 用于文本翻译
  • 与人翻译的进行比较

1.2 LLM 评估 - 指标 - 术语

unigram: 单个词基本单位

bigram:两个连接的词,两个连接的基本单位

n-gram:n个连续连接的词,n个连续连接的基本单位

2. Rogue (Recall-Oriented Understudy for Gisting Evaluation)

2.1 Rogue-1

2.1.1 例子:
2.1.1.1 范例1

人工输出的句子:参考

外 面 是 冷

总共4个unigram。

机器输出的句子:实际,英文中有时称为Summary或candidate

外 面 真 是 冷

总共5个unigram

2.1.1.2 Recall

Recall 中文的含义是召回率。我们的下面表述中尽量包含英文的原词。

                                      

                                                      图1 Recall / 召回率

图1中: 单个单元/unigram 相匹配的个数,就是人输出的句子(参考)和机器输出的句子(实际)有4个基本单元/unigram是相同的,分别是 外,面,是,冷,4个unigram。参考的文本unigram的个数就是人输出的句子的unigram的个数,是4个。所以:该示例中,

  • 单个单元/unigram 相匹配的个数:就是人输出的句子(参考)和机器输出的句子(实际)的重复单元个数:4
  • 参考的文本 unigram的个数:就是人输出的句子的unigram 个数:4

                                

                                                                 图2 Recall / 召回率 的值

2.1.1.3 Precision

Precision 的中文翻译是精确率,我们在下述的表述中尽量包含英文的原词。

                                 

                                                            图 3 precision/精确绿

图3 中,

  • 单个单元/unigram 相匹配的个数:就是人输出的句子(参考)和机器输出的句子(实际)的重复单元个数:4
  • 实际的文本 unigram的个数:就是机器输出的句子的unigram 个数:5

所以,我们有:

                                           

                                                            图4 precision/精准率的值

2.1.1.4 F1

F1 又称为Rouge的调和平均值。调和平均值的大小在 0,和1之间。 我们在下文的表述中,尽量保持英文的原词。

调和平均值/F1的公式是如图5所示:

                                         

                                                           图5 F1/调和平均值的公式

我们根据本示例图2,图4,recall的值和precision的值,得出本示例F1的值:

                                        

                                                          图6 F1的值

2.1.2 Rouge-1 概括:

不管是Rouge-1,还是Rouge-2,还是Rouge- L,一般而言,F1,就是调和平均值越接近1,表面模型表现越好。但Rouge-1有时会带来误导。让我们看示例2:

2.1.2.1 范例2:

人工输出的句子 (参考)

外 面 是 冷。

总共4个unigram

机器输出的句子 (实际,英语或实例中称为Summary或candidate)

外 面 不 是 冷

总共5个unigram。

范例1和范例2中的参考例子,就是人输出的句子是完全一样的,但机器输出的句子只有一字之差,但意思完全两样,而recall,precision,F1值完全一样。所以,这个例子给出了Roue-1的不足之处。

2.2 Rouge-2

2.2.1 重复示例1中,

人工输出的句子:参考

外 面 是 冷

总共3个bigram (外 面)(面 是)(是 冷)

机器输出的句子:实际,英语或实例中称为Summary或candidate

外 面 真 是 冷

总共4个bigram (外 面)(面 真)(真 是)(是 冷)

bigram 相匹配的个数是 2 (外 面)(是 冷)

这样,我们根据公示,得出 recall(召回率),precision(精准率),F1(调和平均值)

                     

                                                          图 7 Rouge-2 指标

2.3 Rouge-L

那Rouge 1的指标有不足之处,我们看Rouge-L 指标,Rouge- L是指参考和实际输出中,最长的n个相同的基本单元(Longest common sequence),或者最长的n-gram的个数。

2.3.1 重复示例1中,

人工输出的句子:参考

外 面 是 冷

总共4个unigram

机器输出的句子:实际,英语或实例中称为Summary或candidate

外 面 真 是 冷

总共5个unigram

LCS 最长的n个相同的基本单元是:

(外 面)(是 冷),个数是2个。

这样根据公示,我们算出Recall(召回率),precision(精确率),F1的值(调和平均值):        

                                 

                                                  图8  Rouge-L 指标值

2.4 Rouge 概括

在大模型中,文本的长度一般是比较长的,实际测试中,Rouge-L 的F1值是更具有参考价值,越接近1,表面模型表现越好。

2.5 代码实例

from rouge_score import rouge_scorer# 创建Rouge评分器
scorer = rouge_scorer.RougeScorer(['rouge1', 'rougeL'], use_stemmer=True)# 定义参考摘要和生成摘要
reference = "The quick brown fox jumps over the lazy dog"
candidate = "The fast brown fox jumps over the lazy dog"# 计算Rouge分数
scores = scorer.score(reference, candidate)# 输出Rouge分数
print(scores)

3. Bleu (bilingual evaluation under study)

BLEU分数通过检查机器输出的翻译中有多少n-gram与人工(参考)输出的翻译中的匹配来量化翻译的质量。要计算分值,您需要计算一段区间的不同n-gram大小来计算平均精度。如果您要手动计算这个分值,您需要进行多次计算,然后将所有结果求平均,从而得到BLEU分值。一般我们都用库来计算BLEU分值。

3.1 代码实例

python
from nltk.translate.bleu_score import sentence_bleureference = [['this', 'is', 'small', 'test']]
candidate = ['this', 'is', 'a', 'test']score = sentence_bleu(reference, candidate, weights=(0.25, 0.25, 0.25, 0.25))
print(score)

reference 就是人工输出的句子或翻译,candidate是机器输出的翻译。

4. 其他

1. 有时,我们的业务场景不是摘要,或也不是用大模型进行翻译,比如我们现在要评估RAG性能,这时候,自己生成一套测试内容或问题,然后计算某一个Rouge值,比如精确度。最后,用SuperGlue的计算模式,进行量化。这个我们将在未来的博客中,再加以介绍。

5. 参考资料

[1]. coursera.org:Generative AI with large language model

沈建军 于韩国Tongyeong,2024年2月23日第一版,仅限于Rouge指标

沈建军 于韩国Tongyeong,2024年2月25日第二版,加入BLEU内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/264937.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【可实战】被测系统业务架构、系统架构、技术架构、数据流、业务逻辑分析

一、为什么要学习 更深的理解业务逻辑(公司是做什么的?它最重要的商务决策是什么?它里面的数据流是怎么做的?有哪些业务场景?考验你对这家公司、对所负责业务的熟悉程度。公司背后服务器用什么软件搭建的?…

高性能API云原生网关 APISIX安装与配置指南

Apache APISIX是Apache软件基金会下的顶级项目,由API7.ai开发并捐赠。它是一个高性能的云原生API网关,具有动态、实时等特点。 APISIX网关可作为所有业务的流量入口,为用户提供了丰富的功能,包括动态路由、动态上游、动态证书、A…

【C语言基础】:操作符详解(一)

文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…

神经网络系列---激活函数

文章目录 激活函数Sigmoid 激活函数Tanh激活函数ReLU激活函数Leaky ReLU激活函数Parametric ReLU激活函数 (自适应Leaky ReLU激活函数)ELU激活函数SeLU激活函数Softmax 激活函数Swish 激活函数Maxout激活函数Softplus激活函数 激活函数 一般来说&#xf…

Unity零基础到进阶 | Unity中的 RectTransformUtility 方法整理汇总

Unity零基础到进阶 ☀️| RectTransformUtility 方法整理汇总一、RectTransformUtility 官方文档1.1 RectTransformUtility.CalculateRelativeRectTransformBounds(重)1.2 RectTransformUtility.FlipLayoutAxes1.3 RectTransformUtility.FlipLayoutOnAxi…

python:xml.etree.ElementTree 读 Freeplane.mm文件,生成测试案例.csv文件

Freeplane 是一款基于 Java 的开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能,在 Freemind 上增加了一些额外的功能,比如数学公式、节点属性面板等。 强大的节点功能,不仅仅节点的种类很多&#xf…

XSS原理和攻防

Cross Site Scripting:跨站脚本攻击 用户提交的数据中可以构造恶意代码,并且执行,从而实现窃取用户信息等攻击 攻击: 防御: 1.对输入进行过滤,对输出进行编码 2.cookie设置http-only

Nest.js权限管理系统开发(八)jwt登录

安装相关依赖 虽然仅使用nestjs/jwt就能实现身份验证的功能,但是使用passport能在更高层次上提供更多便利。Passport 拥有丰富的 strategies 生态系统,实现了各种身份验证机制。虽然概念简单,但你可以选择的 Passport 策略集非常丰富且种类繁…

(HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕

一、电路接法 电路接法参照江科大视频。 二、相关代码及文件 说明:代码采用hal库,通过修改江科大代码实现。仅OLED.c文件关于引脚定义作了hal库修改,并将宏定义OLED_W_SCL(x)、OLED_W_SDA(x)作了相关修改。 1、OLED.c void OLED_I2C_Init(voi…

自动化行业文件数据\资料防泄密软件——天锐绿盾|@德人合科技

天锐绿盾是一款自动化行业文件数据防泄密软件,由德人合科技提供。该软件采用动态加解密技术,能够有效防止公司内部数据泄密,同时支持各种文件格式加密,如CAD、OFFICE、PDF、图纸等。 PC端:https://isite.baidu.com/sit…

项目管理工具git

git 1. git介绍1.1. 版本控制系统 2. 创建本地版本库2.1 概念2.2 操作步骤 3. 修改文件4. 练习: 添加一个本地项目到仓库5. 添加远程仓库5.1 添加远程仓库5.2 本地仓库同步到远程仓库5.3 克隆远程仓库到本地5.4 SSH设置 6. 分支管理6.1 创建分支6.2 切换分支6.3 合并分支6.4 解…

5.2 Ajax 数据爬取实战

目录 1. 实战内容 2、Ajax 分析 3、爬取内容 4、存入MySQL 数据库 4.1 创建相关表 4.2 数据插入表中 5、总代码与结果 1. 实战内容 爬取Scrape | Movie的所有电影详情页的电影名、类别、时长、上映地及时间、简介、评分,并将这些内容存入MySQL数据库中。 2、…

8.qt5使用opencv的库函数打开图片

1.配置opencv动态库的环境变量 2.在创建的qt工程中加入如下opencv代码,具体代码如下: 使用opencv库函数显示图片

c语言经典测试题4

1.题1 #include <stdio.h>//没有break的话&#xff0c;输入什么都会往下一直执行下去&#xff0c;而且default在最后就会全都执行 int main() {char c;int v0 0, v1 0, v2 0;do{switch (c getchar())// 输入ADescriptor{casea:caseA:casee:caseE:casei:caseI:caseo:…

数据结构2月21日

双向链表: func函数&#xff1a; #include <stdio.h> #include <stdlib.h> …

Springboot中如何记录好日志

Springboot中如何记录日志 日志体系整体介绍 日志一直在系统中占据这十分重要的地位&#xff0c;他是我们在系统发生故障时用来排查问题的利器&#xff0c;也是我们做操作审计的重要依据。那么如何记录好日志呢&#xff1f;选择什么框架来记录日志&#xff0c;是不是日志打越…

LeetCode142. 环形链表 II刷题详解

今天力扣刷到了一个特别有意思的题目&#xff0c;于是就写了下面的题解来加深以下理解。 142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 这个可以分为两大步去写&#xff0c;首先要判断链表是否有环&#xff0c;然后如果有环就去找到环的入口&#xff0c;没有环返…

Vue源码系列讲解——生命周期篇【七】(模板编译阶段)

目录 1. 前言 2. 模板编译阶段分析 2.1 两种$mount方法对比 2.2 完整版的vm.$mount方法分析 3. 总结 1. 前言 前几篇文章中我们介绍了生命周期的初始化阶段&#xff0c;我们知道&#xff0c;在初始化阶段各项工作做完之后调用了vm.$mount方法&#xff0c;该方法的调用标志…

Vue + Echarts页面内存占用高问题解决

Vue Echarts页面内存占用高问题解决 1.问题描述 目前使用的是Vue2 Echarts4.x的组合&#xff0c;页面如下所示。 就是一个类似于神策的数据看板页面&#xff0c;左侧是一个导航栏&#xff0c;右侧看板页面中包含很多个报表图片&#xff0c;其中报表页面中对Echarts图表进…

Excel的中高级用法

单元格格式&#xff0c;根据数值的正负分配不同的颜色和↑ ↓ 根据数值正负分配颜色 2-7 [蓝色]#,##0;[红色]-#,##0 分配颜色的基础上&#xff0c;根据正负加↑和↓ 2↑-7↓ 其实就是在上面颜色的代码基础上加个 向上的符号↑&#xff0c;或向下的符号↓ [蓝色]#,##0↑;[红色…