跳到主要內容

【語音辨識 - Whisper】 準確與否需要有一把 📏尺來衡量辨識率

前面我們介紹了幾個關於Whisper的基本概念,這裡附上 🚀傳送門 ,歡迎好好閱讀一番,但我們除了學會如何用語音辨識的工具之外,「準確率」對我們來說也是一個非常重要的一環,但我們究竟應該要如何評估所謂的準確率呢? 不知道沒關係,當您看完這個篇章就能夠學會如何計算文字的「字元錯誤率」、「字詞錯誤率」...,非常值得您細細品嘗與學習,就讓我們往下一步步的完成評估準確率的程序吧!

這次的評估正確率的那把 📏尺我們會使用jiwer這一套來進行說明,它支援了多種的計算方式,包括: WER、CER、MER...等,那這些計算方式各有什麼不同呢? 就讓我們繼續看下去吧!

計算前必須知道的幾個錯誤指標

在進入到各種計算方式之前,我們需要先了解到這三個名詞「substitutions、deletions、insertions」,這很重要,會牽涉到不同方式的計算過程。

什麼是substitutions呢?

簡單來說就是字詞被替換成不同的字了...

圖片來源

什麼是deletions呢?

簡單的來說就是某個字詞應被辨識出來,但卻漏了...

圖片來源

什麼是insertions呢?

簡單的來說就是明明沒有的字詞卻被多辨識了出來

圖片來源

有哪些不同的計算方式呢?

以「詞」為單位進行計算

詞錯誤率 Word Error Rate(WER)

WER是以「詞」為單位進行計算,它用來衡量句子中有多少詞彙需要進行修改才能和正確答案一樣。

公式: (S + D + I) / (H + S + D)
計算過程: (2 + 0 + 1) / (2 + 2 + 0)
3 / 4 ≈ 75%。

💡 既然是以為單位的話,那麼我們的答案與辨識結果請先進行斷詞(通常用空白隔開), 標點符號也是考量的因素之一喔。

圖片來源

平均錯誤率 Mean Error Rate(MER)

這項指標與WER主要差別在於分母的部分尚未將Insertion給考量進來計算,因為它衡量的不僅是詞彙層級,而是句子層級,因此會更加全面。

公式: (S + D + I) / (H + S + D + I)
計算過程: (2 + 0 + 1) / (2 + 2 + 0 + 1)

3 / 5 ≈ 60%

圖片來源

詞保留率 Word Information Preservation(WIP)

這項指標主要在評估我們的辨識結果究竟有多少比例的字詞是一模一樣完全正確的。

num_rf_words = 正確答案字詞數 = 4
num_hp_words = 辨識結果字詞數 = 5
公式: (H / num_rf_words) * (H / num_hp_words)
計算過程: (2 / 4) * (2 / 5)
0.5 * 0.4 ≈ 20%

圖片來源

詞漏失率 Word Information Lost(WIL)

既然有詞的保留率,那麼相反的就是漏失率,因此上述的結果得出之後,用1減去保留率就是漏失率。

公式: 1 - wip
1 - 0.2 ≈ 0.8

字元錯誤率 Character Error Rate(CER)

CER是以「字元」為單位進行計算,底下的例子以「字元」為單位會發現有1個substitution,因此總共7個字元錯了1個等於:

1 / 7 ≈ 14.29%。

圖片來源

動動手使用Whisper語音辨識來計算一下正確率吧

安裝套件

# 錯誤率計算工具
!pip install jiwer

# 語音辨識ASR
!pip install -U openai-whisper

# Hugging Face資料集函式庫
!pip install datasets

# 斷詞器
!pip install jiaba

首先我們先從Hugging Face找尋Common Voice的音檔:

https://huggingface.co/datasets/common_voice/viewer/zh-TW/train

圖片來源

接著我們使用Hugging Face的Datasets函式庫來進行操作

關於Datasets是什麼? 歡迎參考:「【Hugging Face】Ep.3 前往Datasets掏金趣」。

