機器學習—CER字錯率計算

語音識別準確率的常用度量指標:

  • WER(詞錯率)
  • CER(字錯率)

將ASR預測的輸出字符序列與正確的參考字符序列進行比較,CER計算如下:

機器學習—CER字錯率計算

其中:

  • S(substitution) 表示替換的字符數目
  • D(deletion)表示刪除的字符數目
  • I(insertion)表示插入的字符數目
  • N 表示參考序列中字符總數

所以,CER值的範圍是[0, 無窮大)。

可以看出,CER的分子的計算其實就是編輯距離(Levenshtein distance),其公式如下:

機器學習—CER字錯率計算

中文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 = ' 金 衝 壓 已 實 現 無 人 運 行'
r = r.split()
h = h.split()

print(cer(r, h))
/<code>


分享到:


相關文章: