Nikko Strom揭秘語音識別技術(shù):Alexa是怎樣煉成的?
聲學(xué)模型就是一個分類器(classifier),輸入的是向量,輸出的是語音類別的概率。這是一個典型的神經(jīng)網(wǎng)絡(luò)。底部是輸入的信息,隱藏層將向量轉(zhuǎn)化到最后一層里的音素概率。
本文引用地址:http://www.ex-cimer.com/article/201703/345967.htm這里是一個美式英語的 Alexa 語音識別系統(tǒng),所以就會輸出美式英語中的各個音素。在 Echo 初始發(fā)布的時候,我們錄了幾千個小時的美式英語語音來訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,這個成本是很高的。當然,世界上還有很多其它的語言,比如我們在2016年9月發(fā)行了德語版的Echo,如果再重頭來一遍用幾千個小時的德語語音來訓(xùn)練,成本是很高的。所以,這個神經(jīng)網(wǎng)絡(luò)模型一個有趣的地方就是可以“遷移學(xué)習(xí)”,你可以保持原有網(wǎng)絡(luò)中其它層不變,只把最后的一層換成德語。
兩種不同的語言,音素有很多是不一樣的,但仍然有很多相同的部分。所以,你可以只使用少量的德語的訓(xùn)練數(shù)據(jù),在稍作改變的模型上就可以最終得到不錯的德語結(jié)果。
“錨定嵌入”
在一個充滿很多人的空間里,Alexa 需要弄清楚到底誰在說話。開始的部分比較簡單,用戶說一句喚醒詞“Alexa”,Echo上的對應(yīng)方向的麥克風(fēng)就會開啟,但接下來的部分就比較困難了。比如,在一個雞尾酒派對中,一個人說“Alexa,來一點爵士樂”,但如果他/她的旁邊緊挨著同伴一起交談,在很短的時間里都說話,那么要弄清楚到底是誰在發(fā)出指令就比較困難了。
這個問題的解決方案來自于2016年的一份論文《錨定語音檢測》(Anchored Speech Detection)。一開始,我們得到喚醒詞“Alexa”,我們使用一個RNN從中提取一個“錨定嵌入”(Anchor embedding),這代表了喚醒詞里包含語音特征。接下來,我們用了另一個不同的RNN,從后續(xù)的請求語句中提取語音特征,基于此得出一個端點決策。這就是我們解決雞尾酒派對難題的方法。
“雙連音片段”
Alexa里的語音合成技術(shù),也用在了Polly里。語音合成的步驟一般包括:
第一步,將文本規(guī)范化。如果你還記得的話,這一步驟恰是對“語音識別”里的最后一個步驟的逆向操作。 第二步,把字素轉(zhuǎn)換成音素,由此得到音素串。 第三步是關(guān)鍵的一步,也是最難的一步,就是將音素生成波形,也就是真正的聲音。 最后,就可以把音頻播放出來了。
Alexa擁有連續(xù)的語音合成。我們錄下了數(shù)小時人的自然發(fā)音的音頻,然后將其切割成非常小的片段,由此組成一個數(shù)據(jù)庫。這些被切割的片段被稱為“雙連音片段”(Di-phone segment),雙連音由一個音素的后半段和另一個音素的前半段組成,當最終把語音整合起來時,聲音聽起來的效果就比較好。
創(chuàng)建這個數(shù)據(jù)庫時,要高度細致,保證整個數(shù)據(jù)庫里片段的一致性。另外一個重要環(huán)節(jié)是算法方面的,如何選擇最佳片段序列結(jié)合在一起形成最終的波形。首先要弄清楚目標函數(shù)是什么,來確保得到最合適的“雙連音片段”,以及如何從龐大的數(shù)據(jù)庫里搜索到這些片段。比如,我們會把這些片段標簽上屬性,我今天會談到三個屬性,分別是音高(pitch)、時長(duration)和密度(intensity),我們也要用RNN為這些特征找到目標值。之后,我們在數(shù)據(jù)庫中,搜索到最佳片段組合序列,然后播放出來。
評論