应用程序任务驱动:详细解析LLM的评估指标 原创

发布于 2024-6-24 11:09
浏览
0收藏

译者 | 李睿

审校 | 重楼

在自然语言处理(NLP)的动态环境中,大型语言模型(LM)性能的评估是衡量其在各种下游应用程序中的有效性的关键因素。不同的应用程序需要与其目标一致的不同性能指标。本文将详细介绍各种LLM评估指标,探索它们如何应用于实际场景。

从传统的摘要任务到更细致的场景评估,了解用于评估LLM熟练程度的不断发展的方法,揭示了它们的优势、局限性以及在推动NLP研究和应用方面的实际意义。以下是一些常见的文本应用程序任务和相应的评估指标/框架。

1.文本摘要

文本摘要是一种自然语言处理(NLP)任务,旨在将给定文本文档的内容缩减/提炼成更短的版本,同时保留原始文本的最重要信息和整体含义。文本摘要可以使用提取或抽象技术来执行。评估这类系统的一些指标/框架包括:

(1)SUPERT:无监督的多文档摘要评价与生成。它通过评估摘要与伪参考摘要(使用场景化嵌入和软令牌对齐技术,从源文档中选择突出的句子)的语义相似性来评估摘要的质量。

(2)BLANC:它采用一种客观的、可重复的、完全自动化的方法来评估摘要的功能性能。它通过评估预训练的LLM在对文档文本执行语言理解任务时访问文档摘要所获得的性能提升来实现这一点。

(3)FactCC:它使用一种弱监督的、基于模型的方法来验证事实的一致性,并识别源文档和生成摘要之间的冲突。

如下是BLANC指标基本用法的示例代码。

Python

1 >>> from blanc import BlancHelp, BlancTune
2 >>> document = "Jack drove his minivan to the bazaar to purchase milk and honey for his large family."
3 >>> summary = "Jack bought milk and honey."
4 >>> blanc_help = BlancHelp()
5 >>> blanc_tune = BlancTune(finetune_mask_evenly=False, show_progress_bar=False)
6 >>> blanc_help.eval_once(document, summary)
7 0.2222222222222222
8 >>> blanc_tune.eval_once(document, summary)
9 0.3333333333333333

如下是SUPERT指标的基本用法示例代码。

Python

1 from ref_free_metrics.supert import Supert
2 from utils.data_reader import CorpusReader
3
4 # read docs and summaries
5 reader = CorpusReader('data/topic_1')
6 source_docs = reader()
7 summaries = reader.readSummaries() 
8
9 # compute the Supert scores
10 supert = Supert(source_docs) 
11 scores = supert(summaries)

2.重叠文本相似性

基于重叠的文本相似性指标通过评估共享单词、短语或n-gram的存在和频率来量化两个文本片段之间的相似性。这些方法简单直接并且计算效率高,但可能无法准确捕获语义相似性,特别是在处理包含同义词、释义或不同单词形式的文本时。评估这类系统的一些指标/框架包括:

(1)BLEU (Bilingual Evaluation Understudy):这是一种广泛使用的基于准确性的指标标准,通过将机器翻译的文本与人类翻译的文本进行比较来评估其质量。BLEU根据参考译文对个别翻译片段进行评分,并将其平均化,以评估整体质量,重点是对应性,而不是可理解性或语法正确性。

(2)ROUGE (Recall-Oriented Understudy for Gisting Evaluation):它侧重于通过将摘要或生成文本与一个或多个参考文本进行比较来评估摘要或生成文本的质量。ROUGE测量生成文本和参考文本之间n-gram (n个项目的连续序列,通常是单词)的重叠。ROUGE包括多种变体,例如ROUGE-N(考虑n-gram重叠),ROUGE-L(测量生成文本和参考文本之间的最长公共子序列)和ROUGE- (考虑加权重叠)。

