語音識別準確率的常用度量指標:
- WER(詞錯率)
- CER(字錯率)
將ASR預測的輸出字符序列與正確的參考字符序列進行比較,CER計算如下:
其中:
- S(substitution) 表示替換的字符數目
- D(deletion)表示刪除的字符數目
- I(insertion)表示插入的字符數目
- N 表示參考序列中字符總數
所以,CER值的範圍是[0, 無窮大)。
可以看出,CER的分子的計算其實就是編輯距離(Levenshtein distance),其公式如下:
中文ASR常用字錯率CER;而英文中單詞為最小單位,因此常用詞錯率WER。但CER與WER核心計算方法一樣。
CER代碼:
<code>def cer(r: list, h: list):
"""
Calculation of CER with Levenshtein distance.
"""
# initialisation
import numpy
d = numpy.zeros((len(r) + 1) * (len(h) + 1), dtype=numpy.uint16)
d = d.reshape((len(r) + 1, len(h) + 1))
for i in range(len(r) + 1):
for j in range(len(h) + 1):
if i == 0:
d[0][j] = j
elif j == 0:
d[i][0] = i
# computation
for i in range(1, len(r) + 1):
for j in range(1, len(h) + 1):
if r[i - 1] == h[j - 1]:
d[i][j] = d[i - 1][j - 1]
else:
substitution = d[i - 1][j - 1] + 1
insertion = d[i][j - 1] + 1
deletion = d[i - 1][j] + 1
d[i][j] = min(substitution, insertion, deletion)
return d[len(r)][len(h)] / float(len(r))
if __name__ == "__main__":
r = '從卡耐基梅隆大學幾代研發人員開始,本文對過去40年人們從語音識別技術進步所獲得的啟示進行了探討。'
h = '從卡耐基梅隆大學幾代研發人員開始,對過去40年人們從ASR技術進步所獲得的啟示進行了深入探討。'
r = [x for x in r]
h = [x for x in h]
r = '北 京 成 交 已 實 現 無 人 運 行'
h = '金 衝 壓 已 實 現 無 人 運 行' /<code>
r = r.split()
h = h.split()
print(cer(r, h))
閱讀更多 IT充電寶 的文章