根據上表,可得到機器翻譯精度為 。
以此類推,以 個單詞為單位的集合為n-gram(多元組) ,採用n-gram統計的翻譯精度 的計算公式為:
以n-gram統計得到的 體現了翻譯的流暢度。將uni-gram下的 到n-gram下的 組合起來,對這 個值進行幾何加權平均 得到:
此外,注意到採用n-gram時,機器翻譯的結果在比參考翻譯短的情況下,很容易得到較大的精度值。改進的方法是設置一個最佳匹配長度(Best Match Length) ,機器翻譯的結果未達到該最佳匹配長度時,則需要接受簡短懲罰(Brevity Penalty,BP) :
最後得到BLEU指標為:
注意力模型
人工翻譯一大段文字時,一般都是閱讀其中的一小部分後翻譯出這一部分,在一小段時間裡注意力只能集中在一小段文字上,而很難做到把整段讀完後一口氣翻譯出來。用Seq2Seq模型構建的機器翻譯系統中,輸出結果的BLEU評分會隨著輸入序列長度的增加而下降,其中的道理就和這個差不多。
2014年Bahdanau等人在論文[Neural Machine Translation by Jointly Learning to Align and Translate]中提出了注意力模型(Attention Model) 。最初只是用這種模型對機器翻譯作出改進,之後其思想也在其他領域也得到了廣泛應用,並成為深度學習領域最有影響力的思想之一。
注意力模型中,網路的示例結構如下所示:
底層是一個雙向循環神經網路,需要處理的序列作為它的輸入。該網路中每一個時間步的激活 中,都包含前向傳播產生的和反向傳播產生的激活:
頂層是一個「多對多」結構的循環神經網路,第 個時間步以該網路中前一個時間步的激活 、輸出 以及底層的BRNN中多個時間步的輸出組合成的激活 作為輸入。對第 個時間步的輸入 有:
其中的參數 意味著頂層RNN中,第 個時間步輸出的 中,把多少「注意力」放在了底層BRNN的第 個時間步的激活 上。它總有:$
為確保參數 滿足上式,常用Softmax單元來計算頂層RNN的第 個時間步對底層BRNN的第 個時間步的激活的「注意力」:
其中的 由頂層RNN的激活 和底層BRNN的激活 一起輸入一個隱藏層中得到的,因為 也就是 的值明顯與 有關,由於 此時還是未知量,則取上一層的激活 。在無法獲知 、 與 之間的關係下,那就用一個神經網路來進行學習,如下圖所示:
要注意的是,該模型的運算成本將達到 。此外,在2015年Xu等人發表的論文[Show, Attend and Tell: Neural Image Caption Generation with Visual Attention]中,這種模型也被應用到了圖像標註中。
應用
語音識別
在語音識別中,要做的是將輸入的一段語音 轉換為一段文字副本作為輸出。
曾經的語音識別系統都是採用人工設計出的音素(Phonemes) 識別單元來構建,音素指的是一種語言中能區別兩個詞的最小語音單位。現在有了端對端深度學習,已經完美沒有必要採用這種識別音素的方法實現語音識別。
採用深度學習方法訓練語音識別系統的前提條件是擁有足夠龐大的訓練數據集。在學術界的研究中,3000小時的長度被認為是訓練一個語音識別系統時,需要的較為合理的音頻數據大小。而訓練商用級別的語音識別系統,需要超過一萬小時甚至十萬小時以上的音頻數據。
語音識別系統可以採用注意力模型來構建:
2006年Graves等人在論文[Connectionist Temporal Classification: Labeling unsegmented sequence data with recurrent neural networks]中提出了一種名為CTC(Connectionist Temporal Classification) 損失函數計算方法,給語音識別系統的訓練過程帶來很大幫助。
由於輸入的是音頻數據,採用RNN建立的語音識別系統中將包含多個時間步,且整個網路中輸出的數量往往是小於輸入的數量的,也就是說不是每一個時間步都有對於的輸出。而CTC的主要優點,是可對沒有對齊的數據進行自動對齊。
如上圖中,以一句意為圖中下面的句子,長度為10s頻率為100Hz的語音作為輸入,則這段語音序列可分為1000個部分,分別輸入RNN的時間步中,而RNN可能不會將1000個作為輸出。
CTC損失計算方法允許RNN輸出一個如圖中所示的結果,允許以「空白(Blank)」作為輸出的同時,也會識別出詞之間存在的「空格(Space)」標記,CTC還將把未被「空白」分隔的重複字元摺疊起來。
關於CTC的更多細節詳見論文內容。
觸發詞檢測
觸發詞檢測(Trigger Word Detection) 現在已經被應用在各種語音助手以及智能音箱上。例如在Windows 10上能夠設置微軟小娜用指令「你好,小娜」進行喚醒,Android上的Google Assistant則可以通過指令「OK,Google」喚醒。
想要訓練一個觸發詞檢測系統,同樣需要有大量的標記好的訓練數據。使用RNN訓練語音識別系統實現觸發詞詞檢測的功能時,可以進行如下圖所示的工作:
在以訓練的語音數據中輸入RNN中,將觸發詞結束後的一小段序列的標籤設置為「 」,以此訓練模型對觸發詞的檢測。
參考資料
吳恩達-序列模型-網易雲課堂
Andrew Ng-Sequence Model-Coursera
deeplearning.ai
sequence to sequence model小記-知乎專欄
seq2seq中的beam search演算法過程-知乎專欄
機器翻譯自動評估-BLEU演算法詳解
深度學習方法:自然語言處理中的Attention Model注意力模型-csdn
白話CTC演算法講解-csdn
課程代碼與資料-GitHub
註:本文涉及的圖片及資料均整理翻譯自Andrew Ng的Deep Learning系列課程,版權歸其所有。翻譯整理水平有限,如有不妥的地方歡迎指出。
推薦閱讀: