AWS re:Invent 2016: Deep Learning in Alexa
leiphone 作者:亞萌
按:2016年1月11日-12日,美國加州聖克拉拉市,AI Frontier大會召開,這次大會聚集了美國人工智慧公司裡,最強悍的明星人物,包括谷歌大腦負責人Jeff Dean、微軟AI首席科學家鄧力、亞馬遜首席科學家Nikko Strom、百度AI實驗室主管Adam Coates、Facebook科學家賈楊清等20多位業界大咖,堪稱AI業界領域的一場盛事。
作為2017開年最紅火的,人工智慧之星Alexa項目的領導者,亞馬遜首席科學家Nikko Strom帶來了演講,詳細闡述了Alexa裡的大規模深度的基本架構、語音辨識、語音合成等內容,尤其提到了Alexa為「雞尾酒派對難題」找到了有效的解決方法。
Nikko Strom,亞馬遜首席科學家。1997年於瑞典工學院獲得博士學位,之後擔任MIT電腦科學實驗室研究員,2000年加入初創公司Tellme Networks,2007年加入微軟,推進商業語音辨識技術的高階研究。
2011年加入亞馬遜,並擔任首席科學家,領導語音辨識及相關領域的深度學習項目,是如今炙手可熱的亞馬遜Echo和Alexa項目的創始成員。
以下是根據Nikko Strom現場演講整理而成,在不改變願意的基礎上做了刪減和補充。
這是Amazon Echo,內置了一個Alexa系統,提供語音服務,你可以把它放到你的家裡,你可以跟它對話,並不需要拿遙控器來控制。這個Holiday Season,我們加入了新的白色Echo和Dot,你們當中應該有很多人,比較偏愛白色的電子產品。
其它的一些產品,並沒有內置Alexa系統,但是可以與其連接,比如家裡的燈具、咖啡機、恆溫器等,你只需要語音,就可以讓它們執行一些命令。另外,開發者們通過「Skills」來給Alexa增加更多的功能應用。
如今數百萬的家庭裡放置了Echo,而它真正地在被使用著,由此我們得到的數據多到瘋狂(insane),可能會超出你的想像。我無法告訴你確切的數字,但盡可能往大了去想吧。
大規模深度學習
人的耳朵並非每時每刻,都在蒐集語音資訊,「聽」的時間大約佔10%,所以一個人成長到16歲的年紀,他/她所聽到的語音訓練時間,大概有14016小時,關於這個數據,我後面會提到一個對比。
回到Alexa,我們把數千個小時的真實語音訓練數據,儲存到S3中,使用EC2雲上的分布式GPU集群,來訓練深度學習模型。
在訓練模型的過程中,用MapReduce的方法,效果並不理想,因為節點之間,需要頻繁地保持同步更新,不能再透過增加更多的節點,來加速運算。
我們可以這樣理解,那就是GPU集群更新模型的計算,速度非常之快,每秒都有幾次更新,而每次更新大約是模型本身的大小。也就是說,每一個線程(Worker),都要跟其它線程同步更新幾百兆的量,而這在一秒鐘的時間裡,要發生很多次。所以,MapReduce的方法效果並不是很好。
我們在Alexa里的解決方法就是,使用幾個逼近算法(Approximations),來減少這些更新的規模,將其壓縮3個量級。這裡是我們一篇2015年論文的圖表,我們可以看到,隨著GPU線程的增加,訓練速度加快。
到 40個GUP線程時,幾乎成直線上升,然後增速有點放緩。80 GPU線程,對應著大約55萬幀/秒的速度,每一秒的語音大約包含100幀,也就是說這時的一秒鐘,可以處理大約90分鐘的語音。前面我提到一個人要花16年的時間,來學習1.4萬小時的語音,而用我們的系統,大約3個小時就可以學習完成。
這就是我們大致的深度學習基礎架構。
Alexa的語音辨識
我們知道語音辨識系統框架,主要包括四大塊:信號處理、聲學模型、解碼器和後處理。
首先我們將從麥克風收集來的聲音,進行一些信號處理,將語音信號轉化到頻域,從每10毫秒的語音中提出一個特徵向量,提供給後面的聲學模型。
聲學模型負責把音頻,分類成不同的音素。接下來就是解碼器,可以得出概率最高一串詞串,最後一步是後處理,就是把單詞組合成容易讀取的文本。
在這幾個步驟中,我們或多或少都會用到機器學習,和深度學習的方法。但是我今天主要講一下聲學模型的部分。
聲學模型就是一個分類器(classifier),輸入的是向量,輸出的是語音類別的機率。這是一個典型的神經網路。底部是輸入的信息,隱藏層將向量轉化到最後一層裡的音素機率。
這裡是一個美式英語的Alexa語音辨識系統,所以就會輸出美式英語中的各個音素。在Echo初始發佈的時候,我們錄了幾千個小時的美式英語語音,來訓練神經網路模型,這個成本是很高的。
當然,世界上還有很多其它的語言,比如我們在2016年9月發行了德語版的Echo,如果再重頭來一遍,用幾千個小時的德語語音來訓練,成本是很高的。
所以,這個神經網路模型一個有趣的地方,就是可以「遷移學習」,你可以保持原有網路中其它層不變,只把最後的一層換成德語的。
兩種不同的語言,音素有很多是不一樣的,但是仍然有很多相同的部分。所以,你可以只使用少量的德語的訓練數據,在稍作改變的模型上,就可以最終得到不錯的德語結果。
雞尾酒派對難題
在一個充滿很多人的空間里,Alexa需要弄清楚到底誰在說話。開始的部分比較簡單,用戶說一句喚醒詞「Alexa」,Echo上的對應方向的麥克風就會開啓,但接下來的部分就比較困難了。
比如,在一個雞尾酒派對中,一個人說「Alexa,來一點爵士樂」,但如果他/她的旁邊緊挨著同伴一起交談,在很短的時間裡都說話,那麼要弄清楚,到底是誰在發出指令就比較困難了。
這個問題的解決方案來自於2016年的一份論文《錨定語音檢測》(Anchored Speech Detection)。一開始,我們得到喚醒詞「Alexa」,我們使用一個RNN從中提取一個「錨定嵌入」(Anchor embedding),這代表了喚醒詞裡包含語音特徵。
接下來,我們用了另一個不同的RNN,從後續的請求語句中提取語音特徵,基於此得出一個端點決策。這就是我們解決雞尾酒派對難題的方法。
語音合成
Alexa裡的語音合成技術,也用在了Polly裡。語音合成的步驟一般包括:
第一步,將文本規範化。如果你還記得的話,這一步驟恰是對「語音識別」里的最後一個步驟的逆向操作。第二步,把字素轉換成音素,由此得到音素串。第三步是關鍵的一步,也是最難的一步,就是將音素生成波形,也就是真正的聲音。
最後,就可以把音頻播放出來了。
Alexa擁有連續的語音合成。我們錄下了數小時人的自然發音的音頻,然後將其切割成非常小的片段,由此組成一個數據庫。這些被切割的片段被稱為「雙連音片段」(Di-phone segment),雙連音由一個音素的後半段,和另一個音素的前半段組成,當最終把語音整合起來時,聲音聽起來的效果就比較好。
當你創建這個數據庫時,要高度細緻,保證整個數據庫裡,片段的一致性。另外一個重要的環節是算法方面的,如何選擇最佳的片段序列,結合在一起形成最終的波形。
首先要弄清楚目標函數是什麼,來確保得到最合適的「雙連音片段」,以及如何從龐大的數據庫裡,搜索到這些片段。比如,我們會把這些片段標籤上屬性,我今天會談到三個屬性,分別是音高(pitch)、時長(duration)和密度(intensity),我們也要用RNN為這些特徵找到目標值。
之後,我們在數據庫中,搜索到最佳片段組合序列,然後播放出來。
0 comments:
張貼留言