iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
生成式 AI

AI咒術迴戰~LLM絕對領域展開系列 第 7

Day7- LLM評估指標(庵歌姫)

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250907/2016325751cNy96bFD.jpg

LLM評估指標

是用來量化和評估 LLM 輸出品質工具。它們根據一系列標準來評分模型輸出,確保模型在各種任務中表現良好。這些指標對於優化 LLM 的性能、識別潛在問題以及提升模型的實用性至關重要

常見評估指標類別

  • 答案相關性(Answer Relevance):評估LLM輸出是否能有效且準確地回答用戶問題,並與輸入資訊相關
  • 正確性(Correctness)與事實性 (Factuality):驗證LLM輸出是否符合事實,通常透過比對模型生成內容與已知真實資訊來計算
  • 幻覺檢測(Hallucination Detection):評估模型生成內容中是否存在不真實或憑空捏造的資訊
  • 上下文相關性(Contextual Relevance):衡量生成內容與給定上下文的匹配程度
  • 任務特定指標(Task-Specific Metrics):針對特定任務(如摘要、翻譯、問答等)設計的評估指標

優秀評估指標特點

  • 定量評估(Quantitative Evaluation):指標能計算出一個分數,以便設定通過閾值並監控性能變化
  • 可靠性(Reliability):即使LLM輸出不可預測,評估指標本身也應保持穩定和一致
  • 準確性 (Accuracy):評分應能真實反映LLM應用程式的表現,並盡可能與人類期望一致

常見評估方法

1️⃣語言模型內在指標 (Intrinsic Metrics)

這類指標主要衡量模型對語言本身的掌握程度,評估其生成文本的流暢性和語法正確性,通常在模型開發早期階段使用

🔴困惑度 (Perplexity, PPL)

這是最經典語言模型評估指標。它衡量的是模型對於一段給定文本的「驚訝程度」。困惑度越低,代表模型對於這段文本的機率分佈預測得越準確,也就說明模型認為這段文本是「意料之中」的,即更流暢、更符合語法和語氣

  • 如何運作
    它計算的是測試集中每個詞元(token)機率的幾何平均數的倒數。簡單來說,模型在預測下一個詞元時,如果能給出正確答案更高的機率,困惑度就會降低

    • 優點:計算快速,不需要人工標註的參考答案
    • 缺點:PPL 低不完全等於生成品質高。一個模型可能生成非常流暢但無意義或事實錯誤的句子,其 PPL 依然可以很低。它無法評估內容的真實性、有用性或創造性

2️⃣特定任務的自動化評估指標 (Task-Specific Automated Metrics)

這類指標通常需要一個或多個「參考答案」(Reference/Ground Truth),並透過演算法比較模型生成的答案與參考答案的相似度。它們常用於評估翻譯、摘要等任務

🟠BLEU (Bilingual Evaluation Understudy)

  • 主要用途:機器翻譯
  • 如何運作:比較機器翻譯輸出和專業人工翻譯參考文本之間 n-gram(連續 n 個詞元)重疊程度。它關注的是「精確率」(Precision),即模型生成的詞語有多少出現在參考答案中。為了懲罰過短的句子,還引入了「簡潔懲罰」(Brevity Penalty)
  • 優點:計算速度快,與人類判斷有一定相關性
  • 缺點:不擅長評估語意和語序變化。一個意思相同但用詞完全不同句子,BLEU分數可能會很低

🟡ROUGE (Recall-Oriented Understudy for Gisting Evaluation)

  • 主要用途:自動摘要(Summarization)
  • 如何運作:與 BLEU 相反,ROUGE 關注的是「召回率」(Recall),即參考答案中的詞語有多少被模型生成的摘要所覆蓋。它有多個變體:
    • ROUGE-N:基於 n-gram 的召回率
    • ROUGE-L:基於「最長公共子序列」(Longest Common Subsequence),因此更關注語句結構的相似性
  • 優點:非常適合評估摘要任務中關鍵訊息的覆蓋程度
  • 缺點:與 BLEU 類似,對於同義詞或釋義(paraphrasing)的處理能力有限

🟢BERTScore / MoverScore

  • 主要用途:更廣泛的文本生成任務
  • 如何運作:這類指標不再只看詞語表面的重疊,而是利用BERT預訓練模型的詞嵌入(word embeddings)來計算生成文本和參考文本中每個詞元之間的「語意相似度」
  • 優點:能夠更好地捕捉同義詞和語意上的相似性,比BLEU和ROUGE更先進
  • 缺點:計算成本較高,且其表現依賴於底層的嵌入模型

