語音識別 Speech recognition 中的 CTC cost,CTC損失函數(學習心得)
seq2seq 模型在語音識別方面的應用讓人激動!

什麼是語音識別問題呢?
氣壓隨著時間推移不斷變化,產生了音頻
人的耳朵可以衡量不同頻率和強度的聲波
輸入整個原始的音頻片段 raw audio clip
生成一個聲譜圖 generate a spectrogram(橫軸是時間,縱軸是聲音的頻率,顏色顯示聲波能量的大小)
- 偽空白輸出 false blank outputs:經常用於預處理步驟,在輸入到神經網路之前
過去一段時間,語音識別是基於音位 phonemes 來構建的
而音位是由人工設計而成 hand-engineered
但是在 end-to-end 的神經網路中,音位已經不再需要了
我們只需要一個很大的數據集,學術研究中需要 300 小時的音頻,專業研究中,可能超過 3000 小時,都是合理的大小
最好的商業系統,已經訓練了超過 1 萬小時的數據,甚至超過 10 萬,而且還在變得更大!

如何建立一個語音識別系統呢?
比如,我們可以利用注意力模型

另外一種效果不錯的方法:CTC cost (利用 CTC 損失函數)
CTC:Connectionist Temporal Classification
這是由 Alex Graves, Santiago Fernandes, Faustino Gomez, Jurgen Schmidhuber 提出
假設語音片段內容是某人說的一句話
我們建立一個網路結構,輸入 x 和輸出 y 的數量都一樣(其實就是個簡單的單向 RNN,但是實踐中,更可能是一個雙向 LSTM 結構/ GRU 結構,並且是 deeper model)
值得注意的是,time step 在語音識別中會非常大,而且輸入的時間步 要比輸出大很多
比如 10 秒的音頻,特徵是 100 赫茲(即每秒 100 個樣本),那一共是 1000 個輸入
但是我們的輸出,可能並沒有 1000 個字母
這怎麼處理呢?
CTC cost function 解決了這一問題
比如下面這種輸出:

CTC 允許 RNN 生成輸出空白符 blank character,上面是用下劃線表示
並將空白字元間 重複的字元 摺疊,得到:
the\ q
所以即使我們得到 1000 個輸出,但是最終得到的文本會更短

