亞馬遜首席科學家:揭祕 Alexa 語音辨識技術

作者 | 發布日期 2017 年 04 月 04 日 12:00 | 分類 AI 人工智慧 , Big Data , 尖端科技 follow us in feedly

3 月 18 日,由美中技術與創新協會(Association of Technology and Innovation,ATI)主辦的第一屆「AI NEXT」大會在西雅圖召開。本次會議的主要嘉賓包括微軟首席 AI 科學家鄧力、微軟院士黃學東、Uber 深度學習負責人 Luming Wang 等。華人之外,還有亞馬遜 Alexa 首席科學家 Nikko Strom、微軟 Cortana 架構師 Savas Parastatidis 等業內知名專家。



大會主題是「探索 AI 的潛力,把 AI 技術應用於實用專案和服務」,對 CV、NLP、智慧助手、深度學習框架均做了專題報告。其中,亞馬遜首席科學家 Nikko Strom 再次以「Alexa 是怎樣練成的」為主題,講述了 Alexa 的深度學習基本架構、聲學模型、語音合成等內容,雷鋒網整理如下:

Nikko Strom,現任亞馬遜首席科學家,是 Echo 和 Alexa 專案的創始成員,在語音辨識技術相關領域有資深研究及從業經驗:

  • 1997 年於瑞典皇家理工學院語音通訊實驗室獲得博士學位,後擔任MIT電腦科學實驗室研究員。
  • 2000 年加入語音技術初創公司 Tellme Networks。
  • 2007 年隨著 Tellme Networks 被微軟收購,加入微軟,推進商業語音辨識技術的前廊研究。
  • 2011 年加入亞馬遜,擔任首席科學家,領導語音辨識及相關網域的深度學習專案。

以下是 Nikko Strom 在大會上的演講,雷鋒網在不改變原意的基礎上略刪減和補充。

先簡單介紹一下我們的產品。如果你買了 Amazon Echo,意味著你可以透過 Alexa 語音辨識系統控制它,並與它對話,而且不需要拿遙控器。左邊(下圖)是 Holiday Season,是我們新加入的白色Echo 和 Dot,相信應該有很多人較偏愛白色的電子產品。

Echo 還可以與沒有內建 Alexa 系統的家電進行連線,如燈具、咖啡機、恆溫器等,只需要喚醒 Alexa,就可以讓這些家電裝置執行一些指令。此外,開發者還可以透過工具包 Alexa Skills Kit,打造個性化的功能。

如今,Echo 已進入數百萬用戶的家中,每天都被大量使用,也讓我們得到無法想像的資料量。

深度學習基礎框架

事實上,人耳並非隨時都在搜集語音資訊,真正在「聽」的時間大約只佔 10%,所以一個人成長到 16歲時,他/她所聽到的語音訓練時間大概有 14,016 個小時。

回到 Alexa,我們把數千個小時的真實語音訓練資料儲存到 S3 中,使用 EC2 雲上的分散式 GPU 集群來訓練深度學習模型。

訓練模型的過程中發現,用 MapReduce 的方法效果並不理想,因為節點之間需要頻繁保持同步更新,無法再透過增加更多節點來加速運算。也可以這樣理解,就是 GPU 集群更新模型的計算速度非常快,每秒都會更新幾次,每次更新大約是模型本身的大小。也就是說,每一個執行序(Worker)都要跟其他執行序同步更新幾百兆的量,而這在 1 秒內要發生很多次。所以,MapReduce 的方法效果並不是很好。

我們在 Alexa 的解決方法就是,使用幾個逼近演算法(Approximations)來減少更新規模,將其壓縮 3 個量級。這裡是我們一篇 2015 年論文裡的圖表,可以看到,隨著 GPU 執行序的增加,訓練速度加快。到 40 個 GUP 執行序時,幾乎成直線上升,然後增速有點放緩。80 GPU 執行序對應著大約 55 萬幀/秒,每秒語音大約包含 100 幀,也就是說現在這 1 秒鐘可以處理大約 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 為這些特徵找到目標值。之後,我們在資料程式庫中,搜尋到最佳片段組合串列,然後播放出來。

(本文由 雷鋒網 授權轉載;首圖來源:Amazon)