iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
0
AI & Data

30 天學會深度學習和 Tensorflow系列 第 27

26. 深度學習甜點系列:RNN網路總結

在 RNN 這系列的貼文中,我們先介紹了RNN 的架構,以及為何這個架構適合用於模擬序列型資料。同時,我們也提到 RNN 架構在使用梯度方法做最佳化處理較長序列時會發生的 vanishing gradient 問題,以及為了解決此相關問題所設計特別的記憶單元,稱為 LSTM。

在介紹完架構之後,我們以 RNN 最常見的應用,自然語言模型作為解釋 RNN 在這些應用中所扮演的角色。在自然語言模型中,為了能夠將離散的文字代表成類神經網路可以處理的浮點數向量表示法,我們需要學習如何建構 word embedding。而建構 word embedding 的方式又可以隨著語言模型的不同而有所不同。這些語言模型包括了:以字頻為主,以單字為基礎透過監督學習而學習到的 word embedding (Word2Vec),和以字母為基礎的 word embedding。

對於單字和字母為基礎的 word embedding 中,我們簡略了比較這兩種不同精度的 word embedding,同時也列舉了一個好的 word embeddging 需要的特性,那就是,字詞向量之間的距離必須保持字詞間語義的相似性。然而,過於保持這個限制卻為造成帶有偏見的 字詞向量(bias word embedding)問題。

最後,我們談到了 Seq2Seq 模型在機械翻譯上的應用。然而要讓一個機械翻譯的系統真正的達成任務,需要在 encoder RNN 加上 attention 機制,以及在 decoder RNN 利用 Beam Search 演算法來推測最佳解。除了文字對文字之間的轉譯外, Seq2Seq 也可以應用在影像到文字上,如在為影像註解的文章中所提到的。

然而到目前為止,我們都僅僅討論文字序列。另外一種序列資料也適合用 RNN 和 Seq2Seq 的架構來處理,那就是音訊類型的資料。音訊資料在自然語言中的應用,則為語音辨識。在過往,語音辨識會如處理文字資料,建立一組如單字字彙集的發音基礎元素,稱為 phonemes。這些 phonemes 不一定能形成一對一的單詞對應,但卻可以作為辨識該單詞的發音辨識基礎單元,如英文的音節等。然而,這些離散如字彙的對應,不僅無法在如類神經網路,仰賴連續數域中學習,同時也難以推廣到辨識不同人聲,因此便不再使用,目前的作法則是透過如訊號處理,將音訊訊號透過傅立葉轉換,拆解成不同週期的正弦和餘弦波,轉而在頻域中擷取特徵,將 phonemes 轉為更為細緻的實數描述,而更能精準捕捉字詞與發聲之間的相關性。

然而語言辨識和訊號處理不相同的地方,則是人類的聽力只對特定頻域敏感,於是再轉換到頻域後,還需經過 MFCCs (Mel-frequency cepstral coefficients) 的轉換,放大對人類聽力敏感的頻域,濾掉人類無法感知的頻域,最後產生音訊訊號振幅隨時間變化的關係係數,方能作為任一機械學習分類器的輸入特徵(見下投影片截圖)。

Speech Recognition

若以 Seq2Seq 架構來解決語音辨識的問題,可以看作將語音辨識問題視為兩組序列的轉譯問題:也就是輸入為經過聲音採樣器錄音後的音訊序列,而輸出則是音訊資料中辨認出的文字序列。

輸入的音訊序列長度取決於採樣器的頻率和錄音的長短,一個 1000 Hz 的採樣器,會有 1000 個音訊樣本。而 10 秒的錄音,則會產生 10,000 個樣本,相較於翻譯任務,解碼器所要處理的狀態序列較為長遠,也更容易受到梯度消失的問題。目前音訊的訓練資料在教育使用上,約為 300 小時,而學術使用上則為 3000 小時,最後在商業應用上則高達 100,000 小時,所以在計算量的難度上又較機械翻譯任務為高。

其次,並非每一個輸入狀態都可以對應到一個有意義的輸出,如下圖中,輸出為 19 個字元的句子(包括空格),而輸入則為 1000 個取樣點。有些取樣點,可能對應到講話的停頓處或拉長的音節,所以必須應用一個稱為 CTC(Connectionist Temporal Classification) 損失的函數來產生一個符合語言模型的輸出。而 CTC 的原理則可以用下面的投影片截圖來解說:

CTC

可以看到上圖,在輸出時可以透過 CTC 將連續輸出重複字母中不包含空白(blank),或上圖以底線 "_"標示的單字母,都縮減為單一字母。因為**空白(blank)**可能對應到講者的停頓處,或無法辨識的背景噪音,所以是不輸出的部分。

透過這個方法,使得輸出更適合語言模型,並維持與輸入相同的固定長度的輸出。如上圖的 ttt 會輸出單一個 t,因為在連續 t 的輸出間不具有空白(blank) 將之區隔(可看作講話拉長了音節),緊接著連續 t 之後則可以看到不重複輸出 h ,所以即使不被 空白(blank) 區隔,但也不將 h 併入 t 中,保留此輸出。

另外,上圖也可看到除了字母的輸出,一個語音辨識的輸出還包括了 字間間隔(space)字間間隔(space) 則是利用語言模型作為限制,而將輸出限制為有意義的單詞。

在課程中,亦提到了一個比語音辨識更為簡單的應用,稱為 trigger word detection。這個任務主要是要在一系列的音訊序列中,找到可以喚醒人工智慧助理(如,Apple Siri)或音箱(如,Amazon Alexa)的字詞。

同樣的,我們可以應用語音辨識的架構,但輸出從字元改為二元輸出,如下圖所示。
Trigger word detection

RNN 到此告一個段落,接下來進入的主題,是如何突破深度學習架構裡的巴別塔障礙。


上一篇
25. 深度學習甜點系列:幫影像註解
下一篇
27. 工欲利其器:突破深度學習的巴別塔障礙
系列文
30 天學會深度學習和 Tensorflow30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言