• 沒有找到結果。

中文音節標記檔的訂正、自動切割與語音屬性偵測器之製作

TCC300 語料庫原始的音節 transcription 檔可能存在某部份人為標記的錯誤,

這個現象直接會污染我們訓練的音節模型,使得 HMM 強迫切割的結果變差,進 而造成偵測器模型參雜了不正確的訓練資料影響到偵測器的效能,因此我們構想 一個機制如下圖所示,首先能夠自動的找出大部分可能發生錯誤的標記錯誤,接 著再用人工去聽音檔確認並且改正錯誤的標記,首先我們先訓練 411 音節的 HMM,接著對於語料做辨認,如果標示答案未出現於音節辨認結果的 Top-N 當 中,我們將用人工檢查是否為標示錯誤。在我們所使用的辨認器之辨識率已經很 高的情況下,這樣將可以有效的找出語料當中的標示錯誤。

我們將 TCC-300 語料作 force-alignment 後對每一音節做 top-N 辨認,在 top 20 若沒有包含 transcription 中所標示之音節則自動篩選出來,這些就是可能有問題 的音節。最後在使用人工去聽音檔對照檢查,確認該 syllable 是否有音節標記錯 誤或是其他類型的錯誤,下表是錯誤類別的統計:

將以上統計結果中實際上音節標記錯誤的資料量佔所有語料的比例統計:

表 4.1:音節標記錯誤佔所有語料庫的資料量比例。

語料 總音節數 實際上標記錯誤的音節數

TCC300_train 約 300000 287(約 0.1%)

TCC300_test 約 33000 29(約 0.09%)

由上述統計結果可以看出,音節標記錯誤佔所有語料庫資料量中約 0.1%,

這些標記的錯誤不但會使訓練語料拿來訓練偵測器模型時由於錯誤的標記位置 學習到不正確的資料影響偵測器的效能,同時被拿當來當作偵測實驗當中的參考 答案的測詴語料中的標記錯誤,更是可能直接使得錯誤率升高的原因之ㄧ。

1. 中文音素切割位置的取得

24

接下來我們首先訓練音節的 HMM 模型進行強迫切割取得音節的切割位置,

然後以音節切割位置開始訓練狀態數為 3 的音素的 HMM 模型,同時訓練 short pause (sp) 與 silence 模型並且將 non-speech signal(如 breath , noise…等)模型隱藏 在 short pause 以及 silence 的 HMM 狀態當中,允許狀態跳躍來切出更合理的非 語音段,下圖 4.1 為非語音模型當中的狀態轉移示意圖:

圖 4.1:非語音段模型狀態轉移圖。

有了音素的 HMM 模型之後緊接著便對語料庫進行強迫切割,雖然把呼吸 聲切割出來能夠切出比較乾淨的 short pause 以及 silence,然而以切割的角度來看 HMM 的切割位置仍舊不夠精準,底下是一個簡單的例子:

語者呼吸聲

short pause 切不 出來或是切的太 短

子音與母音邊界 切的不好 Final Pause Breathe Pause Initial

25

affricate 9.62

Liquid 6.69

fricative 10.99

Nasal 6.59

因此底下我們提出以使用局部樣本 (local sample)之 Segmental K-means segmentation algorithm 的方法來調整音素的切割位置,它是一種廣為人知拿來對 於資料分群的 K-means iterative procedure,它能夠藉著 Viterbi algorithm 找到最佳

26

而在調整音節間 short pause 切割位置的步驟當中,likelihood 方程式可以寫成:

使用 maximum likelihood 的要求利用 Viterbi search 來找到最佳之切割位置 S。

我們針對每個句子,收集該句當中較可靠的 short pause,silence,breath 音 框(該非語音段落長度至少長於 5 ms),用 VQ 將這些資料依據 energy 大小分為兩 群,能量較大的一群定為"non-speech signal",能量較低的一群定為"silence",將 能量較低的一群抽取 13 維的 MFCC 參數拿來訓練 Gaussian 模型當做該句中 short pause 模型,之後從句子的開頭開始循序往後處理每個音節之間的 short pause,

處理的方式如下:拿 sp 之前的 final 音段當中所有的音框拿來訓練一個 13 維 MFCC 的 final 高斯模型,同時拿 short pause 之後的 initial 音段當中較可靠的音 框(一般來說是所有音框,但是針對某些音的特性而有些限制,比如說爆破音當 中ㄅ,ㄉ,ㄍ這三個音特別的短,因此僅取該音結束點往前的 3 個音框)拿來訓 練 13 維 MFCC 的 initial 模型,然後從 short pause 前的 final 起始點開始往後逐個 音框對於 final, short pause,non-speech signal, initial 這幾個模型如下圖 4.3 進行 Viterbi Search 的比對,不過比對結束之後決定每個 state 的區段位置時必須 保留呼吸聲保留原始的切割位置,因此實際上調整的有兩部分 : final 與 short pause 之間的切割位置以及 initial 與 short pause 之間的切割位置。

27

圖 4.3:音節間進行 Viterbi search 比對。

每執行完一次 Viterbi search,規定結束點狀態必須是 initial,起始點狀態必 須是 final 之後用 back trace 決定各個狀態的音框數,獲得新的切割位置之後,取 新的 initial 與 final 音段音框分別更新 initial 與 final 的高斯模型,再次執行上述 的流程,直到各個狀態音框段落都收斂之後,就算處理完一個音節之間的 short pause,之後以此類推處理完整個音檔,至於調整 initial 與 final 之間切割位置,

所不同的是僅有兩個狀態轉換之間去做 Viterbi search,圖 4.4 為取得音素切割位 置的流程:

28

圖 4.4:取得音素切割位置的流程

舉個例子來觀察經過調整之後的切割位置更趨近於人工標記的切割位置:

圖 4.6:音素切割位置調整前後之比較。

由上圖我們可以觀察到不管是音節與音節之間的 sp 或者是子音與母音之間 經過調整 的切割位 置 未經調整 的切割位 置

29

30

Total 樣本: 100 samples: fricative,affricate 50 samples: stop,nasal

31 由 Segmental K-means segmentation algorithm 自動的調整切割位置之後,已經能 夠得到趨近於人工標記的音素切割位置。

切割位置error tolerace< 20 ms

77 74 76

fricative affricate stop liquid nasal

(%) 未經initial_final_refine

經過initial_final_refine

32

33

偵測錯誤率都有明顯的下降,除了 Nasal 與 Liquid 之外,其餘發音方法偵測器的 等錯誤率都有約 1%以上的下降,特別是 Silence 偵測器等錯誤率大幅的降低了 4%以上,這主要也是因為經過自動調整之後還原了許多音節間的 sp 的緣故,所 以對於發音方法屬性偵測而言,經過調整之後的切割位置確實是比 HMM 強迫切 割的切割位置要好,因此往後的章節當中將以不同方法訓練發音方法偵側器以及 偵測實驗都將以此調整後的音素切割位置來當作訓練各個發音方法模型後製作 偵測器以及測詴語料的依據。

34