3.9 語音識別-深度學習第五課《序列模型》-Stanford吳恩達教授

語音識別 (Speech Recognition)

現今,最令人振奮的發展之一,就是seq2seq模型(sequence-to-sequence models)在語音識別方面準確性有了很大的提升。這門課程已經接近尾聲,現在我想通過剩下幾節視頻,來告訴你們,seq2seq模型是如何應用於音頻數據的(audio data),比如語音(the speech)。

在這裏插入圖片描述

什麼是語音視頻問題呢?現在你有一個音頻片段 xxan audio clip,x),你的任務是自動地生成文本 yy 。現在有一個音頻片段,畫出來是這樣,該圖的橫軸是時間。一個麥克風的作用是測量出微小的氣壓變化,現在你之所以能聽到我的聲音,是因爲你的耳朵能夠探測到這些微小的氣壓變化,它可能是由你的揚聲器或者耳機產生的,也就是像圖上這樣的音頻片段,氣壓隨着時間而變化。假如這個我說的音頻片段的內容是:“the quick brown fox”(敏捷的棕色狐狸),這時我們希望一個語音識別算法(a speech recognition algorithm),通過輸入這段音頻,然後輸出音頻的文本內容。考慮到人的耳朵並不會處理聲音的原始波形,而是通過一種特殊的物理結構來測量這些,不同頻率和強度的聲波。音頻數據的常見預處理步驟,就是運行這個原始的音頻片段,然後生成一個聲譜圖(a spectrogram),就像這樣。同樣地,橫軸是時間,縱軸是聲音的頻率(frequencies),而圖中不同的顏色,顯示了聲波能量的大小(the amount of energy),也就是在不同的時間和頻率上這些聲音有多大。通過這樣的聲譜圖,或者你可能還聽過人們談到過僞空白輸出(the false blank outputs),也經常應用於預處理步驟,也就是在音頻被輸入到學習算法之前,而人耳所做的計算和這個預處理過程非常相似。語音識別方面,最令人振奮的趨勢之一就是曾經有一段時間,語音識別系統是用音位(phonemes)來構建的,也就是人工設計的基本單元(hand-engineered basic units of cells),如果用音位來表示"the quick brown fox",我這裏稍微簡化一些,“the"含有"th"和"e"的音,而"quick"有"k” “w” “i” "k"的音,語音學家過去把這些音作爲聲音的基本單元寫下來,把這些語音分解成這些基本的聲音單元,而"brown"不是一個很正式的音位,因爲它的音寫起來比較複雜,不過語音學家(linguists)們認爲用這些基本的音位單元(basic units of sound called phonemes)來表示音頻(audio),是做語音識別最好的辦法。不過在end-to-end模型中,我們發現這種音位表示法(phonemes representations)已經不再必要了,而是可以構建一個系統,通過向系統中輸入音頻片段(audio clip),然後直接輸出音頻的文本(a transcript),而不需要使用這種人工設計的表示方法。使這種方法成爲可能的一件事就是用一個很大的數據集,所以語音識別的研究數據集可能長達300個小時,在學術界,甚至3000小時的文本音頻數據集,都被認爲是合理的大小。大量的研究,大量的論文所使用的數據集中,有幾千種不同的聲音,而且,最好的商業系統現在已經訓練了超過1萬個小時的數據,甚至10萬個小時,並且它還會繼續變得更大。在文本音頻數據集中(Transcribe audio data sets)同時包含 xxyy ,通過深度學習算法大大推進了語音識別的進程。那麼,如何建立一個語音識別系統呢?

在這裏插入圖片描述

在上一節視頻中,我們談到了注意力模型,所以,一件你能做的事就是在橫軸上,也就是在輸入音頻的不同時間幀上,你可以用一個注意力模型,來輸出文本描述,如"the quick brown fox",或者其他語音內容。

在這裏插入圖片描述

還有一種效果也不錯的方法,就是用CTC損失函數(CTC cost)來做語音識別。CTC就是Connectionist Temporal Classification,它是由Alex Graves、Santiago Fernandes, Faustino Gomez、和Jürgen Schmidhuber提出的。(Graves A, Gomez F. Connectionist temporal classification:labelling unsegmented sequence data with recurrent neural networks[C]// International Conference on Machine Learning. ACM, 2006:369-376.)

算法思想如下:

假設語音片段內容是某人說:“the quick brown fox”,這時我們使用一個新的網絡,結構像這個樣子,這裏輸入 xx 和輸出 yy 的數量都是一樣的,因爲我在這裏畫的,只是一個簡單的單向RNN結構。然而在實際中,它有可能是雙向的LSTM結構,或者雙向的GIU結構,並且通常是很深的模型。但注意一下這裏時間步的數量,它非常地大。在語音識別中,通常輸入的時間步數量(the number of input time steps)要比輸出的時間步的數量(the number of output time steps)多出很多。舉個例子,比如你有一段10秒的音頻,並且特徵(features)是100赫茲的,即每秒有100個樣本,於是這段10秒的音頻片段就會有1000個輸入,就是簡單地用100赫茲乘上10秒。所以有1000個輸入,但可能你的輸出就沒有1000個字母了,或者說沒有1000個字符。這時要怎麼辦呢?CTC損失函數允許RNN生成這樣的輸出:ttt,這是一個特殊的字符,叫做空白符,我們這裏用下劃線表示,這句話開頭的音可表示爲h_eee_ _ _,然後這裏可能有個空格,我們用這個來表示空格,之後是 _ _ qqq_,這樣的輸出也被看做是正確的輸出。下面這段輸出對應的是"the q"。CTC損失函數的一個基本規則是將空白符之間的重複的字符摺疊起來,再說清楚一些,我這裏用下劃線來表示這個特殊的空白符(a special blank character),它和空格(the space character)是不一樣的。所以thequick之間有一個空格符,所以我要輸出一個空格,通過把用空白符所分割的重複的字符摺疊起來,然後我們就可以把這段序列摺疊成"the q"。這樣一來你的神經網絡因爲有很多這種重複的字符,和很多插入在其中的空白符(blank characters),所以最後我們得到的文本會短上很多。於是這句"the quick brown fox"包括空格一共有19個字符,在這樣的情況下,通過允許神經網絡有重複的字符和插入空白符使得它能強制輸出1000個字符,甚至你可以輸出1000個 yy 值來表示這段19個字符長的輸出。這篇論文來自於 Alex Grace以及剛纔提到的那些人。我所參與的深度語音識別系統項目就使用這種思想來構建有效的語音識別系統。

希望這能給你一個粗略的理解,理解語音識別模型是如何工作的:注意力模型是如何工作的,以及CTC模型是如何工作的,以及這兩種不同的構建這些系統的方法。現今,在生產技術中,構建一個有效語音識別系統,是一項相當重要的工作,並且它需要很大的數據集,下節視頻我想做的是告訴你如何構建一個觸發字檢測系統(a rigger word detection system),其中的關鍵字檢測系統(keyword detection system)將會更加簡單,它可以通過一個更簡潔的數量更合理的數據來完成。所以我們下節課再見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章