這邊會取測試集的第一筆做為我們的參考答案製作來源。

from datasets import load_dataset

# 載入中文的資料集
ds = load_dataset("common_voice", name='zh-TW', split='test')

# 取第一筆做為本次的參考答案資料集
ref_data = ds[0]

ref_data

透過上述的操作我們可以得到幾個資訊:

製作參考答案文字

首先我們對語句的部分進行斷詞,來製作參考答案的文字:

import jieba
_reference = ref_data['sentence']

reference = ' '.join(jieba.cut(_reference, cut_all=False, HMM=True))

reference

接著來進行語音辨識

import whisper

model = whisper.load_model("base")

audio = ref_data['path']

result = model.transcribe(audio)

result

最終我們透過jiwer計算一下錯誤率

正確率怎麼計算呢? 1 - 錯誤率(WER、WIP、MER...)

P.S 看起來幾乎都沒有錯誤,猜測可能是common voice的語料已涵蓋在whisper的模型之中了...。

hypothesis = result['text']

out = jiwer.process_words(reference, hypothesis)
print(jiwer.visualize_alignment(out))

今天的範例都在這裡「📦 whisper/whisper_acc.ipynb」歡迎自行取用。

如何使用請參閱「【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?」。

結語

這個章節非常重要的原因是後續如果我們要對Whisper進行調優時,需要有一把尺來衡量我們調的好不好,而正確率這東西就是一張考卷的概念,確保我們每次的調整都不會考壞了,讓我們對於應用上來說能夠越來越準確,減少誤判的狀況出現。

------------------------------------------------------------------------------------------------

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

更多關於【語音辨識 - Whisper 系列】…

留言

這個網誌中的熱門文章

java西元民國轉換_各種不同格式

C#資料庫操作(新增、修改、刪除、查詢)

【Excel好好玩】 自己的資產自己管!善用Google Sheet來幫我們評估貸款

這次介紹的主題是關於Excel的貸款還款計畫試算,我們人生中總會遇到需要大筆金額的花費,但當資金不夠時就得進行貸款,而貸款之前如果我們能夠審慎評估,並分析自己的還款能力之後在進行凍作,相信風險會小很多,因此就自己動動手來使用Google Sheet進行試算吧! 基本資料 ● 貸款總額: 1000000 ● 貸款期數: 84月 ● 年利率: 2.11% ● 月利率: 0.18% P.S 月利率 = 年利率 / 12 重要函式 PMT : 這是Google Sheet內建的重要年金計算公式,我們可以善用這個公式來計算固定利率及期數的固定攤還本息。因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 動手做 首先我們在Excel表上列出我們的基本資料 圖片來源 其中月利率的部分就使用公式「=B4/12」 接著我們填上第一列的期數跟餘額 圖片來源 =B2 =B3 使用關鍵PMT函數來計算本息的部分 因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 -PMT(貸款利率(月利率), 貸款期數, 貸款總額) =-PMT($B$5,$B$3,$B$2) 圖片來源 計算利息 利息 = 貸款餘額 x 月利率 =B8*$B$5 圖片來源 計算本金 本金 = 本息 - 利息 =C8-D8 圖片來源 製作第二列餘額的部分 餘額的部分 = 上一期的餘額 - 上一期的本金 圖片來源 接著拖曳該兩列往下拉,即可查看每一期的利息與本金 圖片來源 結語 雖然市面上已經有很多貸款銀行都提供了試算功能,但如果我們想要進一步管理自己的資產時,就需要將每一期的金額給計算出來,因此才會將公式運用在Excel表,讓我們的資產管理表能夠結合負債,進一步評估我們理財行動的下一步,希望這樣的經驗可以幫助到正在理財道路上打拼的夥伴,讓我們透過有效的管理,幫助荷包長大吧! 喜歡撰寫文章的你,不妨來了解一下: Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入? 歡迎加入一起練習寫作,賺取知識,累積財富!