从零手搓大模型之路(四、TinyEval的构建)

写在前面

这是该系列最后一堂课,主要是对比评测模型的好坏程度,给模型进行打分。

对于大模型来说,输出结果纷杂,也会导致评测的指标也有众多选择。本文也主要学习下相关的评测指标,先不将评测作为现阶段学习的重点。等自认为大模型的学习有一定成果后再进一步研究。

依旧是先放上课程链接:

手搓大模型

 

一、相关评测指标

说到评测指标,最先想到的就是AUC、F1、威尔科克森符号秩检验,也是之前写小论文以及毕设时用到的,借此机会又了解到一些其他指标,就一并放上来整理下。

1、AUC

说到AUC,就不得不提到混淆矩阵(一切罪恶的起源)

标记为正标记为负
实际为正真正例(TP)假反例(FN)
实际为负假正例(FP)真负例(TN)

TPR(真正例率)= TP /(TP+FN),也叫召回率、查全率(Recall)

FPR(假正例率)= FP/(FP+TN)

ACC(准确率) = (TP + TN)/(TP + FN + FP + TN)

Precision(精准率)=  TP/(TP + FP)

然后,以FPR为横坐标,TPR为纵坐标,就可以绘制ROC曲线(接受者操作特征曲线)。

那么如何根据FPR和TPR绘制曲线呢?

对于二分类问题,假设有100个评测目标,借助模型,可以得到这100个目标的评测分数。依次以这100个评测分数作为阈值进行二分类,那么就有了100次的分类判断结果(也就是有100对FPR和TPR的计算结果,即100个点),将这100个点进行绘制,就得到ROC。

图片来自西瓜书

AUCROC曲线下的面积。

忘记是在哪看到的对AUC的理解了,但是笔记书写了,也就放上来:

  • AUC为一个概率值。当随机挑选一个正负样本时,依照当前的分类算法,计算得到的Score将这个正样本排在负样本前的概率为AUC。AUC越大,表示分类算法越有可能将正样本排在负样本前面。
  • 任意取一个正样本和负样本,输出的正样本的概率比负样本概率大的可能性。
2、F1 score

衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的精准率率和召回率,是模型精确率和召回率的一种调和平均。(精准率召回率见前面的混淆矩阵

F_1 = \frac{2 \times Recall \times Precision}{Recall + Precision}

当然,根据关注点的不同,也可以自定义F分数,比如更关注召回率,那么就把召回率的权重设置大一些,也就是有下面更一般的F分数计算: 

F_\beta = \frac{(1+\beta ^{2}) \times Recall \times Precision}{\beta ^{2}\times Recall + Precision}

3、rouge-series

ROUGE(Recall-Oriented Understudy for Gisting Evaluation),是评估自动文摘和机器翻译的一组指标。其将生成的摘要或者翻译与标准的文稿进行相似度计算,得出相应的分数供人参考模型的能力。(Rouge主要基于的就是召回率)

Rouge原论文

在原论文中,其提出了四种方法:

ROUGE-n在 N-gram 上计算召回率
ROUGE-L考虑了机器译文和参考译文之间的最长公共子序列
ROUGE-S引入Skip,文本匹配时不要求词必须连续
ROUGE-W加权版的ROUGE-L

1)ROUGE-n

分母是参考摘要(标准答案)中词单位的总数量,分子是模型生成文稿与标准答案共有的词单位的个数。(其实就是召回率)

这里的n常见的是1,2,3,即句子中是以几个单词为一个单位,假设例子如下:

# 标准文本

I have a cute cat.

# 模型生成的文本

I have a cat.

# n = 1时

# 分母为5,分子为4

# 标准文本的分割为【I, have, a, cute, cat】

# 模型生成的文本分割为【I, have, a, cat】

# 标准和预测共有的为【I, have, a, cat】

# n = 2时

# 分母为4,分子为2

# 标准文本的分割为【(I, have), (have, a), (a, cute), (cute, cat)】

# 模型生成的文本分割为【(I, have), (have, a), (a, cat)】

# 标准和预测共有的为【(I, have), (have, a)】

# n = 3时

# 分母为3,分子为1

# 标准文本的分割为【(I, have, a), (have, a, cute), (a, cute, cat)】

# 模型生成的文本分割为【(I, have, a), (have, a, cat)】

# 标准和预测共有的为【(I, have, a)】

2)ROUGE-L

 其中LCS(X, Y)是X和Y的最长公共序列长度(不要求连续,保序即可),m是标准文本的长度,n是预测文本的长度,所以R也就是召回率,P就是精准率,F也就是F分数,也就是ROUGE-L。

3)ROUGE-S

其基于ROUGE-n也是对 N-gram 进行统计,但允许"跳词 (Skip)",即单词不需要连续出现。也称跳跃二元组

如对于本文的标准文本例子,标准文本就可以包括以下词组:

(I, have), (I, a), (I, cute), (have, a), (have, cute), (have, cat), (a, cute), (a, cat), (cute, cat)

4)ROUGE-W

其为ROUGE-L的改进,主要原因是对于文本预测,可能出现下面这种情况:

此时,对于预测文本Y1和Y2,如果是ROUGE-L,得分就会相同。

ROUGE-W给连续翻译正确的更高的分数,关于其计算方法,可以查看原论文,也可以查看下面这位大佬的解读:

ROUGE-W计算逻辑

 

4、blue-series

BLEU(Bilingual evaluation understudy),类似于ROUGE,不同于ROUGE关注召回率,BLEU关注的是精确率。其同样是比较生成文稿和标准文稿里的 n-gram 的重合程度,重合程度越高就认为译文质量越高。常用的n取1、2、3、4。

分母是生成文稿中词单位的总数量,分子是模型生成文稿与标准答案共有的词单位的个数。

依旧以ROUGE中的例子:

# 标准文本

I have a cute cat.

# 模型生成的文本

I have a cat.

# n = 1时

# 分母为4,分子为4

# 标准文本的分割为【I, have, a, cute, cat】

# 模型生成的文本分割为【I, have, a, cat】

# 标准和预测共有的为【I, have, a, cat】

# n = 2时

# 分母为3,分子为2

# 标准文本的分割为【(I, have), (have, a), (a, cute), (cute, cat)】

# 模型生成的文本分割为【(I, have), (have, a), (a, cat)】

# 标准和预测共有的为【(I, have), (have, a)】

# n = 3时

# 分母为2,分子为1

# 标准文本的分割为【(I, have, a), (have, a, cute), (a, cute, cat)】

# 模型生成的文本分割为【(I, have, a), (have, a, cat)】 

# 标准和预测共有的为【(I, have, a)】

# n = 4时

# 分母为1,分子为0

# 标准文本的分割为【(I, have, a, cute), (have, a, cute, cat)】

# 模型生成的文本分割为【(I, have, a, cat)】 

# 标准和预测共有的为【】

5、威尔科克森符号秩检验

一种非参数校验的方法(非参数检验是在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法)。

其用于比较两个配对数据之间的差异,理论上,如果两组数据没有显著差异,那么它们之间的差值应该在正负两个方向上均匀分布。

其一开始提出两个假设和一个置信度:

  • 原假设:两组数据无显著差异
  • 备择假设:两组数据存在差异
  • 置信度:用来评判原假设成立还是备择假设成立,与双尾检验还是单尾检验有一定联系,常见0.05

注:双尾检验&单尾检验

双尾检验只强调差异不强调方向性,如原假设是两数据分布相等,备择假设为不相等
单尾检验强调某一方向的检验叫单尾检验,如原假设两数据相当,备择假设是前者总体比后者强或弱

其具体的计算步骤如下:

  • 计算每对数的差值,若差值为0则舍去。
  • 将差值取绝对值,按照从小到大进行排序,得到它们的排名,也就是这里的秩,若有相等的排名,则两个数的排名相加除二,如排名3、4,那么它们的秩就是3.5。
  • 差值为正的秩相加,得到正秩和T1,差值为负的秩相加,得到负秩和T2。
  • 对比正秩和T1和负秩和T2,若两组数据无显著差异(原假设成立)时,T1与T2应该相近,反之若T1与T2差异很大,则表明两组数据差异较大(备择假设成立)。

判断正秩和T1与负秩和T2相近的步骤:

  • 根据数据对的总数目n和之前定义的置信度,可以查询临界值表,获得T的临界值表,通常看T1或者T2是否在T的范围内来判断是否原假设成立。若在这范围内,说明原假设成立,否则备择假设成立。(T检验)
  • 可以计算Z值,使用近似正态分布,结合标准正态分布Z分位表以及最初的置信度进行判断。(Z检验)

Z= (|T-n_1(N+1)/2|-0.5)/(\sqrt{n_1n_2(N+1)/12})

 

二、课程笔记

说实话,这部分流程理论上很好构思:就是给定标准文本,将问题输入到不同的模型中得到不同的生成文稿,将标准文本和生成文稿使用不同的评价指标进行对比,进而给不同的模型打分评测。

整个流程需要考虑的,用自己的话来说就是,输入数据的标准初始化来适配不同模型

通读了教程中的源码,其中涉及提示词prompt的构建、token词的分配等,这里记录一些教程中的处理方案:

  • 对于不同场景的数据集,构建了不同的prompt模板,力求给到大模型较为精确的-提示。如对于中文的问答:
阅读以下文字并用中文简短回答:
{context}
现在请基于上面的文章回答下面的问题,只告诉我答案,不要输出任何其他字词。
问题:{input}
回答:
  • 若prompt分词后的token数目大于模型的最大输入token数目,则取prompt分词的前半段和后半段,省去中间部分,如假设prompt分词总数为10000,模型的最大输入token个数为1000,那么就取prompt分词的前500个以及最后500个。(依照教程的说法就是,其假定prompt的分词的两端都包含重要信息,因此对中间部分进行截断,极大保证输入信息的重要程度,提高输出效果)

最近百度搜索大模型评测时,看到大模型的评测框架OpenCompass,继续挖坑,等过段时间自认为把大模型摸透了,回来填。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值