第四章 使用階層式語音韻律模型於中文大詞彙語音辨認系統
4.1 使用韻律訊息於 two-stage 語音辨認系統
4.1.2 第二級辨認器之實作
4.1.2.2 各階段 lattice 之展開
在圖 4.4 當中,第二級辨認器中的三個階段會各自針對上一階段或第一級所產生的 lattice 依據所需之資訊作展開以方便未來作重新評分,這裡本研究是使用維特比搜尋演 算法(viterbi search algorithm)來作 lattice 重新評分,以下將對其 lattice 展開過程作簡單說 明:
z 第一階段:加入多種語言資訊
針對 4.1.2 節一開始所述,產生帶有音節切割資訊的 trigram word lattice,然後再根 據其他語言資訊作展開,展開方法如下:
(1).node expansion :
針對原始 lattice 中各個 node 所帶有的 word 資訊,找出相對應的 POS 數目(P)及 PM 數目(M),再將各個 node 展開至 P*M 倍。
圖 4.5:第一階段 lattice 之 node expansion (2).arc expansion :
針對原始 lattice 中各個 arc 所帶有的 word 資訊,找出相對應的 POS 數目(P)及 PM 數目(M),並對上一個 arc 中所帶有的 word 資訊,找出相對應的 POS 數目(P2)及 PM 數 目(M2),再將各個 arc 展開至 P*M*P2*M2 倍。
圖 4.6:第一階段 lattice 之 arc expansion
經過以上的展開流程後,產生的 lattice 裡每一個 arc 和 node 中皆包含了 word、POS、
PM 等三種語言資訊。
z 第二階段:加入韻律邊界停頓資訊
針對第一階段所產生的 lattice 作展開,由於這一步是引入停頓聲學模型及 break syntax model,所以如何作 lattice 展開必須先觀察數學式(3.3)及(3.12),由於韻律資訊是 syllable level,所以現在 lattice 中每一個 arc 上會累積除 LM score、POS score、PM score、
AM score 外,還有各個音節的 prosodic score,但由式(3.3)及(3.12)可發現,針對 intraword syllable 的部分,可由程式內部處理,不需要將 lattice 作展開的動作,但是針對 interword syllable 的部分就要多加考量,因此我們必須先對各 differential 參數所包含到的數學式 (3.13)、(3.14)及(3.15)作觀察,從這三式中發現為了計算某個音節的 prosodic score,我 們必須取得前後各一個音節的資訊,也就是說整個 lattice 將會根據每個 word 中第一個 音節及最後一個音節的資訊作展開,也就是 interword syllable 的部分,但為了考量實作 中記憶體用量有限,所以這裡將只針對前一個音節資訊,也就是針對 word 中最後一個 音節的長度(duration)作展開,當然如果要針對音節長度作展開,那音節聲調(syllable tone) 的部分為何不用展開,因為每一個 arc 如果最終是進入同一個 node,其語言參數是一樣 的。接下來,要解釋為何可以不需要針對後一個音節資訊作處理,也就是不用將 word 中第一個音節的資訊作展開,因為我們利用到 viterbi search 的特性,以下將詳細說明。
經由上述停頓聲學模型及 break syntax model 的數學式(3.3)及(3.12)可發現,word 中 每個音節的分數可以獨立計算,所以我們可以先算出每一個 word 中 intraword syllable 的 prosodic score,並結合 LM score、POS score、PM score 及 AM score 於 lattice 中各個 arc 上。接下來就是跑 backward viterbi search,這一步將會針對 interword syllable 的部分 作處理,以下我們將以圖形解說的方式解釋整套演算法:
首先,由於是使用 backward viterbi 的關係,所以是先從 leaf node 開始往前推算出 每一個 node 的 backward score,如下圖 4.7 所示:
圖 4.7:第二階段 lattice 之架構範例
觀察上圖 4.7 中,由於 leaf node 所連接的 arc 中並未包含語言參數,所以 lattice 中 最後一個 word 的資訊便是在 node7、node8 或 node9 的來源 arc 中,針對 node4 當例子,
經由它分出的 arc 共有三條,如下圖 4.8 所示,這時我們將各路徑所累積分數的作比較 後選出一條最佳路徑(如下圖 4.8 中深色部分所示),並將這一條路徑上所帶的 word 資 訊,也就是第一個音節的資訊以及所找出的最佳 backward score,記錄在 node4 中(如下 圖 4.8 中紅線部分所示),因為從倒數第二個 word 開始就要計算 interword syllable 的 prosodic score。而 node5 及 node6 也沿用相同作法算出其 backward score。
圖 4.8:第二階段 lattice 之內部工作流程範例 1
接下來我們針對圖 4.8 中的 node1 作分析,經由它分出的 arc 共有三條,如下圖 4.9 所示:
圖 4.9:第二階段 lattice 之內部工作流程範例 2
這時原本應將各路徑所累積分數的作比較後選出一條最佳路徑,但從倒數第二個 word 開始,每一個 arc 上的最後一個音節的 prosodic score 還沒計算,因為它會相依於 下一個音節資訊,所以理論上要將 lattice 作展開,但在上一段的敘述中,已分別在 node4、
node5 及 node6 中存入了下一個 word 的第一個音節資訊,所以根本不需要對 lattice 作展 開,直接沿用這些 node 所傳遞過來的資訊來計算出目前最後一個音節的 prosodic score,
這正是 viterbi 的精神所在,針對每一個 node 都找出到達終點的最佳路徑,所以對上一 個 word 的而言,下一個 word 的第一個音節早已決定好了,不需要再對 lattice 作額外的 展開,如此一來,我們便可針對 node1 找出一條最佳路徑,如下圖 4.10 所示,圖中紅線 的部分就是代表訊息傳遞:
圖 4.10:第二階段 lattice 之內部工作流程範例 3
往後針對 lattice 中每一個 node 的 backward score 的計算都如同上述所言,如下圖 4.11 所示,圖中紅線的部分就是代表訊息傳遞:
圖 4.11:第二階段 lattice 之內部工作流程範例 4
當計算到起始節點(start node)時,也就等於找到了最佳路徑,經由最終的路徑回溯,
即可解碼出最佳的詞序列(word sequence):
圖 4.12:第二階段 lattice 之內部工作流程範例 5
經由以上解說,現在 lattice 只須對 word 中最後一個音節的長度作展開,以下為展 開流程:
(1).node expansion :
針對原始 lattice 中各個 node,觀察其來源 arc 中所帶有的 word 資訊(最後一個音節 的長度),現假設來源 arc 中最後一個音節的長度共有 M 種,則原始 node 將展開至 M 倍。
以下為範例圖 4.13,圖中左側右邊的 node 根據來源 arc 中最後一個音節的長度作展開,
假設一共有兩種不同的長度,則右側就是針對 node 進行展開後的結果:
圖 4.13:第二階段 lattice 之 node expansion
(2).arc expansion :
針對原始 lattice 中各個 arc,觀察其 start node 的特性,假設從第(1)步中,已知 start node 將被展至 M 倍,則原始 arc 也將展開至 M 倍,如下範例圖 4.14 所示:
圖 4.14:第二階段 lattice 之 arc expansion z 第三階段:加入音節韻律狀態資訊
針對第二階段所產生的 lattice 作展開,由於這一步是引入音節韻律模型及韻律狀態 模型,所以如何作 lattice 展開一樣要先觀察其數學式(3.4)及(3.5),從這兩式中發現為了 計算某一音節的 prosodic score,必須得到前後各一個音節資訊,而針對 intraword syllable 的部分,處理方式可能不像第二階段中只加入韻律邊界停頓資訊那樣簡單(註:計算 intraword syllable 的 prosodic break score 不用考慮到上一個音節的韻律邊界停頓類型,所 以可以在跑 backward viterbi search 以前就先計算完) ,因為現在每一個音節的 prosodic state score 會相依於上一個音節的韻律狀態,所以 intraword syllable 的處理方式也較複 雜,基本上為了實作上對記憶體的有效控制,在 intraword syllable 的部分我們不將 lattice 作展開(如何處理將會在稍後作補充說明),但對 interword syllable 而言就要多加考量,
所以說整個 lattice 將會根據每個 word 中第一個音節及最後一個音節的資訊作展開,但 同樣為了考量實作中記憶體用量有限,在這只根據後一個音節資訊作展開,也就是 lattice 將根據每個 word 中第一個音節資訊作展開,而參照以上數學式(3.4)及(3.5),word 中第 一個音節資訊正好就是音節所對應的聲調資訊。
接下來要解釋為何不需要針對前一個音節資訊作展開,其原理如第二階段中敘述相 同,利用 viterbi search 可以將資訊傳遞的特性,只是這一次我們是採用 forward viterbi search,跟第二階段的方式比較起來只是演算法運算的方向相反,其於觀念是一樣的,
以下同樣以圖解的方式作說明:
首先,由於是使用 forward viterbi 的關係,所以是先從 start node 開始往前推算出每 一個 node 的 forward score,如下圖 4.15 所示:
圖 4.15:第三階段 lattice 之架構範例
觀察上圖 4.15 中,針對 node1 當例子,它的來源 arc 只有一條,因為是第一個 word,
如下圖 4.16 所示,這時我們將這一條路徑上所帶的 word 資訊,也就是最後一個音節的 資訊(包含三種 prosodic state)以及所找出的最佳 forward score,記錄在 node1 中(如下圖 4.16 中紅線部分所示),因為從第二個 word 開始就要計算 interword syllable 的 prosodic score。而 node2 及 node3 也沿用相同作法算出其 forward score。
圖 4.16:第三階段 lattice 之內部工作流程範例 1
接下來我們針對圖 4.16 中 node4 作分析,它的來源 arc 共有三條,如下圖 4.17 所示:
圖 4.17:第三階段 lattice 之內部工作流程範例 2
這時原本應將各路徑所累積之分數作比較後選出一條最佳路徑,但從第二個 word 開始,為了計算每一個 arc 上的第一個音節的 prosodic score,必須知道上一個音節資訊,
所以理論上要將 lattice 作展開,但在上一段的敘述中,已分別在 node1、node2 及 node3 中存入了上一個 word 的最後一個音節資訊,所以根本不需要對 lattice 作展開,直接沿 用這些 node 所傳遞過來的資訊來計算出目前第一個音節的 prosodic score;針對每一個 node 都找出從多條來源 arc 中的最佳路徑,所以對下一個 word 的而言,上一個 word 的 最後一個音節早已決定好了,不需要再對 lattice 作額外的展開,如此一來,我們便可針 對 node4 找出一條最佳路徑,如下圖 4.18 所示,圖中紅線的部分就是代表訊息傳遞:
圖 4.18:第三階段 lattice 之內部工作流程範例 3
往後針對 lattice 中每一個 node 的 forward score 的計算都如同上述所言,如下圖 4.19 所示,圖中紅線的部分就是代表訊息傳遞:
圖 4.19:第三階段 lattice 之內部工作流程範例 4
當計算到終止節點(leaf node)時,也就等於找到了最佳路徑,經由最終的路徑回溯,
即可解碼出最佳的詞序列(word sequence):
圖 4.20:第三階段 lattice 之內部工作流程範例 5
經由以上解說,現在 lattice 只須對 word 中第一個音節的聲調作展開,以下為展開 流程:
(1).node expansion :
針對原始 lattice 中各個 node,觀察其分出的 arc 中所帶有的 word 資訊(第一個音節 的聲調),現假設分出的 arc 中第一個音節的聲調共有 M 種,則原始 node 將展開至 M 倍;
以下為範例圖 4.21,圖中左側左邊的 node 根據分出的 arc 中第一個音節的聲調作展開,
假設一共有兩種不同的聲調,則右側就是針對 node 進行展開後的結果:
圖 4.21:第三階段 lattice 之 node expansion (2).arc expansion :
針對原始 lattice 中各個 arc,觀察其 end node 的特性,假設從第(1)步中,已知 end node 將被展至 M 倍,則原始 arc 也將展開至 M 倍,如下範例圖 4.22 所示:
圖 4.22:第三階段 lattice 之 arc expansion
圖 4.22:第三階段 lattice 之 arc expansion