是用來量化和評估 LLM 輸出品質工具。它們根據一系列標準來評分模型輸出,確保模型在各種任務中表現良好。這些指標對於優化 LLM 的性能、識別潛在問題以及提升模型的實用性至關重要
常見評估指標類別
答案相關性(Answer Relevance)
:評估LLM輸出是否能有效且準確地回答用戶問題,並與輸入資訊相關正確性(Correctness)與事實性 (Factuality)
:驗證LLM輸出是否符合事實,通常透過比對模型生成內容與已知真實資訊來計算幻覺檢測(Hallucination Detection)
:評估模型生成內容中是否存在不真實或憑空捏造的資訊上下文相關性(Contextual Relevance)
:衡量生成內容與給定上下文的匹配程度任務特定指標(Task-Specific Metrics)
:針對特定任務(如摘要、翻譯、問答等)設計的評估指標優秀評估指標特點
定量評估(Quantitative Evaluation)
:指標能計算出一個分數,以便設定通過閾值並監控性能變化可靠性(Reliability)
:即使LLM輸出不可預測,評估指標本身也應保持穩定和一致準確性 (Accuracy)
:評分應能真實反映LLM應用程式的表現,並盡可能與人類期望一致常見評估方法
這類指標主要衡量模型對語言本身的掌握程度,評估其生成文本的流暢性和語法正確性,通常在模型開發早期階段使用
這是最經典語言模型評估指標。它衡量的是模型對於一段給定文本的「驚訝程度」。困惑度越低,代表模型對於這段文本的機率分佈預測得越準確,也就說明模型認為這段文本是「意料之中」的,即更流暢、更符合語法和語氣
如何運作
:
它計算的是測試集中每個詞元(token)機率的幾何平均數的倒數。簡單來說,模型在預測下一個詞元時,如果能給出正確答案更高的機率,困惑度就會降低
優點
:計算快速,不需要人工標註的參考答案缺點
:PPL 低不完全等於生成品質高。一個模型可能生成非常流暢但無意義或事實錯誤的句子,其 PPL 依然可以很低。它無法評估內容的真實性、有用性或創造性這類指標通常需要一個或多個「參考答案」(Reference/Ground Truth),並透過演算法比較模型生成的答案與參考答案的相似度。它們常用於評估翻譯、摘要等任務
主要用途
:機器翻譯如何運作
:比較機器翻譯輸出和專業人工翻譯參考文本之間 n-gram(連續 n 個詞元)重疊程度。它關注的是「精確率」(Precision),即模型生成的詞語有多少出現在參考答案中。為了懲罰過短的句子,還引入了「簡潔懲罰」(Brevity Penalty)優點
:計算速度快,與人類判斷有一定相關性缺點
:不擅長評估語意和語序變化。一個意思相同但用詞完全不同句子,BLEU分數可能會很低主要用途
:自動摘要(Summarization)如何運作
:與 BLEU 相反,ROUGE 關注的是「召回率」(Recall),即參考答案中的詞語有多少被模型生成的摘要所覆蓋。它有多個變體:
ROUGE-N
:基於 n-gram 的召回率ROUGE-L
:基於「最長公共子序列」(Longest Common Subsequence),因此更關注語句結構的相似性優點
:非常適合評估摘要任務中關鍵訊息的覆蓋程度缺點
:與 BLEU 類似,對於同義詞或釋義(paraphrasing)的處理能力有限主要用途
:更廣泛的文本生成任務如何運作
:這類指標不再只看詞語表面的重疊,而是利用BERT預訓練模型的詞嵌入(word embeddings)來計算生成文本和參考文本中每個詞元之間的「語意相似度」優點
:能夠更好地捕捉同義詞和語意上的相似性,比BLEU和ROUGE更先進缺點
:計算成本較高,且其表現依賴於底層的嵌入模型隨著LLM能力越來越強大,單一任務的指標已不足以全面評估。因此,學術界和業界開發了許多包含多種任務的綜合性基準測試集
一個極具挑戰性的基準,旨在評估模型的「知識」和「解決問題」的能力
如何運作
:包含57個科目,橫跨初等數學、美國歷史、計算機科學、法律、現代物理學等領域。題目形式為多項選擇題。模型需要在這些專業領域展現廣泛的知識和推理能力目標
:衡量模型的「通識」水平由Google推出超大規模基準,包含超過200個任務
如何運作
:任務種類極其多樣,從語言學、兒童發展、數學、軟體工程到常識推理,甚至包含一些需要創造力任務,旨在探索LLM能力邊界和未來潛力專門評估「常識推理」(Commonsense Reasoning)能力的基準
如何運作
:給定一個情境,模型需要從多個選項中選擇一個最合乎邏輯、最符合常識的後續。這些選項通常設計得非常巧妙,單靠統計規律很容易選錯。專門評估模型「程式碼生成」(Code Generation)能力的基準
如何運作
:提供函數的描述和幾個測試案例,要求模型生成能夠通過所有單元測試Python程式碼這類評估至關重要,因為一個模型不僅要聰明,更要安全、可靠且公正
評估模型回答問題的「真實性」,專門檢測模型是否會生成常見的錯誤觀念或網路謠言
如何運作
:包含一系列人類已知是錯誤觀念,看模型是否會附和這些錯誤說法。高分模型應該要能辨別並拒絕回答或澄清錯誤資訊評估模型生成「有毒內容」(Toxicity)和「偏見」(Bias)的基準
如何運作
:
ToxiGen
:包含大量隱晦或明顯的有害言論提示,評估模型生成仇恨言論、侮辱性語言等的傾向BOLD
:評估模型在不同人群(性別、種族、宗教)相關的文本中,表現出的情緒、觀點等是否存在偏見這是評估LLM品質黃金標準。 儘管自動化指標和基準很有用,但它們始終無法完全捕捉人類對語言品質的細膩感知
如何運作
:
直接評分
:評分員直接對模型的生成結果打分,評分維度可能包括:有用性、真實性、無害性、流暢度、一致性等配對比較 (A/B 測試)
:同時呈現兩個不同模型對同一個問題的回答,讓評分員選擇哪一個更好(或平手)。這種方式更符合人類的相對判斷習慣,結果也更可靠紅隊演練 (Red Teaming)
:由專家模擬惡意用戶,刻意誘導模型產生不安全、有偏見或有害的回答,以測試模型的安全防護能力利用另一個LLM作為評估器,根據預設的標準和提示來評估目標LLM輸出。這種方法可以提供更接近人類判斷的定性評估,並能評估更複雜的維度,例如:連貫性、流暢性、相關性等等
以下是一些常見 LLM 評估指標的簡化程式碼範例。在實際應用中,可能會使用更完善的開源庫(Hugging Face Datasets 的 evaluate 庫、deepeval)來進行評估
這需要一個預訓練的句子嵌入模型(sentence-transformers)
from sklearn.metrics.pairwise import cosine_similarity
from sentence_transformers import SentenceTransformer
import numpy as np
# 加載預訓練的句子嵌入模型
# 如果是第一次運行,可能需要下載模型
# model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2') # 多語言模型
model = SentenceTransformer('all-MiniLM-L6-v2') # 英文模型
def compute_relevance_score(predicted_answer, reference_answer, model):
"""
計算預測答案與參考答案之間的語義相關性分數
"""
pred_embedding = model.encode(predicted_answer, convert_to_tensor=True)
ref_embedding = model.encode(reference_answer, convert_to_tensor=True)
# 計算餘弦相似度
score = cosine_similarity(pred_embedding.reshape(1, -1), ref_embedding.reshape(1, -1))[0][0]
return score
# 範例
predicted_ans = "大型語言模型是能夠理解和生成人類語言的人工智慧模型。"
reference_ans = "LLM 是一種利用深度學習技術處理和生成自然語言的 AI 系統。"
relevance_score = compute_relevance_score(predicted_ans, reference_ans, model)
print(f"答案相關性分數 (餘弦相似度): {relevance_score:.4f}")
predicted_ans_irrelevant = "今天天氣真好"
relevance_score_irrelevant = compute_relevance_score(predicted_ans_irrelevant, reference_ans, model)
print(f"不相關答案的相關性分數: {relevance_score_irrelevant:.4f}")
evaluate 是一個 Hugging Face 的庫,提供了許多 NLP 評估指標的實現
首先,需要安裝它:pip install evaluate sacrebleu rouge_score
import evaluate
# 加載 BLEU 指標
bleu = evaluate.load("bleu")
# 範例數據
predictions = ["The cat sat on the mat", "The dog barked loudly"]
references = [
["The cat was on the mat", "A cat sat on the mat"],
["The dog made a loud bark"]
]
# 計算 BLEU 分數
results_bleu = bleu.compute(predictions=predictions, references=references)
print("\nBLEU 分數:", results_bleu)
# 加載 ROUGE 指標
rouge = evaluate.load("rouge")
# 計算 ROUGE 分數
results_rouge = rouge.compute(predictions=predictions, references=references)
print("\nROUGE 分數:", results_rouge)
困惑度通常需要一個語言模型來計算。這裡使用 transformers 庫和一個小型 GPT-2 模型作為範例
首先,需要安裝它:pip install transformers torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# 加載預訓練模型和分詞器
model_name = "gpt2" # 可以替換為其他因果語言模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
def calculate_perplexity(text, model, tokenizer):
"""
計算文本的困惑度
"""
encodings = tokenizer(text, return_tensors="pt")
input_ids = encodings.input_ids
with torch.no_grad():
outputs = model(input_ids, labels=input_ids)
loss = outputs.loss
perplexity = torch.exp(loss)
return perplexity.item()
# 範例文本
text1 = "This is a very coherent and grammatically correct sentence."
text2 = "Apple banana orange computer table." # 語義上不連貫的句子
perplexity1 = calculate_perplexity(text1, model, tokenizer)
perplexity2 = calculate_perplexity(text2, model, tokenizer)
print(f"\n文本 1 的困惑度: {perplexity1:.2f}")
print(f"文本 2 的困惑度: {perplexity2:.2f}")
這些範例展示 LLM 評估的一些基本方法。在實際的 LLM 開發中,通常會結合多種自動化指標和人工評估來全面衡量模型的性能