2018年1月15日 星期一

HTK Tools (1): 資料準備 - 從音源語料庫準備字面的音素檔案

做語音辨識或語音馬可夫模型時,最被為常用的就是英國劍橋大學開發的  HTK (隱式馬爾可夫模型工具) 的框架,他們正有推出 HTK Books 給大眾參考,並照著做來達成語音辨識。 但台灣國內文獻時在沒有,而且加上 HTK Books 實在有點艱澀難懂,因此用一系列文章來記錄 HTK Books 3.4 版的第三部分 (A Tutorial Example of Using HTK) 的做法。


注意,一般來說,做要做語音辨識,並看懂 HTK Books 最好還是先讀過台灣碩博士論文系統的一些關於語音辨識論文,例如 <隱藏式馬可夫模型應用於中文語音辨識之研究 - 2000, 楊永泰, 中原大學資訊工程所> 這篇是我第一個參考的論文,這是一篇很完整說明普遍語音辨識作法的論文,並且只要把術語或方法看懂、查懂,看懂論文的 1/3,這樣看 HTK Books 比較不會太困難。

語料庫 (Corpus)


以下要準備語料庫,可以先參考 VoxForge() 這個倉庫,你可以從 Download 下載到 Original 的語料,例如從這裡: http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Original/ 下載到 (44.1KHz/16Bit 的資料夾,語料比較多) 。

這篇文長僅使用任意找到的一個壓縮檔打開使用。

標出語料庫的單字


若你已經下載上一小節的語料庫,就不必擔心這個章節的問題,請跳過。

若你是使用自己錄製或外來的語料庫,請先確定語料庫的所有檔案,找看看有沒有標上句子的字串,比方說,上一小節的語料庫,就在 /etc/ 資料夾中的 PROMPTS 檔案,就有描述哪個語料,其中語音說了那些單字:


如果沒有這樣類型的檔案,請自行製作一個,按照標準格式的話,如下:

[音源檔案的名稱,不需要副檔名] [這個音源檔說出的話有哪些單字]
...


字典檔案


準備好語料庫後,還需要再準備一個字典檔案,字典檔案是用來幫語料庫的單字描述檔案,轉換成音素 (phone) 用途的。

也就是使用的語料庫句子字串: THIS IS A GOOD DAY ,會透過字典檔案轉換成類似 kk 音標的音素檔,這個就是標準發音系統的寫法,會轉成:
THZ IZ E GUDEA (此範例非現實情況) 這種寫法,透過這種檔案,才能給後續的 HTK Tools 做辨識。

請注意,每個音素會因為不同國家的口音而改變,比方說英國或美國口音,以下為兩種不同字典:

(美國) 卡內基梅隆大學的音素字典: http://www.speech.cs.cmu.edu/cgi-bin/cmudict
(英國) 劍橋大學的音素字典: http://svr-www.eng.cam.ac.uk/comp.speech/Section1/Lexical/beep.html

安裝 HTK Tools


建議 Windows 使用者,如果你不想享受程式編譯失敗的困擾,你可以直接到 Github 下載別人編譯好的 HTK Tooks Win32 ,因為我自己嘗試過,編譯 HTK Tools 原始碼的過程實在太複雜了,你可能還需要 cygwin  的 compiler 才可以正常通過編譯,我嘗試過 Visual Studio 14 版是編譯不過的。

當你下載後,只要把系統變數的 Path ,設定到 htk win 執行檔的目錄,使 Command Line (命令提示字元) 可以使用這些 exe 就可以了。

Linux 環境則是設定 exports 變數在 bashrc 檔案等等,讓 Terminal 一開始就可以讀取到 htk tools 路徑,以下略過。

起始步驟


以下步驟對應到 HTK Books - Chapter 3 的第四小節 (Step 4 - Creating the Transcript Files)

1. 準備工作目錄

首先,下載好 [字典檔] 、[語料庫] 後,最好自己建立一個工作目錄 (etc) ,如果是使用 VoxForge 語料庫的使用者,只要打開 /etc 資料夾即可,並且在工作目錄下,放入字典檔:

字典檔案假設是使用卡內基梅隆大學的檔案,請把 cmudict-0.7b 這個檔案在 etc 目錄,如果是使用劍橋大學的檔案,請把 beep-1.0 這個檔案放入 etc 目錄。

2. 準備單字檔案

請建立一個空檔案,命名為 words.mlf ,請在這個檔案一開始加入以下字串:

#!MLF!#

這個是 MLF 檔案的標頭,接著,把每一個語料的檔案,寫入以下格式:


#!MLF!#
"*/a0319.lab"
AND
THE
EDINBURGH
EVENING
NEWS
SAYS
WITH
EDITORIAL
GLOOM
.
"*/a0320.lab"
VERY
GOOD
.

如果你只需要先測試過一個檔案,只要打入 "*/要建立的對應語料檔名.lab" 就可以了,這個字串是目錄的意思。  並在底下輸入單字,請把一個連接的句子全部換行:

AND THE EDINBURGH EVENING NEWS SAYS WITH EDITORIAL GLOOM 就必須變成

AND
THE
EDINBURGH
EVENING
NEWS
SAYS
WITH
EDITORIAL
GLOOM
.

請在最後加一個句號的 . 符號,且要在檔案的最後面加入空白斷行,否則會出錯。


好了之後,在建立一個 mkphones0.led 檔案,寫入:

EX           #這個是執行 (Execute) 指令的意思
IS sil sil   #這個是在檔案頭尾插入 sil sil 的指令, (sil 音素是靜音的意思)
DE sp      #這個是在檔案中,刪除所有 sp 的音素

請記得斷一個空行在結尾。

接著,確定工作目錄下已經有這些檔案,才可以繼續操作:

  • 一個音素字典檔
  • mkphones0.led (指令檔)
  • words.mlf (語料單字文字檔案)

確認之後,使用指令 HLEd 來執行:


HLEd -l '*' -d [字典檔案] -i phones0.mlf mkphones0.led words.mlf

這個指令將會執行將單字檔案,轉換成音素 (phones) 的操作,產生一個 phones0.mlf 的檔案。



錯誤

請務必注意,檔案都需要在結尾斷行 (Enter) ,不然可能會出錯:


如果顯示找不到文字,請嘗試將 - 取代成斷行,把它當作不同的單字:



Reference:

  • https://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi/login?o=dnclcdr&s=id=%22088CYCU0392016%22.&searchmode=basic
  • http://www.voxforge.org/
  • http://www.speech.cs.cmu.edu/cgi-bin/cmudict
  • cam.ac.uk
  • HTK Books Version 3.4

沒有留言:

張貼留言

© ERIC RILEY , 自由無須告知轉貼
Background Japanese Sayagata by Olga Libby