【模型常見評價指標(分類)】

目錄

常見指標

其他的評估指標

3.1 BLEU

3.2 ROUGE

3.3 困惑度PPL(perplexity)

常見指標

其他的評估指標

3.1 BLEU

BLEU(Bilingual Evaluation Understudy,雙語評估替補)分數是評估一種語言翻譯成另一種語言的文本質量的指標。它將“質量”的好壞定義為與人類翻譯結果的一致性程度。

BLEU是一種廣泛用于評估機器翻譯文本生成任務的自動評價指標,它通過比較生成文本(Candidate)參考文本(Reference)之間的n-gram重疊程度,量化生成質量。

BLEU算法實際上就是在判斷兩個句子的相似程度. BLEU 的分數取值范圍是 0~1,分數越接近1,說明翻譯的質量越高。

BLEU有許多變種,根據n-gram可以劃分成多種評價指標,常見的評價指標有BLEU-1、BLEU-2、BLEU-3、BLEU-4四種,其中n-gram指的是連續的單詞個數為n,BLEU-1衡量的是單詞級別的準確性,更高階的BLEU可以衡量句子的流暢性.實踐中,通常是取N=1~4,然后對進行加權平均。


下面舉例說計算過程:

  • 基本步驟:

    • 分別計算預測文本candidate和目標文本reference的N-gram模型,然后統計其匹配的個數,計算匹配度

    • 公式

      • BLEU-N = (Σ Count_match(N-gram)) / (Σ Count(N-gram in candidate))

      • candidate和reference中匹配的 n?gram 的個數 / candidate中 n?gram 的個數.

  • 假設分別給出一個預測文本和目標文本如下:

預測文本: It is a nice day today
目標文本: today is a nice day
  • 使用1-gram進行匹配

預測文本: {it, is, a, nice, day, today}
目標文本: {today, is, a, nice, day}
?
結果:其中{today, is, a, nice, day}匹配,所以匹配度為5/6
  • 使用2-gram進行匹配

預測文本: {it is, is a, a nice, nice day, day today}
目標文本: {today is, is a, a nice, nice day}
?
結果:其中{is a, a nice, nice day}匹配,所以匹配度為3/5
  • 使用3-gram進行匹配

預測文本: {it is a, is a nice, a nice day, nice day today}
目標文本: {today is a, is a nice, a nice day}
?
結果:其中{is a nice, a nice day}匹配,所以匹配度為2/4
  • 使用4-gram進行匹配

預測文本: {it is a nice, is a nice day, a nice day today}
目標文本: {today is a nice, is a nice day}
?
結果:其中{is a nice day}匹配,所以匹配度為1/3

上述例子會出現一種極端情況,請看下面示例:

預測文本: the the the the
目標文本: The cat is standing on the ground
如果按照1-gram的方法進行匹配,則匹配度為1,顯然是不合理的,所以計算某個詞的出現次數進行改進
  • 將計算某個詞正確預測次數的方法改為計算某個詞在文本中出現的最小次數,如下所示的公式:

  • 其中$k$表示在預測文本中出現的第$k$個詞語, $c_k$則代表在預測文本中這個詞語出現的次數,而$s_k$則代表在目標文本中這個詞語出現的次數。


python代碼實現:

BLEU計算公式:

BLEU 評分范圍

  • BLEU 分數范圍:0 ~ 1(通常用 0 ~ 100 表示)

  • 一般理解:

    BLEU 分數質量
    90 - 100幾乎完美
    70 - 90高質量
    50 - 70可接受
    30 - 50勉強可用
    0 - 30低質量
