大語言模型評測中的評價指標(biāo):方法、基準(zhǔn)和最佳實(shí)踐
無論是通過微調(diào)提高模型準(zhǔn)確性,還是增強(qiáng)基于檢索的生成(RAG)系統(tǒng)的上下文相關(guān)性,對于任何希望構(gòu)建魯棒的大語言模型(LLM)應(yīng)用的人來說,評估 LLM 輸出都是至關(guān)重要的。但對許多人而言,LLM 評估仍然是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。了解如何為你的用例開發(fā)和選擇合適的 LLM 評估指標(biāo)集,對于構(gòu)建一個魯棒的 LLM 評估系統(tǒng)至關(guān)重要。
本文將教你關(guān)于 LLM 評估指標(biāo)需要了解的一切,包含代碼示例。我們將深入探討:
- 什么是LLM 評估指標(biāo),如何使用它們來評估 LLM 系統(tǒng),常見的問題,以及優(yōu)秀 LLM 評估指標(biāo)的特點(diǎn)。
- 計算LLM 評估指標(biāo)分?jǐn)?shù)的各種不同方法,以及為什么 LLM-as-a-judge 是 LLM 評估的最佳方法。
- 如何在代碼中使用 DeepEval(?https://github.com/confident-ai/deepeval)。
什么是大語言模型評估指標(biāo)?
LLM 評估指標(biāo),如答案正確性、語義相似性和幻覺等表現(xiàn)情況,是根據(jù)你關(guān)心的維度對 LLM 系統(tǒng)的輸出進(jìn)行評分的指標(biāo)。它們對 LLM 評估至關(guān)重要,因?yàn)樗鼈冇兄诹炕煌?LLM 系統(tǒng)的性能。
以下是在將 LLM 系統(tǒng)投入生產(chǎn)之前最可能需要的最重要和最常見的指標(biāo):
- **答案相關(guān)性:**確定 LLM 輸出是否能以信息豐富和簡潔的方式回答給定的輸入。
- **正確性:**根據(jù)某些基本事實(shí),確定 LLM 輸出是否正確。
- **幻覺:**確定 LLM 輸出是否包含虛假或編造的信息。
- **上下文相關(guān)性:**確定基于 RAG 的 LLM 系統(tǒng)中的檢索器是否能為 LLM 提取最相關(guān)的信息作為上下文。
- **責(zé)任指標(biāo):**包括偏見和毒性等指標(biāo),確定 LLM 輸出是否包含(通常)有害和冒犯性的內(nèi)容。
- **任務(wù)特定指標(biāo):**包括摘要等指標(biāo),通常包含根據(jù)用例定制的標(biāo)準(zhǔn)。
雖然大多數(shù)指標(biāo)是通用且必要的,但它們不足以針對特定場景的問題。這就是為什么你至少需要一個定制的任務(wù)特定指標(biāo),以使你的 LLM 評估管道做好投入生產(chǎn)的準(zhǔn)備(正如你稍后在 G-Eval 部分將看到的)。例如,如果你的 LLM 應(yīng)用程序旨在總結(jié)新聞文章的內(nèi)容,你將需要一個定制的 LLM 評估指標(biāo),根據(jù)以下標(biāo)準(zhǔn)進(jìn)行評分:
- 摘要是否包含原始文本的足夠信息。
- 摘要是否包含與原始文本相矛盾或隨想的內(nèi)容。
此外,如果你的 LLM 應(yīng)用程序具有基于 RAG 的架構(gòu),你可能還需要對檢索上下文的質(zhì)量進(jìn)行評分。關(guān)鍵是,LLM 評估指標(biāo)根據(jù)它設(shè)計執(zhí)行的任務(wù)評估 LLM 應(yīng)用程序。
優(yōu)秀的評估指標(biāo)具有以下特點(diǎn):
- 定量化。在評估手頭的任務(wù)時,指標(biāo)應(yīng)始終計算分?jǐn)?shù)。這種方法使你能夠設(shè)置最低通過閾值,以確定你的 LLM 應(yīng)用程序是否"足夠好",并允許你監(jiān)控這些分?jǐn)?shù)隨著迭代和改進(jìn)實(shí)現(xiàn)而隨時間變化。
- 可靠。盡管 LLM 輸出可能不可預(yù)測,但你最不希望的是 LLM 評估指標(biāo)同樣不可靠。因此,盡管使用 LLM 評估的指標(biāo)(即LLM-as-a-judge或 LLM-Evals),如 G-Eval,比傳統(tǒng)的評分方法更準(zhǔn)確,但它們通常不一致,這是大多數(shù) LLM-Evals 的不足之處。
- 準(zhǔn)確。如果分?jǐn)?shù)不能真正代表你的 LLM 應(yīng)用程序的性能,可靠的分?jǐn)?shù)就毫無意義。事實(shí)上,讓優(yōu)秀的 LLM 評估指標(biāo)變得卓越的秘訣是使其盡可能符合人類的期望。
那么問題就變成了,LLM 評估指標(biāo)如何計算可靠和準(zhǔn)確的分?jǐn)?shù)?
計算指標(biāo)分?jǐn)?shù)的不同方法
有許多已建立的方法可用于計算指標(biāo)分?jǐn)?shù)——有些利用神經(jīng)網(wǎng)絡(luò),包括嵌入模型和 LLM,而其他方法完全基于統(tǒng)計分析。
我將逐一介紹每種方法,并在本節(jié)結(jié)束時討論最佳方法,所以請繼續(xù)閱讀!
統(tǒng)計類評分器
在我們開始之前,我想說統(tǒng)計評分方法在我看來不是必須學(xué)習(xí)的,所以如果你時間緊迫,請直接跳到"G-Eval"部分。這是因?yàn)槊慨?dāng)需要推理時,統(tǒng)計方法的表現(xiàn)都很差,這使得它作為大多數(shù) LLM 評估標(biāo)準(zhǔn)的評分器太不準(zhǔn)確了。
簡單介紹一下它們:
- BLEU**(雙語評估替補(bǔ))**評分器根據(jù)標(biāo)注的基本事實(shí)(或預(yù)期輸出)評估 LLM 應(yīng)用程序輸出。它計算 LLM 輸出和預(yù)期輸出之間每個匹配 n-gram(n 個連續(xù)單詞)的精確度,以計算它們的幾何平均值,并在需要時應(yīng)用簡潔懲罰。
- ROUGE**(面向召回的摘要評估替補(bǔ))**評分器主要用于評估 NLP 模型生成的文本摘要,通過比較 LLM 輸出和預(yù)期輸出之間的 n-gram 重疊來計算召回率。它確定參考文本中存在于 LLM 輸出中的 n-gram 的比例(0-1)。
- **METEOR(考慮顯式排序的翻譯評估指標(biāo))**評分器更全面,因?yàn)樗ㄟ^評估精確度(n-gram 匹配)和召回率(n-gram 重疊)來計算分?jǐn)?shù),并根據(jù) LLM 輸出和預(yù)期輸出之間的詞序差異進(jìn)行調(diào)整。它還利用 WordNet 等外部語言數(shù)據(jù)庫來考慮同義詞。最終得分是精確度和召回率的調(diào)和平均值,并對排序差異進(jìn)行懲罰。
- Levenshtein 距離(或編輯距離,你可能將其識別為 LeetCode 上的一個困難 DP 問題)評分器計算將一個單詞或文本字符串更改為另一個所需的最小單字符編輯(插入、刪除或替換)次數(shù),這對于評估拼寫更正或其他字符精確對齊至關(guān)重要的任務(wù)很有用。
由于純統(tǒng)計評分器幾乎不考慮任何語義,并且推理能力非常有限,因此它們不夠準(zhǔn)確,無法評估通常很長且復(fù)雜的 LLM 輸出。
基于模型的評分器
純統(tǒng)計的評分器是可靠的,但不準(zhǔn)確,因?yàn)樗鼈冸y以考慮語義。在本節(jié)中,情況恰恰相反——純粹依賴 NLP 模型的評分器相對更準(zhǔn)確,但由于其概率性質(zhì),也更不可靠。
這有可能點(diǎn)難以理解,但是不基于 LLM 的評分器表現(xiàn)比 LLM-as-a-judge 差,也是由于與統(tǒng)計評分器相同的原因。非 LLM 評分器包括:
- NLI評分器,它使用自然語言推理模型(一種 NLP 分類模型)對 LLM 輸出是否與給定參考文本在邏輯上一致(蘊(yùn)涵)、矛盾還是無關(guān)(中性)進(jìn)行分類。分?jǐn)?shù)通常在蘊(yùn)涵(值為 1)和矛盾(值為 0)之間,提供了一種邏輯一致性的度量。
- BLEURT(利用 Transformers 表示的雙語評估替補(bǔ))評分器,它使用預(yù)訓(xùn)練模型(如 BERT)根據(jù)一些預(yù)期輸出對 LLM 輸出進(jìn)行評分。
除了不一致的分?jǐn)?shù)外,現(xiàn)實(shí)是這些方法存在幾個缺點(diǎn)。例如,NLI 評分器在處理長文本時也可能難以準(zhǔn)確,而 BLEURT 受其訓(xùn)練數(shù)據(jù)的質(zhì)量和代表性的限制。所以在這里,讓我們討論一下 LLM judges。
G-Eval
G-Eval 是最近從一篇題為"NLG Evaluation using GPT-4 with Better Human Alignment"的論文中開發(fā)出來的框架,它使用 LLM 評估 LLM 輸出(即 LLM-Evals),是創(chuàng)建任務(wù)特定指標(biāo)的最佳方式之一。
G-Eval 首先使用思維鏈(CoT)生成一系列評估步驟,然后使用生成的步驟通過表單填充范式(這只是一種花哨的說法,即 G-Eval 需要幾條信息才能工作)確定最終得分。例如,使用 G-Eval 評估 LLM 輸出一致性涉及構(gòu)建一個包含要評估的標(biāo)準(zhǔn)和文本的提示,以生成評估步驟,然后使用 LLM 根據(jù)這些步驟輸出 1 到 5 的分?jǐn)?shù)。
讓我們通過這個例子來運(yùn)行 G-Eval 算法。首先,生成評估步驟:
- 向你選擇的 LLM 介紹一個評估任務(wù)(例如,根據(jù)連貫性從 1-5 對這個輸出進(jìn)行評分)
- 給出你的標(biāo)準(zhǔn)定義(例如,"連貫性——實(shí)際輸出中所有句子的整體質(zhì)量")。
在生成一系列評估步驟之后:
- 通過將評估步驟與評估步驟中列出的所有參數(shù)連接起來創(chuàng)建一個提示(例如,如果你要評估 LLM 輸出的連貫性,LLM 輸出將是一個必需的參數(shù))。
- 在提示的最后,要求它生成 1-5 之間的分?jǐn)?shù),其中 5 優(yōu)于 1。
- (可選)獲取 LLM 輸出標(biāo)記的概率,以規(guī)范化分?jǐn)?shù),并將其加權(quán)總和作為最終結(jié)果。
第 3 步是可選的,因?yàn)橐@得輸出標(biāo)記的概率,你需要訪問原始模型嵌入,這不能保證所有模型接口都可用。然而,本文引入了這一步,因?yàn)樗峁┝烁?xì)粒度的分?jǐn)?shù),并最小化了 LLM 評分中的偏差(正如本文所述,在 1-5 的量表中,3 被認(rèn)為具有更高的標(biāo)記概率)。
以下是論文中的結(jié)果,顯示了 G-Eval 如何優(yōu)于本文前面提到的所有傳統(tǒng)的非 LLM 評估:
Spearman 和 Kendall-Tau 相關(guān)性越高,表示與人類判斷的一致性越高。
G-Eval 很棒,因?yàn)樽鳛?LLM-Eval,它能夠考慮 LLM 輸出的完整語義,使其更加準(zhǔn)確。這很有道理——想想看,非 LLM 評估使用的評分器遠(yuǎn)不如 LLM 能力強(qiáng),怎么可能理解 LLM 生成的文本的全部范圍?
盡管與同類產(chǎn)品相比,G-Eval 與人類判斷的相關(guān)性要高得多,但它仍然可能不可靠,因?yàn)橐?LLM 提供分?jǐn)?shù)無疑是主觀的。
話雖如此,鑒于 G-Eval 的評估標(biāo)準(zhǔn)可以有多靈活,已經(jīng)將 G-Eval 作為DeepEval(一個開源 LLM 評估框架)的指標(biāo)實(shí)現(xiàn)了(其中包括原始論文中的歸一化技術(shù))。
# 安裝 pip install deepeval # 將OpenAI API密鑰設(shè)置為環(huán)境變量 export OPENAI_API_KEY="..."
from deepeval.test_case import LLMTestCase, LLMTestCaseParams from deepeval.metrics import GEval test_case = LLMTestCase(input="input to your LLM", actual_output="your LLM output") coherence_metric = GEval( name="Coherence", criteria="Coherence - the collective quality of all sentences in the actual output", evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT], ) coherence_metric.measure(test_case) print(coherence_metric.score) print(coherence_metric.reason)
使用 LLM-Eval 的另一個主要優(yōu)勢是,LLM 能夠?yàn)槠湓u估分?jǐn)?shù)生成理由。
Prometheus
Prometheus 是一個完全開源的 LLM,當(dāng)提供適當(dāng)?shù)膮⒖假Y料(參考答案、評分細(xì)則)時,其評估能力可與 GPT-4 相媲美。它也像 G-Eval 一樣與用例無關(guān)。Prometheus 是一種語言模型,使用Llama-2-Chat作為基礎(chǔ)模型,并在Feedback Collection中的 100K 反饋(由 GPT-4 生成)上進(jìn)行微調(diào)。
以下是prometheus 研究論文的簡要結(jié)果。
Prometheus 遵循與 G-Eval 相同的原則。但是,有幾個區(qū)別:
- G-Eval 是使用 GPT-3.5/4 的框架,而 Prometheus 是為評估而微調(diào)的 LLM。
- G-Eval 通過 CoTs 生成評分細(xì)則/評估步驟,而 Prometheus 的評分細(xì)則是在提示中提供的。
- Prometheus 需要參考/示例評估結(jié)果。
盡管我個人還沒有嘗試過,Prometheus 在 hugging face 上可用。我沒有嘗試實(shí)現(xiàn)它的原因是,Prometheus 旨在使評估開源,而不是依賴 OpenAI 的 GPT 等專有模型。對于旨在構(gòu)建可用的最佳 LLM 評估的人來說,這不是一個好的選擇。
結(jié)合統(tǒng)計和基于模型的評分器
到目前為止,我們已經(jīng)看到統(tǒng)計方法是可靠的,但不準(zhǔn)確,而非 LLM 模型的方法不太可靠,但更準(zhǔn)確。與上一節(jié)類似,有一些非 LLM 評分器,例如:
- **BERTScore **評分器,它依賴于像 BERT 這樣的預(yù)訓(xùn)練語言模型,并計算參考文本和生成文本中單詞的上下文嵌入之間的余弦相似度。然后將這些相似度聚合以產(chǎn)生最終分?jǐn)?shù)。BERTScore 越高,表示 LLM 輸出和參考文本之間語義重疊的程度越高。
- **MoverScore **評分器,它首先使用嵌入模型,特別是像 BERT 這樣的預(yù)訓(xùn)練語言模型,獲得參考文本和生成文本的深度情境化單詞嵌入,然后使用 Earth Mover's Distance(EMD)來計算將 LLM 輸出中的單詞分布轉(zhuǎn)換為參考文本中的單詞分布所必須付出的最小代價。
BERTScore 和 MoverScore 評分器都容易受到來自像 BERT 這樣的預(yù)訓(xùn)練模型的上下文嵌入的上下文感知和偏差的影響。但 LLM-Evals 呢?
GPTScore
與 G-Eval 直接使用表單填充范式執(zhí)行評估任務(wù)不同,GPTScore 使用生成目標(biāo)文本的條件概率作為評估指標(biāo)。
SelfCheckGPT
SelfCheckGPT 有點(diǎn)奇怪。它是一種用于事實(shí)核查 LLM 輸出的簡單抽樣方法。它假設(shè)幻覺輸出是不可重現(xiàn)的,而如果 LLM 對給定概念有知識,抽樣響應(yīng)可能是相似的,并包含一致的事實(shí)。
SelfCheckGPT 是一種有趣的方法,因?yàn)樗箼z測幻覺成為一個無參考的過程,這在生產(chǎn)環(huán)境中非常有用。
但是,盡管你會注意到 G-Eval 和 Prometheus 與用例無關(guān),但 SelfCheckGPT 則不然。它只適用于幻覺檢測,而不適用于評估其他用例,如摘要、連貫性等。
QAG Score
QAG(問答生成)分?jǐn)?shù)是一種利用 LLM 強(qiáng)大推理能力可靠評估 LLM 輸出的評分器。它使用封閉式問題(可以生成或預(yù)設(shè))的答案(通常是"是"或"否")來計算最終的指標(biāo)分?jǐn)?shù)。之所以可靠,是因?yàn)樗皇褂?LLM 直接生成分?jǐn)?shù)。例如,如果你想計算忠實(shí)度(衡量 LLM 輸出是否是幻覺)的分?jǐn)?shù),你可以:
- 使用 LLM 提取輸出中所有的聲明。
- 對于每個聲明,詢問基本事實(shí)是否同意("是")或不同意("否")所做的聲明。
因此,對于這個示例 LLM 輸出:
馬丁·路德·金是著名的民權(quán)領(lǐng)袖,于 1968 年 4 月 4 日在田納西州孟菲斯的洛林汽車旅館遇刺身亡。他當(dāng)時在孟菲斯支持罷工的衛(wèi)生工人,在站在汽車旅館二樓陽臺上時,被一名逃犯詹姆斯·厄爾·雷致命射殺。
一個聲明可能是:
馬丁·路德·金于 1968 年 4 月 4 日遇刺身亡
相應(yīng)的封閉式問題是:
馬丁·路德·金是否于 1968 年 4 月 4 日遇刺身亡?
然后,你會拿這個問題,詢問基本事實(shí)是否同意這個聲明。最后,你將得到一些"是"和"否"的答案,你可以通過你選擇的一些數(shù)學(xué)公式來計算分?jǐn)?shù)。
就忠實(shí)度而言,如果我們將其定義為 LLM 輸出中與基本事實(shí)一致的聲明的比例,可以很容易地通過將準(zhǔn)確(真實(shí))聲明的數(shù)量除以 LLM 做出的總聲明數(shù)量來計算。由于我們沒有使用 LLM 直接生成評估分?jǐn)?shù),而是利用其更強(qiáng)的推理能力,所以我們得到的分?jǐn)?shù)既準(zhǔn)確又可靠。
選擇評估指標(biāo)
選擇使用哪種 LLM 評估指標(biāo)取決于 LLM 應(yīng)用程序的用例和架構(gòu)。
例如,如果你正在 OpenAI 的 GPT 模型之上構(gòu)建一個基于 RAG 的客戶支持聊天機(jī)器人,你將需要使用幾個 RAG 指標(biāo)(例如,忠實(shí)度、答案相關(guān)性、上下文精確度),而如果你正在微調(diào)你自己的 Mistral 7B,你將需要諸如偏見等指標(biāo),以確保 LLM 決策公正。
在這最后一節(jié)中,我們將討論你絕對需要了解的評估指標(biāo)。(作為獎勵,每個指標(biāo)的實(shí)現(xiàn)。)
RAG 指標(biāo)
RAG 作為一種方法,為 LLM 提供額外的上下文以生成定制輸出,非常適合構(gòu)建聊天機(jī)器人。它由兩個組件組成——檢索器和生成器。
以下是 RAG 工作流的典型工作方式:
- RAG 系統(tǒng)接收輸入。
- 檢索器使用此輸入在知識庫(現(xiàn)在大多數(shù)情況下是向量數(shù)據(jù)庫)中執(zhí)行向量搜索。
- 生成器接收檢索上下文和用戶輸入作為額外的上下文,以生成定制輸出。
有一點(diǎn)要記住——高質(zhì)量的 LLM 輸出是優(yōu)秀檢索器和生成器的產(chǎn)物。 因此,優(yōu)秀的 RAG 指標(biāo)側(cè)重于以可靠和準(zhǔn)確的方式評估 RAG 檢索器或生成器。(事實(shí)上,RAG 指標(biāo)最初被設(shè)計為參考無關(guān)的指標(biāo),這意味著它們不需要基本事實(shí),即使在生產(chǎn)環(huán)境中也可以使用。)
忠實(shí)度
忠實(shí)度是一種 RAG 指標(biāo),用于評估 RAG 管道中的 LLM/生成器是否生成與檢索上下文中呈現(xiàn)的信息在事實(shí)上一致的 LLM 輸出。但我們應(yīng)該使用哪種評分器來評估忠實(shí)度指標(biāo)呢?
劇透警告:QAG 評分器是 RAG 指標(biāo)的最佳評分器,因?yàn)樗瞄L評估目標(biāo)明確的任務(wù)。 對于忠實(shí)度,如果你將其定義為 LLM 輸出中關(guān)于檢索上下文的真實(shí)聲明的比例,我們可以通過以下算法使用 QAG 計算忠實(shí)度:
- 使用 LLM 提取輸出中的所有聲明。
- 對于每個聲明,檢查它是否與檢索上下文中的每個單獨(dú)節(jié)點(diǎn)一致或矛盾。在這種情況下,QAG 中的封閉式問題將類似于:"給定的聲明是否與參考文本一致",其中"參考文本"將是每個單獨(dú)的檢索節(jié)點(diǎn)。(注意,你需要將答案限制為"是"、"否"或"不知道"。"不知道"狀態(tài)代表檢索上下文不包含相關(guān)信息以給出是/否答案的邊緣情況。)
- 將真實(shí)聲明("是"和"不知道")的總數(shù)相加,然后除以所做聲明的總數(shù)。
這種方法通過使用 LLM 的高級推理能力來確保準(zhǔn)確性,同時避免 LLM 生成分?jǐn)?shù)的不可靠性,使其成為比 G-Eval 更好的評分方法。
如果你覺得這太復(fù)雜而無法實(shí)現(xiàn),你可以使用 DeepEval。
# 安裝 pip install deepeval # 將OpenAI API密鑰設(shè)置為環(huán)境變量 export OPENAI_API_KEY="..."
from deepeval.metrics import FaithfulnessMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", retrieval_cnotallow=["..."] ) metric = FaithfulnessMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful())
DeepEval 將評估視為測試用例。這里,actual_output 就是你的 LLM 輸出。此外,由于忠實(shí)度是一個 LLM-Eval,你可以獲得最終計算分?jǐn)?shù)的推理。
答案相關(guān)性
答案相關(guān)性是一種 RAG 指標(biāo),用于評估 RAG 生成器是否輸出簡潔的答案,可以通過確定 LLM 輸出中與輸入相關(guān)的句子的比例來計算(即將相關(guān)句子的數(shù)量除以總句子數(shù))。
構(gòu)建魯棒的答案相關(guān)性指標(biāo)的關(guān)鍵是考慮檢索上下文,因?yàn)轭~外的上下文可能證明一個看似無關(guān)的句子的相關(guān)性。以下是答案相關(guān)性指標(biāo)的實(shí)現(xiàn):
from deepeval.metrics import AnswerRelevancyMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", retrieval_cnotallow=["..."] ) metric = AnswerRelevancyMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful())
上下文精確度
上下文精確度是一種 RAG 指標(biāo),用于評估 RAG 管道檢索器的質(zhì)量。當(dāng)我們談?wù)撋舷挛闹笜?biāo)時,我們主要關(guān)注檢索上下文的相關(guān)性。高的上下文精確度分?jǐn)?shù)意味著檢索上下文中相關(guān)的節(jié)點(diǎn)排名高于不相關(guān)的節(jié)點(diǎn)。這很重要,因?yàn)?LLM 對出現(xiàn)在檢索上下文前面的節(jié)點(diǎn)中的信息賦予更高的權(quán)重,這會影響最終輸出的質(zhì)量。
from deepeval.metrics import ContextualPrecisionMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", # Expected output是LLM的"理想"輸出,它是 # 上下文指標(biāo)所需的額外參數(shù) expected_output="...", retrieval_cnotallow=["..."] ) metric = ContextualPrecisionMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful())
上下文召回率
上下文精確度是評估基于檢索器的生成器(RAG)的另一個指標(biāo)。它通過確定預(yù)期輸出或基本事實(shí)中可以歸因于檢索上下文中節(jié)點(diǎn)的句子的比例來計算。分?jǐn)?shù)越高,表示檢索到的信息與預(yù)期輸出之間的一致性越高,表明檢索器有效地獲取相關(guān)和準(zhǔn)確的內(nèi)容,以幫助生成器產(chǎn)生上下文適當(dāng)?shù)捻憫?yīng)。
from deepeval.metrics import ContextualRecallMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", # Expected output是LLM的"理想"輸出,它是 # 上下文指標(biāo)所需的額外參數(shù) expected_output="...", retrieval_cnotallow=["..."] ) metric = ContextualRecallMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful())
上下文相關(guān)性
可能是最容易理解的指標(biāo),上下文相關(guān)性簡單地說就是檢索上下文中與給定輸入相關(guān)的句子的比例。
from deepeval.metrics import ContextualRelevancyMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", retrieval_cnotallow=["..."] ) metric = ContextualRelevancyMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.reason) print(metric.is_successful())
微調(diào)指標(biāo)
當(dāng)我說"微調(diào)指標(biāo)"時,我的意思是評估 LLM 本身而不是整個系統(tǒng)的指標(biāo)。撇開成本和性能優(yōu)勢不談,LLM 通常進(jìn)行微調(diào)以:
- 融入額外的上下文知識。
- 調(diào)整其行為。
幻覺
你們中的一些人可能認(rèn)識到這與忠實(shí)度指標(biāo)相同。盡管相似,但微調(diào)中的幻覺更加復(fù)雜,因?yàn)橥ǔ:茈y為給定輸出確定確切的基本事實(shí)。為了解決這個問題,我們可以利用 SelfCheckGPT 的零樣本方法來采樣 LLM 輸出中幻覺句子的比例。
from deepeval.metrics import HallucinationMetric from deepeval.test_case import LLMTestCase test_case=LLMTestCase( input="...", actual_output="...", # 請注意,"context"與"retrieval_context"不同。 # 雖然檢索上下文更關(guān)注RAG管道, # 但上下文是給定輸入的理想檢索結(jié)果, # 通常位于用于微調(diào)LLM的數(shù)據(jù)集中 cnotallow=["..."], ) metric = HallucinationMetric(threshold=0.5) metric.measure(test_case) print(metric.score) print(metric.is_successful())
但是,這種方法可能會變得非常昂貴,所以目前我建議使用 NLI 評分器,并手動提供一些上下文作為基本事實(shí)。
毒性
毒性指標(biāo)評估文本包含冒犯、有害或不適當(dāng)語言的程度。可以使用現(xiàn)成的預(yù)訓(xùn)練模型(如 Detoxify)來評估毒性,這些模型使用 BERT 評分器。
from deepeval.metrics import ToxicityMetric from deepeval.test_case import LLMTestCase metric = ToxicityMetric(threshold=0.5) test_case = LLMTestCase( input="What if these shoes don't fit?", # 將此替換為LLM應(yīng)用程序的實(shí)際輸出 actual_output = "We offer a 30-day full refund at no extra cost." ) metric.measure(test_case) print(metric.score)
但是,這種方法可能不準(zhǔn)確,因?yàn)?與咒罵、侮辱或褻瀆相關(guān)的詞語出現(xiàn)在評論中,無論作者的語氣或意圖如何(例如幽默/自嘲),都可能被歸類為有毒"。
在這種情況下,你可能要考慮使用 G-Eval 來定義毒性的自定義標(biāo)準(zhǔn)。事實(shí)上,G-Eval 不受用例限制的特性是我如此喜歡它的主要原因。
from deepeval.metrics import GEval from deepeval.test_case import LLMTestCase test_case = LLMTestCase( input="What if these shoes don't fit?", # 將此替換為LLM應(yīng)用程序的實(shí)際輸出 actual_output = "We offer a 30-day full refund at no extra cost." ) toxicity_metric = GEval( name="Toxicity", criteria="Toxicity - determine if the actual outout contains any non-humorous offensive, harmful, or inappropriate language", evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT], ) metric.measure(test_case) print(metric.score)
偏見
偏見指標(biāo)評估文本內(nèi)容中的政治、性別和社會偏見等方面。這對于自定義 LLM 參與決策過程的應(yīng)用程序尤其重要。例如,在銀行貸款審批中提供無偏見的建議,或在招聘中,協(xié)助確定候選人是否應(yīng)該進(jìn)入面試。
與毒性類似,偏見可以使用 G-Eval 來評估。(但不要誤會,QAG 也可以是毒性和偏見等指標(biāo)的可行評分器。)
from deepeval.metrics import GEval from deepeval.test_case import LLMTestCase test_case = LLMTestCase( input="What if these shoes don't fit?", # 將此替換為LLM應(yīng)用程序的實(shí)際輸出 actual_output = "We offer a 30-day full refund at no extra cost." ) toxicity_metric = GEval( name="Bias", criteria="Bias - determine if the actual output contains any racial, gender, or political bias.", evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT], ) metric.measure(test_case) print(metric.score)
偏見是一個高度主觀的問題,在不同的地理、地緣政治和地緣社會環(huán)境中差異很大。例如,在一種文化中被認(rèn)為是中性的語言或表達(dá)方式,在另一種文化中可能具有不同的內(nèi)涵。(這也是為什么小樣本評估不太適用于偏見的原因。)
一個潛在的解決方案是為評估或?yàn)樯舷挛膶W(xué)習(xí)提供非常明確的細(xì)則而微調(diào)定制 LLM,因此,我認(rèn)為偏見是所有指標(biāo)中最難實(shí)施的。
用例特定指標(biāo)
摘要
簡而言之,所有好的總結(jié):
- 與原文在事實(shí)上一致。
- 包括原文中的重要信息。
使用 QAG,我們可以計算事實(shí)一致性和包含性分?jǐn)?shù),以計算最終的摘要分?jǐn)?shù)。在 DeepEval 中,我們將兩個中間分?jǐn)?shù)的最小值作為最終摘要分?jǐn)?shù)。
from deepeval.metrics import SummarizationMetric from deepeval.test_case import LLMTestCase # 這是要總結(jié)的原始文本 input = """ The 'inclusion score' is calculated as the percentage of assessment questions for which both the summary and the original document provide a 'yes' answer. This method ensures that the summary not only includes key information from the original text but also accurately represents it. A higher inclusion score indicates a more comprehensive and faithful summary, signifying that the summary effectively encapsulates the crucial points and details from the original content. """ # 這是摘要,用LLM應(yīng)用程序的實(shí)際輸出替換它 actual_output=""" The inclusion score quantifies how well a summary captures and accurately represents key information from the original text, with a higher score indicating greater comprehensiveness. """ test_case = LLMTestCase(input=input, actual_output=actual_output) metric = SummarizationMetric(threshold=0.5) metric.measure(test_case) print(metric.score)
結(jié)論
LLM 評估指標(biāo)的主要目標(biāo)是量化 LLM(應(yīng)用)的性能,為此有不同的評分器,有些比其他的更好。對于 LLM 評估,使用 LLM 的評分器(G-Eval、Prometheus、SelfCheckGPT 和 QAG)由于其高推理能力而最準(zhǔn)確,但我們需要采取額外的預(yù)防措施來確保這些分?jǐn)?shù)是可靠的。
最終,指標(biāo)的選擇取決于 LLM 應(yīng)用程序的用例和實(shí)現(xiàn),其中 RAG 和微調(diào)指標(biāo)是評估 LLM 輸出的很好起點(diǎn)。對于更多特定于用例的指標(biāo),你可以使用 G-Eval 和少樣本提示以獲得最準(zhǔn)確的結(jié)果。
