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
机器输出的句子:实际
外 面 真 是 冷
总共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
机器输出的句子 (实际)
外 面 不 是 冷
总共5个unigram。
范例1和范例2中的参考例子,就是人输出的句子是完全一样的,但机器输出的句子只有一字之差,但意思完全两样,而recall,precision,F1值完全一样。所以,这个例子给出了Roue-1的不足之处。
2.2 Rouge-2
2.2.1 重复示例1中,
人输出的句子:参考
外 面 是 冷
总共3个bigram (外 面)(面 是)(是 冷)
机器输出的句子:实际
外 面 真 是 冷
总共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
机器输出的句子:实际
外 面 真 是 冷
总共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
4. 其他
1.
5. 参考资料
[1]. coursera.org:Generative AI with large language model
沈建军 于韩国Tongyeong,2024年2月23日第一版,仅限于Rouge指标