# 第一步安裝nltk的包-->pip install nltk
from nltk.translate.bleu_score import sentence_bleudef cumulative_bleu(reference, candidate):# 指標計算:p1^w1*p2^w2 =0.6^0.5*0.25^0.5 = 0.387# math.exp(0.5 * math.log(0.6) + 0.5 * math.log(0.25)) =# math.exp(0.5*math.log(0.15)) = math.exp(math.log(0.15)^0.5) = 0.15^0.5 = 0.387bleu_1_gram = sentence_bleu(reference, candidate, weights=(1, 0, 0, 0))bleu_2_gram = sentence_bleu(reference, candidate, weights=(0.5, 0.5, 0, 0))bleu_3_gram = sentence_bleu(reference, candidate, weights=(0.33, 0.33, 0.33, 0))bleu_4_gram = sentence_bleu(reference, candidate, weights=(0.25, 0.25, 0.25, 0.25))# print('bleu 1-gram: %f' % bleu_1_gram)# print('bleu 2-gram: %f' % bleu_2_gram)# print('bleu 3-gram: %f' % bleu_3_gram)# print('bleu 4-gram: %f' % bleu_4_gram)return bleu_1_gram, bleu_2_gram, bleu_3_gram, bleu_4_gram# 預測文本
candidate_text = ["This", "is",  "some",  "generated", "text"]# 目標文本列表
reference_texts = [["This", "is",  "a",  "reference", "text"],["This", "is",  "another", "reference", "text"]]# 計算 Bleu 指標
c_bleu = cumulative_bleu(reference_texts, candidate_text)# 打印結果print("The Bleu score is:", c_bleu)
# The Bleu score is: (0.6, 0.387, 1.5949011744633917e-102, 9.283142785759642e-155)
3.2 ROUGE

ROUGE(Recall-Oriented Understudy for Gisting Evaluation)指標是在機器翻譯、自動摘要、問答生成等領域常見的評估指標。ROUGE通過將模型生成的摘要或者回答與參考答案(一般是人工生成的)進行比較計算,得到對應的得分,專門用于衡量自動生成文本與人工參考文本之間的相似度。

ROUGE指標與BLEU指標非常類似,均可用來衡量生成結果和標準結果的匹配程度,不同的是ROUGE基于召回率,BLEU更看重準確率。

ROUGE分為四種方法:ROUGE-N, ROUGE-L, ROUGE-W, ROUGE-S.


下面舉例說計算過程(這里只介紹ROUGE-N):

  • 計算公式:ROUGE-N = (Σ Count_match(N-gram)) / (Σ Count(N-gram in reference))

  • 基本步驟:Rouge-N實際上是將模型生成的結果和標準結果按N-gram拆分后,計算召回率

  • 假設模型預測文本和一個目標文本如下:

預測文本: It is a nice day today
目標文本: Today is a nice day
  • 使用ROUGE-1進行匹配

預測文本: {it, is, a, nice, day, today}
目標文本: {today, is, a, nice, day}
結果::其中{today, is, a, nice, day}匹配,所以匹配度為5/5=1,這說明生成的內容完全覆蓋了參考文本中的所有單詞,質量較高。
  • 通過類似的方法,可以計算出其他ROUGE指標(如ROUGE-2、ROUGE-L、ROUGE-S)的評分,從而綜合評估系統生成的文本質量。


python代碼實現:

# 第一步:安裝rouge-->pip install rouge
from rouge import Rouge# 預測文本
generated_text = "This is some generated text."# 目標文本列表
reference_texts = ["This is a reference text.", "This is another generated reference text."]# 計算 ROUGE 指標
rouge = Rouge()
scores = rouge.get_scores(generated_text, reference_texts[1])# 打印結果
print("ROUGE-1 precision:", scores[0]["rouge-1"]["p"])
print("ROUGE-1 recall:", scores[0]["rouge-1"]["r"])
print("ROUGE-1 F1 score:", scores[0]["rouge-1"]["f"])
# ROUGE-1 precision: 0.8
# ROUGE-1 recall: 0.6666666666666666
# ROUGE-1 F1 score: 0.7272727223140496

3.3 困惑度PPL(perplexity)

PPL用來度量一個概率分布或概率模型預測樣本的好壞程度。PPL表示模型在預測下一個詞時的“平均不確定性”,可以理解為模型需要“猜測多少次才能正確預測下一個詞”。

PPL基本思想:

  • 給測試集的句子賦予較高概率值的語言模型較好,當語言模型訓練完之后,測試集中的句子都是正常的句子,那么訓練好的模型就是在測試集上的概率越高越好.

  • 基本公式(兩種方式):

?

??

?

  • 由公式可知,句子概率越大,語言模型越好,困惑度越小。