3️⃣綜合能力基準測試 (Comprehensive Benchmarks)

隨著LLM能力越來越強大,單一任務的指標已不足以全面評估。因此,學術界和業界開發了許多包含多種任務的綜合性基準測試集

🔴MMLU (Massive Multitask Language Understanding)

一個極具挑戰性的基準,旨在評估模型的「知識」和「解決問題」的能力

  • 如何運作:包含57個科目,橫跨初等數學、美國歷史、計算機科學、法律、現代物理學等領域。題目形式為多項選擇題。模型需要在這些專業領域展現廣泛的知識和推理能力
  • 目標:衡量模型的「通識」水平

🟠Big-Bench (Beyond the Imitation Game Benchmark)

由Google推出超大規模基準,包含超過200個任務

  • 如何運作:任務種類極其多樣,從語言學、兒童發展、數學、軟體工程到常識推理,甚至包含一些需要創造力任務,旨在探索LLM能力邊界和未來潛力

🟡HellaSwag / Winogrande

專門評估「常識推理」(Commonsense Reasoning)能力的基準

  • 如何運作:給定一個情境,模型需要從多個選項中選擇一個最合乎邏輯、最符合常識的後續。這些選項通常設計得非常巧妙,單靠統計規律很容易選錯。

🟢HumanEval / MBPP (Mostly Basic Programming Problems)

專門評估模型「程式碼生成」(Code Generation)能力的基準

  • 如何運作:提供函數的描述和幾個測試案例,要求模型生成能夠通過所有單元測試Python程式碼

4️⃣安全性、真實性與偏見評估

這類評估至關重要,因為一個模型不僅要聰明,更要安全、可靠且公正

🔴TruthfulQA

評估模型回答問題的「真實性」,專門檢測模型是否會生成常見的錯誤觀念或網路謠言

  • 如何運作:包含一系列人類已知是錯誤觀念,看模型是否會附和這些錯誤說法。高分模型應該要能辨別並拒絕回答或澄清錯誤資訊

🟠ToxiGen / BOLD

評估模型生成「有毒內容」(Toxicity)和「偏見」(Bias)的基準

  • 如何運作

    • ToxiGen:包含大量隱晦或明顯的有害言論提示,評估模型生成仇恨言論、侮辱性語言等的傾向
    • BOLD:評估模型在不同人群(性別、種族、宗教)相關的文本中,表現出的情緒、觀點等是否存在偏見

5️⃣人工評估 (Human Evaluation)

這是評估LLM品質黃金標準。 儘管自動化指標和基準很有用,但它們始終無法完全捕捉人類對語言品質的細膩感知

  • 如何運作
    • 直接評分:評分員直接對模型的生成結果打分,評分維度可能包括:有用性、真實性、無害性、流暢度、一致性等
    • 配對比較 (A/B 測試):同時呈現兩個不同模型對同一個問題的回答,讓評分員選擇哪一個更好(或平手)。這種方式更符合人類的相對判斷習慣,結果也更可靠
    • 紅隊演練 (Red Teaming):由專家模擬惡意用戶,刻意誘導模型產生不安全、有偏見或有害的回答,以測試模型的安全防護能力

🟡基於LLM評估(LLM-as-a-Judge / G-Eval)

利用另一個LLM作為評估器,根據預設的標準和提示來評估目標LLM輸出。這種方法可以提供更接近人類判斷的定性評估,並能評估更複雜的維度,例如:連貫性、流暢性、相關性等等

程式碼

以下是一些常見 LLM 評估指標的簡化程式碼範例。在實際應用中,可能會使用更完善的開源庫(Hugging Face Datasets 的 evaluate 庫、deepeval)來進行評估

🖊️餘弦相似度 (Cosine Similarity) 評估答案相關性

這需要一個預訓練的句子嵌入模型(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 庫進行 BLEU 和 ROUGE 評估

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)

🖊️困惑度 (Perplexity) 評估

困惑度通常需要一個語言模型來計算。這裡使用 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 開發中,通常會結合多種自動化指標和人工評估來全面衡量模型的性能


上一篇
Day6-LLM訓練過程(夏油傑)
下一篇
Day8-LLM優點與挑戰、應用案例、未來發展趨勢(家入硝子)
系列文
AI咒術迴戰~LLM絕對領域展開14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言