前言
这一节我们将从时间线出发对RAG的评估方式进行对比,这些评估方式不仅限于RAG流程之中,其中基于LLM的评估方式更加适用于各行各业。
RAG常用评估方式
上一节我们讲了如何用ROUGE 这个方法评估摘要的相似度,由于篇幅限制,没有讲到图片与文本之间的评估,由于涉及图片与文本评估的场景多见于RAG流程中,包括检索评估方法 和生成评估方法,其中生成评估方法也就是通过对答案进行评估的方法,从而对LLM这个模型的生成能力进行间接的评估。也适用于我们的图片与上下文之间的评估。
此外本文还会对RAG中的其他重要内容的评估方式进行详尽的讲解。
检索评估指标
常用的检索评估方式有以下几种,包括文字和图片的检索评估,评估方式侧重点各不相同,没有好坏之分。
Metric | Explanation | Row level metric value |
---|---|---|
source recall@k% ** | 这个指标表示在所有问答(Q&A)对中,至少有一个被标记为好的源(source)的文档在前k个块(chunks)中被找到的百分比。 | 如果第一个source chunk index <k则为1,否则为0 |
all_img recall@k% ** | 这个指标表示在所有问答对中,所有预期的图像都被成功检索出来的百分比。 | 如果所有基本事实(ground-truth)的图像都被检索出来,则该指标的值为1,否则为0。 |
img_recall@k_mean | 这个指标表示图像召回的平均值 | 即在前k个块中检索到的URL与基本事实的预期URL之间的召回率的平均值,其值在0到1之间。 |
img_recall@k_median | 这个指标表示图像召回的中位数 | 即在前k个块中检索到的URL与基于事实的预期URL之间的召回率的中位数,其值在0到1之间。 |
img_precision@k_mean | 这个指标表示图像精确度的平均值 | 即在前k个块中检索到的URL与基于事实的预期URL之间的精确度的平均值,其值在0到1之间。 |
img_precision@k_median | 这个指标表示图像精确度的中位数 | 即在前k个块中检索到的URL与基于事实的预期URL之间的精确度的中位数,其值在0到1之间。 |
similarity_search_time_in_sec_mean | 这个指标表示平均的AI搜索块检索时间 | 以秒为单位 |
similarity_search_time_in_sec_median | 这个指标表示中位数的AI搜索块检索时间 | 以秒为单位 |
#_source_chunks_sum | 这个指标表示所有问答对中基于事实检索到的所有块的总数 | 其值在0到k之间 |
#_img_chunks_sum | 这个指标表示所有问答对中基于事实检索到的所有图像块的总数 | 其值在0到k之间 |
其中,**这里的 k 一般取10,5,3
生成评估指标
这些指标用于衡量一个系统在处理问答(Q&A)任务时的表现,特别是涉及到大型语言模型(LLM)和视觉增强服务时。下面是对表格中每个指标的解释:
Metric | Explanation | Row level metric value |
---|---|---|
all_cited_img recall% | 所有预期图像都被LLM引用的问答对的百分比 | 如果LLM引用了所有基于事实的图像,则该指标的值为1,否则为0。 |
cited_img_recall_mean | 引用图像召回的平均值 | 即生成答案中URL与基于事实的预期URL之间的召回率的平均值,其值在0到1之间。 |
cited_img_recall_median | 引用图像召回的中位数 | 即生成答案中URL与基于事实的预期URL之间的召回率的中位数,其值在0到1之间。 |
cited_img_precision_mean | 引用图像精确度的平均值 | 即生成答案中URL与基于事实的预期URL之间的精确度的平均值,其值在0到1之间。 |
cited_img_precision_median | 引用图像精确度的中位数 | 即生成答案中URL与基于事实的预期URL之间的精确度的中位数,其值在0到1之间。 |
cited_img_f1_mean | 引用图像F1分数的平均值 | F1分数是召回率和精确度的调和平均数,计算公式为 F1=2∗cited_img_recall∗cited_img_precisioncited_img_recall+cited_img_precisionF1=2∗cited_img_recall+cited_img_precisioncited_img_recall∗cited_img_precision。 |
cited_img_f1_median | 引用图像F1分数的中位数 | F1分数是召回率和精确度的调和平均数,计算公式为 F1=2∗cited_img_recall∗cited_img_precisioncited_img_recall+cited_img_precisionF1=2∗cited_img_recall+cited_img_precisioncited_img_recall∗cited_img_precision。 |
chat_query_time_in_sec_mean | 端到端响应时间的平均值 | 以秒为单位 |
chat_query_time_in_sec_median | 端到端响应时间的中位数 | 以秒为单位 |
inference_prompt_tokens_sum | 输入到LLM的总token数 | |
inference_completion_tokens_sum | LLM用于回答的输出token数 | |
vision_prompt_tokens_sum | 输入到视觉增强服务的总token数 | |
vision_completion_tokens_sum | 视觉增强服务输出的token数。 | |
gpt_correctness score>3% | 正确性得分高于3的问答对的百分比。 | |
gpt_correctness_score_mean | 正确性得分的平均值 | 得分范围是1到5。 |
gpt_correctness_score_median | 正确性得分的中位数 | 得分范围是1到5。 |
表格的描述强调了这些指标的重要性,它们提供了对系统每个部分有效性的宝贵见解。这些指标有助于分别衡量系统的搜索能力和生成部分,以便理解实验对每个组件的影响。
RAG常用实验改进流程
我们通过系统地测试不同的方法进行实验,一次调整一个配置设置并评估其对预定义基线的影响。使用下面概述的特定检索和生成指标来评估性能。对这些指标的详细分析有助于我们决定是否使用新配置更新基线或保留现有配置。
Q&A 评估数据集
为了在实验过程中进行准确评估,整理一组多样化的问答对至关重要。这些问答对应涵盖一系列文章,涵盖各种数据格式、长度和主题。这种多样性可确保全面的测试和评估,有助于提高结果和所获见解的可靠性。以下是可供参考的问答数据集示例。
好的数据集应该确保问答数据集中的问题均衡,既有来自文本的问题,也有来自图像和文本的问题,还有一些问题仅来自图像。还确保问题分布在各种源文档中。
当评估集相对较小时,可以通过纳入各种边缘情况来确保其多样性。可以从彻底的探索性数据分析 (EDA) 开始,图片中的例子提取了诸如文章长度、表格长度和文本表格数量以及图像类型、分辨率和图像数量等特征。然后,仔细地将评估集分布在这些特征上,以实现特征空间的全面表示和稳健覆盖。此外,该系统还支持同一问题的替代来源和图像。
评估图片实操
# 模拟的检索结果,即检索算法返回的结果
retrieved_images = ['img1.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg', 'img5.jpg']
# 真实的标注结果,即与查询图像相关的所有图像
ground_truth_images = ['img1.jpg', 'img2.jpg', 'img3.jpg', 'img6.jpg', 'img7.jpg']
# 计算召回率
def calculate_recall(retrieved, ground_truth):
# 将列表转换为集合,以便使用集合操作
retrieved_set = set(retrieved)
ground_truth_set = set(ground_truth)
# 计算召回率
recall = len(retrieved_set.intersection(ground_truth_set)) / len(ground_truth_set)
return recall
# 调用函数计算召回率
recall = calculate_recall(retrieved_images, ground_truth_images)
print(f"召回率: {recall:.2f}")
我们这里用比较简单的方式抽象一下,具体从markdown中提取图像的标签的细节就不罗嗦了,实际上是差不多的
各评估方式综述
评估方法衡量我们系统的表现。对每个摘要进行手动评估(人工审核)既耗时又费钱,而且不可扩展,因此通常用自动评估来补充。许多自动评估方法试图衡量人类评估者会考虑的文本质量。这些质量包括流畅性、连贯性、相关性、事实一致性和公平性。内容或风格与参考文本的相似性也是生成文本的重要质量。
下图包括用于评估 LLM 生成内容的许多指标及其分类方法。
Reference-based Metrics
基于参考的指标用于将生成的文本与参考(人工注释的地面实况文本)进行比较。许多此类指标是在 LLM 开发之前为传统 NLP 任务开发的,但仍然适用于 LLM 生成的文本。
N-gram based metrics
指标 BLEU (Bilingual Evaluation Understudy), ROUGE (Recall-Oriented Understudy for Gisting Evaluation), and JS divergence (JS2)https://arxiv.org/abs/2010.07100) 是基于重叠的指标,使用 n-gram 来衡量输出文本和参考文本的相似性。
BLEU Score
BLEU(双语评估测试)分数用于评估从一种自然语言到另一种自然语言的机器翻译文本的质量。因此,它通常用于机器翻译任务,但也用于其他任务,如文本生成、释义生成和文本摘要。其基本思想是计算精度,即参考翻译中候选词的比例。通过将单个翻译片段(通常是句子)与一组高质量的参考翻译进行比较,计算出分数。然后,将这些分数在整个语料库中取平均值,以估计翻译的整体质量。评分时不考虑标点符号或语法正确性。
很少有人工翻译能获得完美的 BLEU 分数,因为完美的分数表明候选译文与其中一个参考译文完全相同。因此,没有必要获得完美的分数。考虑到随着多个参考译文的增加,匹配的机会更多,我们鼓励提供一个或多个参考译文,这将有助于最大化 BLEU 分数。
P=mwtP=wtm m:参考中的候选词数。*wt:候选中的单词总数。
通常,上述计算会考虑目标中出现的候选单词或单元词组。但是,为了更准确地评估匹配,可以计算二元词组甚至三元词组,并对从各种 n 元词组获得的分数取平均值,以计算总体 BLEU 分数。
ROUGE
与 BLEU 分数相反,面向召回率的摘要评估 (ROUGE) 评估指标衡量的是召回率。它通常用于评估生成文本的质量和机器翻译任务。但是,由于它衡量的是召回率,因此它用于摘要任务。在这些类型的任务中,评估模型可以召回的单词数量更为重要。
ROUGE 类中最流行的评估指标是 ROUGE-N 和 ROUGE-L:
Rouge-N:测量参考(a)和测试(b)字符串之间匹配的"n-gram"的数量。Precision=在 a 和 b 中发现的 n-gram 数量b 中的 n-gram 数量Precision=b 中的 n-gram 数量在 a 和 b 中发现的 n-gram 数量 Recall=在 a 和 b 中发现的 n-gram 数量a 中的 n-gram 数量Recall=a 中的 n-gram 数量在 a 和 b 中发现的 n-gram 数量 Rouge-L:测量参考(a)和测试(b)字符串之间的最长公共子序列 (LCS)。 Precision=LCS(a,b)b 中的单元词数量Precision=b 中的单元词数量LCS(a,b) Recall=LCS(a,b)a 中的单元词数量Recall=a 中的单元词数量LCS(a,b) 对于 Rouge-N 和 Rouge-L: F1=2×precisionrecallF1=recall2×precision
Text Similarity metrics
文本相似度指标评估器专注于通过比较文本元素之间单词或单词序列的重叠来计算相似度。它们可用于为 LLM 和参考标准文本的预测输出生成相似度分数。这些指标还可以指示模型在各个任务中的表现如何。
Levenshtein Similarity Ratio
编辑相似度比率是用于衡量两个序列之间相似度的字符串指标。此度量基于编辑距离。通俗地说,两个字符串之间的编辑距离是将一个字符串更改为另一个字符串所需的最小单字符编辑(插入、删除或替换)次数。编辑相似度比率可以使用编辑距离值和两个序列的总长度来计算,定义如下:
编辑相似度比率(简单比率): Lev.ratio(a,b)=(∣a∣+∣b∣)−Lev.dist(a,b)∣a∣+∣b∣Lev.ratio(a,b)=∣a∣+∣b∣(∣a∣+∣b∣)−Lev.dist(a,b) 其中 |a| 和 |b| 分别是 a 和 b 的长度。
从简单编辑相似度比率中衍生出几种不同的方法:
部分比率:通过取最短字符串计算相似度,并将其与较长字符串中相同长度的子字符串进行比较。
标记排序比率:首先将字符串拆分为单个单词或标记,然后按字母顺序对标记进行排序,最后将它们重新组合成一个新字符串,以此计算相似度。然后使用简单比率方法比较这个新字符串。
Token-set Ratio:首先将字符串拆分成单个单词或者Token,然后计算两个字符串之间Token集的交集与并集,以此来计算相似度。
Semantic Similarity metrics
BERTScore, MoverScore 和 Sentence Mover Similarity (SMS) 这些指标都依赖于语境化嵌入来衡量两段文本之间的相似性。虽然与基于 LLM 的指标相比,这些指标相对简单、快速且计算成本低廉,但研究表明,它们与人类评估者的相关性较差、缺乏可解释性、固有偏见、对各种任务的适应性较差,并且无法捕捉语言中的细微差别。
两个句子之间的语义相似度是指它们的含义有多紧密相关。为此,首先将每个字符串表示为一个特征向量,以捕获其语义含义。一种常用的方法是生成字符串的嵌入(例如,使用 LLM),然后使用余弦相似度来测量两个嵌入向量之间的相似度。更具体地说,给定一个表示目标字符串的嵌入向量 (A) 和一个表示参考字符串的嵌入向量 (B),余弦相似度计算如下:
余弦相似度=A⋅B∣∣A∣∣∣∣B∣∣余弦相似度=∣∣A∣∣∣∣B∣∣A⋅B
如上所示,该度量测量两个非零向量之间角度的余弦,范围从 -1 到 1。1 表示两个向量相同,-1 表示它们不相似。
Reference-free Metrics
无参考(基于上下文)指标会为生成的文本生成分数,并且不依赖于基本事实。评估基于上下文或源文档。许多此类指标都是为了应对创建基本事实数据的挑战而开发的。这些方法往往比基于参考的技术更新,反映了随着 PTM 变得越来越强大,对可扩展文本评估的需求日益增长。这些指标包括基于质量、基于蕴涵、基于事实、基于问答 (QA) 和基于问题生成 (QG) 的指标。
- 基于质量的摘要指标。这些方法检测摘要是否包含相关信息。SUPERT质量衡量摘要与基于 BERT 的伪参考的相似性,而 BLANC质量衡量两个掩码标记重建的准确性差异。ROUGE-C是 ROUGE 的修改版,无需参考,并使用源文本作为比较的上下文。
- 基于蕴涵的指标。基于蕴涵的指标基于自然语言推理 (NLI) 任务,对于给定的文本(前提),它确定输出文本(假设)是否蕴涵、与前提相矛盾或破坏前提 [24]。这有助于检测事实不一致。 SummaC (Summary Consistency) benchmark 、FactCC和 DAE (Dependency Arc Entailment)指标可用作检测与源文本的事实不一致的方法。基于蕴涵的指标被设计为带有"一致"或"不一致"标签的分类任务。
- 基于事实性、QA 和 QG 的指标。基于事实性的指标(如 SRLScore (Semantic Role Labeling)和 QAFactEval)评估生成的文本是否包含与源文本不符的不正确信息。基于 QA(如 QuestEval)和基于 QG 的指标被用作另一种衡量事实一致性和相关性的方法。
与基于参考的指标相比,无参考指标与人类评估者的相关性有所提高,但使用无参考指标作为任务进度的单一衡量标准存在局限性。一些 limitations包括对其底层模型输出的偏见和对更高质量文本的偏见。