import math# 定義語料庫
sentences = [['I', 'have', 'a', 'pen'],['He', 'has', 'a', 'book'],['She', 'has', 'a', 'cat']
]
# 定義語言模型
unigram = {'I': 1 / 12,'have': 1 / 12,'a': 3 / 12,'pen': 1 / 12,'He': 1 / 12,'has': 2 / 12,'book': 1 / 12,'She': 1 / 12,'cat': 1 / 12
}
# 初始化困惑度為0
perplexity = 0
# 循環遍歷語料庫
for sentence in sentences:# 計算句子的概率, 句子概率等于所有單詞的概率相乘sentence_prob = 1# 循環遍歷句子中的每個單詞for word in sentence:# 計算單詞的概率并累乘, 得到句子的概率sentence_prob *= unigram[word]# -1/N * log(P(W1W2...Wn))temp = -math.log(sentence_prob, 2) / len(sentence)# 累加句子的困惑度perplexity += 2 ** temp
# 計算困惑度 2**(-1/N * log(P(W1W2...Wn)))
perplexity = perplexity / len(sentences)
print('困惑度為:', perplexity)
# 困惑度為:8.15

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79372.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79372.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79372.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

期貨數據API對接實戰指南

一、期貨數據接口概述 StockTV提供全球主要期貨市場的實時行情與歷史數據接口,覆蓋以下品種: 商品期貨:原油、黃金、白銀、銅、天然氣、農產品等金融期貨:股指期貨、國債期貨特色品種:馬棕油、鐵礦石等區域特色期貨 …

TCP連接建立:為什么是三次握手?

接下來,以三個方面分析三次握手的原因: 1、三次握手才可以阻止重復歷史連接的初始化(主要原因) 2、三次握手才可以同步雙方的初始化序列號 3、三次握手才可以避免資源浪費 原因一:避免歷史連接 簡單來說&#xff0…

Table類型的表單