(3)METEOR (Metric for Evaluation of Translation with Explicit Ordering):这是机器翻译领域中另一个广泛使用的评估指标。与ROUGE和BLEU主要关注n-gram重叠不同,METEOR结合了额外的语言特征,例如词根提取、同义词和词序来评估翻译文本的质量。它计算精度和召回率的调和平均值,赋予两者同等的权重。METEOR还包括对词序差异和未对齐单词的惩罚,以鼓励保持参考翻译的顺序和内容的翻译。

Python

1
2 >>> predictions = ["hello there general kenobi", "foo bar foobar"]
3 >>> references = [
4 ...     ["hello there general kenobi", "hello there !"],
5 ...     ["foo bar foobar"]
6 ... ]
7 >>> bleu = evaluate.load("bleu")
8 >>> results = bleu.compute(predictions=predictions, references=references)
9 >>> print(results)
10 {'bleu': 1.0, 'precisions': [1.0, 1.0, 1.0, 1.0], 'brevity_penalty': 1.0, 'length_ratio': 1.1666666666666667, 'translation_length': 7, 'reference_length': 6}
11

Huggingface的BLEU指标的基本用法示例代码。

Python

1 >>> rouge = evaluate.load('rouge')
2 >>> predictions = ["hello goodbye", "ankh morpork"]
3 >>> references = ["goodbye", "general kenobi"]
4 >>> results = rouge.compute(predictions=predictions,
5 ...                         references=references,
6 ...                         use_aggregator=False)
7 >>> print(list(results.keys()))
8 ['rouge1', 'rouge2', 'rougeL', 'rougeLsum']
9 >>> print(results["rouge1"])
10 [0.5, 0.0]

从Huggingface的ROUGE指标的基本用法的样本代码。

3.语义文本相似性

语义文本相似性捕获两段文本的基本语义或含义,而不仅仅是它们的结构重叠。使用自然语言处理(NLP)和机器学习技术,语义文本相似性方法将单词、短语或整个文本段落表示为高维语义空间中的密集、连续向量。评估这类系统的一些指标/框架包括:

(1)BERTScore:它利用预训练的BERT(来自Transformers的双向编码器表示)模型来计算句子或文本段落之间的相似性得分。它基于BERT获得的场景嵌入来计算相似度,BERT通过考虑每个词的周围场景来捕获语义信息,从而对语言生成任务提供更细致的评估。它已经被证明与人类对文本质量的判断有很好的相关性。使用合适的BERT模型变得至关重要,因为它会影响存储空间和分数的准确性。

(2)MoverScore:它通过计算使用最优传输算法将一个段落转换为另一个段落的最小成本来测量两个文本段落之间的语义相似性。它基于分布语义,重点是对齐段落之间单词的分布。通过同时考虑文本的内容和结构,MoverScore提供了一种强大的语义相似性指标,这种指标对词序或词汇选择等表面差异不太敏感。

Python

1 from evaluate import load
2 bertscore = load("bertscore")
3 predictions = ["hello world", "general kenobi"]
4 references = ["hello world", "general kenobi"]
5 results = bertscore.compute(predictions=predictions, references=references, model_type="distilbert-base-uncased")
6 print(results)
7 {'precision': [1.0, 1.0], 'recall': [1.0, 1.0], 'f1': [1.0, 1.0], 'hashcode': 'distilbert-base-uncased_L5_no-idf_version=0.3.10(hug_trans=4.10.3)'}
8
Huggingface的BERTScore指标的基本用法示例代码。

4. RAG(检索-增强-生成)

RAG是一种创新的自然语言处理方法,它结合了基于检索和基于生成的模型的优势。在RAG中,使用大规模预训练的检索器模型从知识源(例如大型文本语料库或知识图)中检索相关场景或段落。然后,这些检索到的段落被用作生成模型(例如语言模型或Transformer)的输入或指导,以产生连贯和场景相关的文本输出。用于评估这种系统的一些指标/框架包括:

(1)RAGAs:RAGAs旨在创建一个开放标准,为开发人员提供工具和技术,以便在他们的RAG应用程序中利用持续学习。RAG允许开发人员综合地生成不同的测试数据集来评估应用程序。它还允许LLM辅助的评估指标客观地评估应用程序的性能。从本质上来说,RAGAs为单独评估RAG管道的每个组件提供了量身定制的指标(例如,生成——可信度和答案相关性,检索——场景精度和召回率)。

a.忠实性:这个指标衡量的是在给定场景生成的答案的事实一致性。它是从答案和检索到的场景计算出来的。答案被缩放到(0,1)的范围。越高越好。

b.答案相关性:这个指标侧重于评估生成的答案与给定提示的相关性。越是不完整或包含冗余信息的答案,得分越低,得分越高表示相关性越好。

c.场景召回:场景召回评估检索结果与注释答案一致的程度,被视为基本事实。

d.场景精度:场景精度这个指标用于评估场景中出现的所有与基本事实相关的项目是否排名更高。在理想情况下,所有相关的块都必须出现在最高级别。

e.场景相关性:这一指标评估检索场景的相关性。根据问题和场景计算,这些值在(0,1)的范围内,值越大表示相关性越好。

f.场景实体召回:它是从ground_truth中召回实体比例的指标。这个指标在基于事实的用例中很有用,例如旅游服务台、历史QA等。

g.答案语义相似度:答案语义相似度的概念涉及对生成的答案与基本事实之间的语义相似度的评估。

h.答案正确性:对答案正确性的评估包括衡量生成答案与基本事实相比较的准确性。

(2)ARES:一种用于检索增强生成系统的自动评估框架

这一自动化过程将合成数据生成与经过微调的分类器相结合,以有效地评估场景相关性、答案忠实性和答案相关性,从而最大限度地减少对大量人工注释的需求。ARES采用综合查询生成和精度性能迭代(PPI),提供具有统计置信度的准确评估。 

 Python

1 from datasets import Dataset 
2 import os
3 from ragas import evaluate
4 from ragas.metrics import faithfulness, answer_correctness
5
6 os.environ["OPENAI_API_KEY"] = "your-openai-key"
7
8 data_samples = {
9    'question': ['When was the first super bowl?', 'Who won the most super bowls?'],
10    'answer': ['The first superbowl was held on Jan 15, 1967', 'The most super bowls have been won by The New England Patriots'],
11    'contexts' : [['The First AFL–NFL World Championship Game was an American football game played on January 15, 1967, at the Los Angeles Memorial Coliseum in Los Angeles,'], 
12    ['The Green Bay Packers...Green Bay, Wisconsin.','The Packers compete...Football Conference']],
13    'ground_truth': ['The first superbowl was held on January 15, 1967', 'The New England Patriots have won the Super Bowl a record six times']
14 }
15
16 dataset = Dataset.from_dict(data_samples)
17
18 score = evaluate(dataset,metrics=[faithfulness,answer_correctness])
19 score.to_pandas()
RAG忠诚度的例子。
Python 
1 from ares import ARES
2
3 ues_idp_config = {
4    "in_domain_prompts_dataset": "nq_few_shot_prompt_for_judge_scoring.tsv",
5    "unlabeled_evaluation_set": "nq_unlabeled_output.tsv", 
6    "model_choice" : "gpt-3.5-turbo-0125"
7 } 
8
9 ares = ARES(ues_idp=ues_idp_config)
10 results = ares.ues_idp()
11 print(results)
12 # {'Context Relevance Scores': [Score], 'Answer Faithfulness Scores': [Score], 'Answer Relevance Scores': [

使用ARES检索GPT3.5的UES/IDP分数的示例。

5. QA(问答)

这项任务涉及设计算法和模型,以自动生成用自然语言提出的问题的答案。该任务通常包括处理问题,理解其语义,然后在给定的场景或知识库中搜索,以找到可以直接回答该问题的相关信息。它的复杂性可能从简单的基于事实的问题到需要推理和更复杂的场景。

评估这类系统的一些指标/框架包括:

(1)QAEval:QAEval是一种基于问答的指标,用于估计摘要的内容质量。它从参考摘要中生成QA对,然后使用QA模型根据候选摘要回答问题。最终分数是答对问题的部分。

(2)QAFactEval:改进的基于QA的总结事实一致性评估。它建立在QAEval的基础上,具有问题一致性过滤和改进的答案重叠指标,与之前基于SummaC事实一致性基准的QA指标相比,平均提高了14%。

(3)QuestEval:这是一个NLG指标,用于评估两个不同的输入是否包含相同的信息。基于问题生成和回答的指标可以处理多模式和多语言输入。与ROUGE或BERTScore等既定指标相比,QuestEval不需要任何事实真相的参考。

Python

1 from qafacteval import QAFactEval
2 kwargs = {"cuda_device": 0, "use_lerc_quip": True, \
3        "verbose": True, "generation_batch_size": 32, \
4        "answering_batch_size": 32, "lerc_batch_size": 8}
5
6 model_folder = "" # path to models downloaded with download_models.sh
7 metric = QAFactEval(
8    lerc_quip_path=f"{model_folder}/quip-512-mocha",
9    generation_model_path=f"{model_folder}/generation/model.tar.gz",
10    answering_model_dir=f"{model_folder}/answering",
11    lerc_model_path=f"{model_folder}/lerc/model.tar.gz",
12lerc_pretrained_model_path=f"{model_folder}/lerc/pretraining.tar.gz",
13    **kwargs
14 )
15
16 results = metric.score_batch_qafacteval(["This is a source document"], [["This is a summary."]], return_qa_pairs=True)
17 score = results[0][0]['qa-eval']['lerc_quip']
18

QAFactEval的示例。

6. NER(命名实体识别)

NER是一种自然语言处理(NLP)任务,涉及识别和分类文本主体中的命名实体。命名实体是指按名称提及的特定实体,例如人员、组织、地点、日期、数值表达式等。

(1)InterpretEval:以NER和CWS任务为例,为NER任务定义了8个属性,为CWS任务定义了7个属性。通过分类,即把他们的整体表现分成不同的类别。这可以通过将测试实体集划分为不同的测试实体子集(关于跨度和句子级属性)或测试令牌(关于令牌级属性)来实现。最后通过统计指标来衡量每个桶的性能。

DeepEval:开源LLM的评估框架

DeepEval是最好的、易于使用的开源LLM评估框架之一。它结合了基于上面讨论的各种指标评估LLM输出的最新研究,其中使用LLM和在机器上本地运行的各种其他NLP模型进行评估。

Python

1 from deepeval import evaluate
2 from deepeval.metrics import SummarizationMetric
3 from deepeval.test_case import LLMTestCase
4 ...
5
6 test_case = LLMTestCase(input=input, actual_output=actual_output)
7 metric = SummarizationMetric(
8    threshold=0.5,
9    model="gpt-4",
10    assessment_questions=[
11        "Is the coverage score based on a percentage of 'yes' answers?",
12        "Does the score ensure the summary's accuracy with the source?",
13        "Does a higher score mean a more comprehensive summary?"
14    ]
15 )
16
17 metric.measure(test_case)
18 print(metric.score)
19 print(metric.reason)
20
21 # or evaluate test cases in bulk
22 evaluate([test_case], [metric])

来自DeepEval的样本摘要指标。

结论

本文探讨了NLP中的各种评估指标和支持框架,研究了它们在每个文本应用程序任务中的实际相关性和含义;认识到评估在塑造语言模型开发中的关键作用,不断完善方法并采用新兴的范式至关重要;了解用于应用程序类型的正确评估指标,并了解能够大规模支持它们的框架,对于开发大规模NLP系统的成功至关重要。

原文标题:Application Task Driven: LLM Evaluation Metrics in Detail,作者:Sapan Patel

链接:https://dzone.com/articles/llm-evaluation-metrics-in-detail-based-on-text-app

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
相关推荐