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内容。