形如下面的圖片 1 label與prop屬性 const columns[{label: "文件名",prop: "fileName",scopedSlots: "fileName",},{ label: "刪除時間",prop: "recoveryTime",width: "200",},{ label: "大小",prop:…

Cesium 加載 本地 b3dm 格式文件 并且 獲取鼠標點擊處經緯度 (親測可用)

很奇怪cesium 里面只支持 相對路徑 不支持絕對路徑 我把 模型放在 /***/Cesium-1.128/Apps/SampleData/Cesium3DTiles/Tilesets 下面 "../../SampleData/Cesium3DTiles/Tilesets/terra_b3dms/tileset.json",所有源碼 const viewer new Cesium.Viewer("cesiu…

Spring AI核心之“ChatClient”-來自DeepSeek

在 Spring AI 生態中,ChatClient 是一個面向開發者設計的高層抽象接口,它簡化了與大型語言模型(LLMs)的交互流程,尤其適用于需要快速構建端到端 AI 應用(如聊天機器人、RAG 問答系統等)的場景。…

購買電腦時,主要需要關注以下核心配置,它們直接影響性能、使用體驗和價格。根據需求(辦公、游戲、設計、編程等),側重點會有所不同。看看Deepseek的建議

1. 處理器(CPU) 作用:電腦的“大腦”,影響整體運算速度和多任務處理能力。關鍵參數: 品牌與型號:Intel(酷睿i3/i5/i7/i9)或 AMD(銳龍R3/R5/R7/R9)。核心/線程…

408數據結構緒論刷題001

答案:D 解析: ? A選項:數據元素是組成數據對象的基本單位 ,它只是數據的基本個體,不能完整定義數據結構,所以A選項錯誤。 ? B選項:數據對象是性質相同的數據元素的集合,僅僅描述…

c++STL——vector的使用和模擬實現

文章目錄 vector的使用和模擬實現vector的使用vector介紹重點接口的講解迭代器部分默認成員函數空間操作增刪查改操作迭代器失效問題(重要)調整迭代器 vector的模擬實現實現的版本模擬實現結構預先處理的函數尾插函數push_backswap函數賦值重載size函數reserve函數 迭代器默認成…

Java深入

String相關的類 1.String不可變的類 源碼&#xff1a; public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];/** Cache the hash code for th…

【Java編程】【計算機視覺】一種簡單的圖片加/解密算法

by Li y.c. 一、內容簡介 本文介紹一種簡單的圖片加/解密算法&#xff0c;算法的基本原理十分簡單&#xff0c;即逐個&#xff08;逐行、逐列&#xff09;地獲取圖片的像素點顏色值&#xff0c;對其進行一些簡單的算數運算操作進行加密&#xff0c;解密過程則相應地為加密運算…

從GPT到Gemini 大模型進化史

從GPT到Gemini&#xff1a;大模型進化史 在過去的幾年里&#xff0c;人工智能領域經歷了翻天覆地的變化&#xff0c;其中最引人注目的莫過于大規模語言模型的發展。從最初的GPT系列到最近的Gemini&#xff0c;這些模型不僅在技術上取得了重大突破&#xff0c;還在實際應用中展…

【AI提示詞】中國歷史與世界發展對比器

提示說明 輸入特定年份&#xff0c;輸出該時期中國與世界的發展狀況。 提示詞 # Role 中國歷史與世界發展對比器## Profile - author: xxx - version: 1.0 - description: 輸入特定年份&#xff0c;輸出該時期中國與世界的發展狀況。## Attention 請深入挖掘歷史資料&#x…

阿里云OSS應對DDoS攻擊策略

阿里云對象存儲服務&#xff08;OSS&#xff09;若遭遇DDoS攻擊&#xff0c;可結合阿里云提供的安全服務與自身配置優化進行綜合防御。以下是具體的解決方案及步驟&#xff1a; 1. 啟用阿里云DDoS防護服務 防護服務類型&#xff1a;阿里云提供基礎DDoS防護&#xff08;默認免費…

MyCat 分庫分表

介紹 問題分析 隨著互聯網及移動互聯網的發展&#xff0c;應用系統的數據量也是成指數式增長&#xff0c;若采用單數據庫進行數據存 儲&#xff0c;存在以下性能瓶頸&#xff1a; 1. IO瓶頸&#xff1a;熱點數據太多&#xff0c;數據庫緩存不足&#xff0c;產生大量磁盤IO&a…

C++筆記-list

list即是我們之前學的鏈表&#xff0c;這篇主要還是講解list的底層實現&#xff0c;前面會講一些list區別于前面string和vector的一些接口以及它們的注意事項。 一.list的基本使用 和之前的string&#xff0c;vector一樣&#xff0c;有很多之前見過的一些接口&#xff0c;經過…

unityTEngine學習記錄2

上一篇了解了下載項目與外部調用的接口&#xff0c;接下來就繼續學習根據這個框架來加載場景首先打開te官網&#xff0c;進入教程。 了解框架目錄以及功能 首先要了解的就是這個框架的文件結構目錄&#xff0c;知道他都是干啥的&#xff0c;在官網的目錄結構中介紹了其中重要…

邏輯過期怎么設計

設計“邏輯過期”通常用于緩存、令牌管理、數據有效性驗證等場景&#xff0c;其核心是通過業務邏輯判斷數據是否過期&#xff08;而非單純依賴物理時間&#xff09;。以下是設計邏輯過期的關鍵思路和實現方案&#xff1a; 1. 核心思想 物理過期&#xff1a;基于固定的時間&…

DAY 47 leetcode 232--棧與隊列.用棧實現隊列

題號232 請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;/** Initialize your data structure here. */pu…

邏輯回歸 (Logistic Regression)

文章目錄 邏輯回歸 (Logistic Regression)問題的引出Sigmoid function邏輯回歸的解釋決策邊界 (Decision boundary)邏輯回歸的代價函數機器學習中代價函數的設計1. 代價函數的來源&#xff08;1&#xff09;從概率模型推導而來&#xff08;統計學習視角&#xff09;&#xff08…

關于C語言的模擬物理模型

聲明&#xff1a;本文全部代碼效果基于C語言easyx圖形界面庫。 引言 關于很多游戲和模型的開發&#xff0c;都需要模擬真實的物理模型 比如&#xff1a;基本矢量運動模型&#xff08;位移&#xff0c;速度&#xff0c;加速度&#xff09;&#xff0c;重力模型&#xff0c;碰撞…