應(yīng)用程序任務(wù)驅(qū)動(dòng):詳細(xì)解析LLM的評(píng)估指標(biāo)
譯文譯者 | 李睿
審校 | 重樓
在自然語言處理(NLP)的動(dòng)態(tài)環(huán)境中,大型語言模型(LM)性能的評(píng)估是衡量其在各種下游應(yīng)用程序中的有效性的關(guān)鍵因素。不同的應(yīng)用程序需要與其目標(biāo)一致的不同性能指標(biāo)。本文將詳細(xì)介紹各種LLM評(píng)估指標(biāo),探索它們?nèi)绾螒?yīng)用于實(shí)際場(chǎng)景。
從傳統(tǒng)的摘要任務(wù)到更細(xì)致的場(chǎng)景評(píng)估,了解用于評(píng)估LLM熟練程度的不斷發(fā)展的方法,揭示了它們的優(yōu)勢(shì)、局限性以及在推動(dòng)NLP研究和應(yīng)用方面的實(shí)際意義。以下是一些常見的文本應(yīng)用程序任務(wù)和相應(yīng)的評(píng)估指標(biāo)/框架。
1.文本摘要
文本摘要是一種自然語言處理(NLP)任務(wù),旨在將給定文本文檔的內(nèi)容縮減/提煉成更短的版本,同時(shí)保留原始文本的最重要信息和整體含義。文本摘要可以使用提取或抽象技術(shù)來執(zhí)行。評(píng)估這類系統(tǒng)的一些指標(biāo)/框架包括:
(1)SUPERT:無監(jiān)督的多文檔摘要評(píng)價(jià)與生成。它通過評(píng)估摘要與偽參考摘要(使用場(chǎng)景化嵌入和軟令牌對(duì)齊技術(shù),從源文檔中選擇突出的句子)的語義相似性來評(píng)估摘要的質(zhì)量。
(2)BLANC:它采用一種客觀的、可重復(fù)的、完全自動(dòng)化的方法來評(píng)估摘要的功能性能。它通過評(píng)估預(yù)訓(xùn)練的LLM在對(duì)文檔文本執(zhí)行語言理解任務(wù)時(shí)訪問文檔摘要所獲得的性能提升來實(shí)現(xiàn)這一點(diǎn)。
(3)FactCC:它使用一種弱監(jiān)督的、基于模型的方法來驗(yàn)證事實(shí)的一致性,并識(shí)別源文檔和生成摘要之間的沖突。
如下是BLANC指標(biāo)基本用法的示例代碼。
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指標(biāo)的基本用法示例代碼。
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.重疊文本相似性
基于重疊的文本相似性指標(biāo)通過評(píng)估共享單詞、短語或n-gram的存在和頻率來量化兩個(gè)文本片段之間的相似性。這些方法簡單直接并且計(jì)算效率高,但可能無法準(zhǔn)確捕獲語義相似性,特別是在處理包含同義詞、釋義或不同單詞形式的文本時(shí)。評(píng)估這類系統(tǒng)的一些指標(biāo)/框架包括:
(1)BLEU (Bilingual Evaluation Understudy):這是一種廣泛使用的基于準(zhǔn)確性的指標(biāo)標(biāo)準(zhǔn),通過將機(jī)器翻譯的文本與人類翻譯的文本進(jìn)行比較來評(píng)估其質(zhì)量。BLEU根據(jù)參考譯文對(duì)個(gè)別翻譯片段進(jìn)行評(píng)分,并將其平均化,以評(píng)估整體質(zhì)量,重點(diǎn)是對(duì)應(yīng)性,而不是可理解性或語法正確性。
(2)ROUGE (Recall-Oriented Understudy for Gisting Evaluation):它側(cè)重于通過將摘要或生成文本與一個(gè)或多個(gè)參考文本進(jìn)行比較來評(píng)估摘要或生成文本的質(zhì)量。ROUGE測(cè)量生成文本和參考文本之間n-gram (n個(gè)項(xiàng)目的連續(xù)序列,通常是單詞)的重疊。ROUGE包括多種變體,例如ROUGE-N(考慮n-gram重疊),ROUGE-L(測(cè)量生成文本和參考文本之間的最長公共子序列)和ROUGE- (考慮加權(quán)重疊)。
(3)METEOR (Metric for Evaluation of Translation with Explicit Ordering):這是機(jī)器翻譯領(lǐng)域中另一個(gè)廣泛使用的評(píng)估指標(biāo)。與ROUGE和BLEU主要關(guān)注n-gram重疊不同,METEOR結(jié)合了額外的語言特征,例如詞根提取、同義詞和詞序來評(píng)估翻譯文本的質(zhì)量。它計(jì)算精度和召回率的調(diào)和平均值,賦予兩者同等的權(quán)重。METEOR還包括對(duì)詞序差異和未對(duì)齊單詞的懲罰,以鼓勵(lì)保持參考翻譯的順序和內(nèi)容的翻譯。
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指標(biāo)的基本用法示例代碼。
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指標(biāo)的基本用法的樣本代碼。
3.語義文本相似性
語義文本相似性捕獲兩段文本的基本語義或含義,而不僅僅是它們的結(jié)構(gòu)重疊。使用自然語言處理(NLP)和機(jī)器學(xué)習(xí)技術(shù),語義文本相似性方法將單詞、短語或整個(gè)文本段落表示為高維語義空間中的密集、連續(xù)向量。評(píng)估這類系統(tǒng)的一些指標(biāo)/框架包括:
(1)BERTScore:它利用預(yù)訓(xùn)練的BERT(來自Transformers的雙向編碼器表示)模型來計(jì)算句子或文本段落之間的相似性得分。它基于BERT獲得的場(chǎng)景嵌入來計(jì)算相似度,BERT通過考慮每個(gè)詞的周圍場(chǎng)景來捕獲語義信息,從而對(duì)語言生成任務(wù)提供更細(xì)致的評(píng)估。它已經(jīng)被證明與人類對(duì)文本質(zhì)量的判斷有很好的相關(guān)性。使用合適的BERT模型變得至關(guān)重要,因?yàn)樗鼤?huì)影響存儲(chǔ)空間和分?jǐn)?shù)的準(zhǔn)確性。
(2)MoverScore:它通過計(jì)算使用最優(yōu)傳輸算法將一個(gè)段落轉(zhuǎn)換為另一個(gè)段落的最小成本來測(cè)量兩個(gè)文本段落之間的語義相似性。它基于分布語義,重點(diǎn)是對(duì)齊段落之間單詞的分布。通過同時(shí)考慮文本的內(nèi)容和結(jié)構(gòu),MoverScore提供了一種強(qiáng)大的語義相似性指標(biāo),這種指標(biāo)對(duì)詞序或詞匯選擇等表面差異不太敏感。
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指標(biāo)的基本用法示例代碼。
4. RAG(檢索-增強(qiáng)-生成)
RAG是一種創(chuàng)新的自然語言處理方法,它結(jié)合了基于檢索和基于生成的模型的優(yōu)勢(shì)。在RAG中,使用大規(guī)模預(yù)訓(xùn)練的檢索器模型從知識(shí)源(例如大型文本語料庫或知識(shí)圖)中檢索相關(guān)場(chǎng)景或段落。然后,這些檢索到的段落被用作生成模型(例如語言模型或Transformer)的輸入或指導(dǎo),以產(chǎn)生連貫和場(chǎng)景相關(guān)的文本輸出。用于評(píng)估這種系統(tǒng)的一些指標(biāo)/框架包括:
(1)RAGAs:RAGAs旨在創(chuàng)建一個(gè)開放標(biāo)準(zhǔn),為開發(fā)人員提供工具和技術(shù),以便在他們的RAG應(yīng)用程序中利用持續(xù)學(xué)習(xí)。RAG允許開發(fā)人員綜合地生成不同的測(cè)試數(shù)據(jù)集來評(píng)估應(yīng)用程序。它還允許LLM輔助的評(píng)估指標(biāo)客觀地評(píng)估應(yīng)用程序的性能。從本質(zhì)上來說,RAGAs為單獨(dú)評(píng)估RAG管道的每個(gè)組件提供了量身定制的指標(biāo)(例如,生成——可信度和答案相關(guān)性,檢索——場(chǎng)景精度和召回率)。
a.忠實(shí)性:這個(gè)指標(biāo)衡量的是在給定場(chǎng)景生成的答案的事實(shí)一致性。它是從答案和檢索到的場(chǎng)景計(jì)算出來的。答案被縮放到(0,1)的范圍。越高越好。
b.答案相關(guān)性:這個(gè)指標(biāo)側(cè)重于評(píng)估生成的答案與給定提示的相關(guān)性。越是不完整或包含冗余信息的答案,得分越低,得分越高表示相關(guān)性越好。
c.場(chǎng)景召回:場(chǎng)景召回評(píng)估檢索結(jié)果與注釋答案一致的程度,被視為基本事實(shí)。
d.場(chǎng)景精度:場(chǎng)景精度這個(gè)指標(biāo)用于評(píng)估場(chǎng)景中出現(xiàn)的所有與基本事實(shí)相關(guān)的項(xiàng)目是否排名更高。在理想情況下,所有相關(guān)的塊都必須出現(xiàn)在最高級(jí)別。
e.場(chǎng)景相關(guān)性:這一指標(biāo)評(píng)估檢索場(chǎng)景的相關(guān)性。根據(jù)問題和場(chǎng)景計(jì)算,這些值在(0,1)的范圍內(nèi),值越大表示相關(guān)性越好。
f.場(chǎng)景實(shí)體召回:它是從ground_truth中召回實(shí)體比例的指標(biāo)。這個(gè)指標(biāo)在基于事實(shí)的用例中很有用,例如旅游服務(wù)臺(tái)、歷史QA等。
g.答案語義相似度:答案語義相似度的概念涉及對(duì)生成的答案與基本事實(shí)之間的語義相似度的評(píng)估。
h.答案正確性:對(duì)答案正確性的評(píng)估包括衡量生成答案與基本事實(shí)相比較的準(zhǔn)確性。
(2)ARES:一種用于檢索增強(qiáng)生成系統(tǒng)的自動(dòng)評(píng)估框架
這一自動(dòng)化過程將合成數(shù)據(jù)生成與經(jīng)過微調(diào)的分類器相結(jié)合,以有效地評(píng)估場(chǎng)景相關(guān)性、答案忠實(shí)性和答案相關(guān)性,從而最大限度地減少對(duì)大量人工注釋的需求。ARES采用綜合查詢生成和精度性能迭代(PPI),提供具有統(tǒng)計(jì)置信度的準(zhǔn)確評(píng)估。
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分?jǐn)?shù)的示例。
5. QA(問答)
這項(xiàng)任務(wù)涉及設(shè)計(jì)算法和模型,以自動(dòng)生成用自然語言提出的問題的答案。該任務(wù)通常包括處理問題,理解其語義,然后在給定的場(chǎng)景或知識(shí)庫中搜索,以找到可以直接回答該問題的相關(guān)信息。它的復(fù)雜性可能從簡單的基于事實(shí)的問題到需要推理和更復(fù)雜的場(chǎng)景。
評(píng)估這類系統(tǒng)的一些指標(biāo)/框架包括:
(1)QAEval:QAEval是一種基于問答的指標(biāo),用于估計(jì)摘要的內(nèi)容質(zhì)量。它從參考摘要中生成QA對(duì),然后使用QA模型根據(jù)候選摘要回答問題。最終分?jǐn)?shù)是答對(duì)問題的部分。
(2)QAFactEval:改進(jìn)的基于QA的總結(jié)事實(shí)一致性評(píng)估。它建立在QAEval的基礎(chǔ)上,具有問題一致性過濾和改進(jìn)的答案重疊指標(biāo),與之前基于SummaC事實(shí)一致性基準(zhǔn)的QA指標(biāo)相比,平均提高了14%。
(3)QuestEval:這是一個(gè)NLG指標(biāo),用于評(píng)估兩個(gè)不同的輸入是否包含相同的信息?;趩栴}生成和回答的指標(biāo)可以處理多模式和多語言輸入。與ROUGE或BERTScore等既定指標(biāo)相比,QuestEval不需要任何事實(shí)真相的參考。
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(命名實(shí)體識(shí)別)
NER是一種自然語言處理(NLP)任務(wù),涉及識(shí)別和分類文本主體中的命名實(shí)體。命名實(shí)體是指按名稱提及的特定實(shí)體,例如人員、組織、地點(diǎn)、日期、數(shù)值表達(dá)式等。
(1)InterpretEval:以NER和CWS任務(wù)為例,為NER任務(wù)定義了8個(gè)屬性,為CWS任務(wù)定義了7個(gè)屬性。通過分類,即把他們的整體表現(xiàn)分成不同的類別。這可以通過將測(cè)試實(shí)體集劃分為不同的測(cè)試實(shí)體子集(關(guān)于跨度和句子級(jí)屬性)或測(cè)試令牌(關(guān)于令牌級(jí)屬性)來實(shí)現(xiàn)。最后通過統(tǒng)計(jì)指標(biāo)來衡量每個(gè)桶的性能。
DeepEval:開源LLM的評(píng)估框架
DeepEval是最好的、易于使用的開源LLM評(píng)估框架之一。它結(jié)合了基于上面討論的各種指標(biāo)評(píng)估LLM輸出的最新研究,其中使用LLM和在機(jī)器上本地運(yùn)行的各種其他NLP模型進(jìn)行評(píng)估。
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的樣本摘要指標(biāo)。
結(jié)論
本文探討了NLP中的各種評(píng)估指標(biāo)和支持框架,研究了它們?cè)诿總€(gè)文本應(yīng)用程序任務(wù)中的實(shí)際相關(guān)性和含義;認(rèn)識(shí)到評(píng)估在塑造語言模型開發(fā)中的關(guān)鍵作用,不斷完善方法并采用新興的范式至關(guān)重要;了解用于應(yīng)用程序類型的正確評(píng)估指標(biāo),并了解能夠大規(guī)模支持它們的框架,對(duì)于開發(fā)大規(guī)模NLP系統(tǒng)的成功至關(guān)重要。
原文標(biāo)題:Application Task Driven: LLM Evaluation Metrics in Detail,作者:Sapan Patel
鏈接:https://dzone.com/articles/llm-evaluation-metrics-in-detail-based-on-text-app