俞棟簡介:1998 年加入微軟公司,現任微軟研究院首席研究員,兼任浙江大學兼職教授和中科大客座教授。語音識别和深度學習方向的資深專家,出版了兩本專著,發表了 160 多篇論文,是 60 餘項專利的發明人及深度學習開源軟體 CNTK 的發起人和主要作者之一。曾獲 2013 年 IEEE 信号處理協會最佳論文獎。現擔任 IEEE 語音語言處理專業委員會委員,曾擔任 IEEE/ACM 音頻、語音及語言處理彙刊、IEEE 信号處理雜志等期刊的編委。
以下是此次專訪的内容:
機器之心:請俞老師先給我們的讀者介紹一下目前語音識别方面最值得關注的一些方向。
俞棟:在安靜環境下并使用近距麥克風的場合,語音識别的識别率已越過了實用的門檻;但是在某些場景下效果還不是那麼好,這就是我們這個領域的 frontier。現在大家主攻幾點:
首先,是不是能夠進一步提升在遠場識别尤其是有人聲幹擾情況下的識别率。目前一般遠場識别的錯誤率是近場識别錯誤率的兩倍左右,是以在很多情況下語音識别系統還不盡如人意。遠場識别至少目前還不能單靠後端的模型加強來解決。現在大家的研究集中在結合多通道信号處理(例如麥克風陣列)和後端處理從拾音源頭到識别系統全程優化來增強整個系統的 表現。
另外,大家還在研究更好的識别算法。這個「更好」有幾個方面:一個方面是能不能更簡單。現在的模型訓練過程還是比較複雜的,需要經過很多步驟。如果沒有 HTK 和 Kaldi 這樣的開源軟體和 recipe 的話,很多團隊都要用很長時間才能搭建一個還 OK 的系統即使 DNN 的使用已經大幅降低了門檻。現在因為有了開源軟體和 recipe,包括像 CNTK 這樣的深度學習工具包,事情已經容易多了,但還有繼續簡化的空間。這方面有很多的工作正在做,包括如何才能不需要 alignment 、或者不需要 dictionary。現在的研究主要還是基于 end-to-end 的方法,就是把中間的一些以前需要人工做的步驟或者需要預處理的部分去掉。雖然目前效果還不能超越傳統的 hybrid system,但是已經接近 hybrid system 的 performance 了。
另外一個方面,最近的幾年裡大家已經從一開始使用簡單的 DNN 發展到了後來相對複雜的 LSTM 和 Deep CNN 這樣的模型。但在很多情況下這些模型表現得還不夠好。是以一個研究方向是尋找一些特殊的網絡結構能夠把我們想要 model 的那些東西都放在裡面。我們之前做過一些嘗試,比如說人在跟另外一個人對話的過程中,他會一直做 prediction,這個 prediction 包括很多東西,不單是包括你下一句想要說什麼話,還包括根據你的口音來判斷你下面說的話會是怎樣等等。我們曾嘗試把這些現象建在模型裡以期提升識别性能。很多的研究人員也在往這個方向走。
還有一個方向是快速自适應的方法—就是快速的不需要人工幹預的自适應方法(unsupervised adaptation)。現在雖然已經有一些自适應的算法了,但是它們相對來說自适應的速度比較慢,或者需要較多的資料。有沒有辦法做到更快的自适應?就好像第一次跟一個口音很重的人說話的時候,你可能開始聽不懂,但兩三句話後你就可以聽懂了。大家也在尋找像這種非常快還能夠保證良好性能的自适應方法。快速自适應從實用的角度來講還是蠻重要的。因為自适應确實在很多情況下能夠提升識别率。
從識别來講,我覺得目前主要是這些方向。
機器之心:Google DeepMind 最近提出了一種通過學習合成波形的方式生成語音的技術 WaveNet,據說可以生成感覺更自然的語音,微軟在這方面有什麼研究項目?
俞棟:微軟也在做類似的工作,但是因為合成的研究團隊和工程團隊都在中國,我對他們具體到哪個地步不是特别清楚。有一些資訊我也不能直接披露,是以就不詳細講了。
機器之心:深度學習已經在語音識别得到了非常出色的表現,您覺得未來語音識别還能在深度學習的哪些方面實作突破?
俞棟:剛才我講了,其中的一個可能性就是通過各種類型的 prediction 和 adaptation 使得深度學習模型表現更出色,這是有可能繼續提升的地方。另外就是 end-to-end 模組化。
還有,像我們最近也在做一些特殊環境中的語音識别,比如說在高噪音環境下、或者你說話的時候有背景的音樂、或者是會議室裡面有多個人同時說話——這些情況下現在的語音識别效果是很差的。是以我們也在研究如何用深度學習的方法在比如多說話人的情況下做得比原來傳統的方法好。我們現在已經在 arXiv 上面釋出了一個早期結果的預印本(Permutation Invariant Training of Deep Models for Speaker-Independent Multi-talker Speech Separation),含有更多實驗結果的正式版本現在正在審稿中。我們的這一稱為 Permutation Invariant Training 的方法主要用于語音分離。用這種方法整個 process 比較簡單而效果很好。在這些方面深度學習都能帶來一定的突破。當然,我前面也講了,完全解決這些問題需要軟硬結合,從拾音到前端和後端需要系統性優化。
機器之心:在類似漢語這種多音字、多音詞比較多的語言中,語音識别方面有什麼和英語這樣的拼音語言不一樣的地方?
俞棟:從語音識别的技術角度來講,沒有太大的差別。因為你最終都是将語音信号,即 waveform sequence,變成字或者詞的 sequence。多音字和多音詞隻是詞表裡對應的字或詞有多個發音規則而已,這在其他語言比如英語中也很常見。
不過中文是一個有音調的語言,音調對字和詞的識别是有影響的。音調資訊如果用好的話,就有可能提升識别率。不過大家發現 deep learning 模型有很強的非線性映射功能,很多音調裡的資訊可以被模型自動學到,不需要特别處理。
唯一可能不一樣的地方是如果你用 end-to-end system,模組化單元會不一樣。因為在英語裡面你一般會選用字母、音素、或音節 作為模組化單元,而不會選用詞作為模組化單元。但在中文裡面你可以直接用漢字作為模組化單元。是以模組化單元的選擇上可能會不太一樣。除此之外,基本上沒有太大差別。
機器之心:技術上沒有太大差別?
俞棟:沒有太大差別。
機器之心:具體來說,您覺得自然語言處理能夠給語音識别帶來哪些幫助?
俞棟:目前來講,自然語言處理對語音識别本身的幫助還不是很大。要說幫助比較大的方面——如果語言模型(language model)算做自然語言處理的話,語言模型還是起到了很大作用的,尤其是在有噪音的環境下,如果沒有語言模型來做限制,效果一般來說都比較差。但是除此之外,現在的 NLP 技術對語音識别沒有起到很大的作用。大家嘗試過很多用自然語言處理技術提升識别率的方法,但效果都不理想。
但是理論上來講它應該是可以起到作用的。因為我們了解句子含義,我們能發現有一些語音識别結果是不 make sense 的,比如說前面的主語跟後面的賓語根本就不搭,在這種情況下識别系統應該選擇其他的 hypothesis,對話系統則應該尋求澄清,但是現有系統沒有這麼做。沒有這麼做的原因在于它其實不了解到底使用者說了什麼,也沒能充分利用遠距離的 dependency 資訊。這樣的錯誤,有可能通過自然語言處理的技術發現并得到更正。但是語義分析是個很困難的問題,如何做還是一個未知數。
機器之心:剛才我們講到在噪音環境下,包括遠距離環境下的識别,除了這個,還有多個說話人一起說話的情況下的語音識别。在這三個方面,您覺得現在和未來可以通過什麼樣的方式來解決這個問題?
俞棟:前面提到過,解決遠距離識别很重要的一點是需要硬體的支援。至少以目前的技術,僅僅通過後端處理效果還不夠好。因為信号在傳輸的過程中衰減很厲害,距離越遠衰減越厲害,信噪比就越差。是以遠距離識别一般都需要做增強。比較好的增強需要硬體支援,比如說麥克風陣列。深度學習方法也能提供一些幫助。當你有多通道資訊的時候,深度學習方法還可以做自動的資訊融合以提升遠距離語音識别的性能。
多通道信号處理,比如麥克風陣列,對分離含噪語音和多人混合語音也至關重要。另外,深度學習方法比如我剛才提到的 Permutation Invariant 訓練方法也可以解決一部分語音分離問題,是整體解決方案中的重要一環。分離後的結果可以送到後端做識别。後端的識别結果回報回來也能幫助提升分離和說話人跟蹤的效果。是以最終的系統應該是前端的分離跟後端的識别融合互助的系統。
機器之心:從您和鄧力老師的那本書《Automatic Speech Recognition: A Deep Learning Approach》出版到現在,您認為期間深度學習有了什麼新的研究成果? 哪些研究成果您認為是很重大的?
俞棟:我們寫這本書的時候,LSTM 這樣的模型才剛剛開始成功應用于語音識别。當時大家對其中的很多 技巧 還沒有很好的了解。是以訓練出來的模型效果還不是那麼好。最近,我的同僚 Jasha Droppo 博士花了很多時間在 LSTM 模型上面,提出了一種很有意思的基于 smoothing 的 regularization 方法使得 LSTM 模型的性能有了很大的提升。他的 smoothing 方法的基本思想在我們的 human parity 文章中有介紹。
另外一個比較大的進展是 Deep CNN。最近兩年裡,很多研究組都發現或證明使用小 Kernel 的 Deep CNN 比我們之前在書裡面提到的使用大 kernel 的 CNN 方法效果更好。Deep CNN 跟 LSTM 比有一個好處。用 LSTM 的話,一般你需要用雙向的 LSTM 效果才比較好。但是雙向 LSTM 會引入很長的時延,因為必須要在整個句子說完之後,識别才能開始。而 Deep CNN 的時延相對短很多,是以在實時系統裡面我們會更傾向于用 Deep CNN 而不是雙向 LSTM。
還有就是端到端的訓練方式也是在我們的書完成後才取得進展的。這方面現在大家的研究工作主要集中在兩類模型上。一類就是 CTC 模型,包括 Johns Hopkins 大學的 Dan Povey 博士從 CTC 發展出來的 lattice-free MMI;還有一類是 attention-based sequence to sequence model。這些模型在我們的書裡面都沒有描述,因為當時還沒有做成功。即便今天它們的表現也還是比 hybrid model 遜色,訓練的穩定性也更差,但是這些模型有比較大的 potential。如果繼續研究有可能取得突破。
另外一個進展是單通道語音分離,尤其是多人混合語音的分離。這方面有兩項有趣的工作。一個是 MERL 的 John Hershey 博士提出的 Deep Clustering 方法,另外一個是我們提出的 Permutation Invariant Training。實作上,Permutation Invariant Training 更簡單。John Hershey 認為有迹象表明 deep clustering 是 permutation invariant training 的一個特例。
這些都是在我們完書之後最近兩年裡比較有意義的進展。
機器之心:也是在這個月,Google 發了神經網絡翻譯系統(GNMT),您對這個系統有什麼看法?微軟在這方面有沒有這樣的研究?
俞棟:微軟很早以前就在做類似的工作了。你可能知道微軟有個基于文本的翻譯系統,在 Skype 上也有一個 speech to speech translation system。在這些系統裡我們已經用到了 neural machine translation 的一些東西。不過翻譯主要是由另外的團隊在做,我在這裡面涉及比較少。
機器之心:語音特征參數提取與魯棒性語音識别與合成的關鍵因素,特征參數在不利的噪聲環境下,魯棒性都會急劇下降。目前有什麼新的研究可以在特征提取中保持語音信号的最重要參數嗎?
俞棟:目前,一個方法是用信号處理技術對輸入信号進行分離和增強。另一個方法是用 deep learning 取代人工從 waveform 直接提取特征。隻要訓練資料的 coverage 足夠大,各種各樣場景的訓練資料都有,模型的結構設計合理,那麼模型的泛化能力和魯棒性就能得到提升。兩種方式結合可以得到更好結果。不過,泛化是機器學習的一個未解決的基本問題,更好的解決方案有待于機器學習理論的進展。
機器之心:微軟在語音識别上如何解決方言帶來的口音問題,比如說「le」和「ne」?針對方言,微軟的語料庫是從何而來的?
俞棟:一個簡單的方法是增加帶口音的訓練語料。如何有效利用這些語料有些講究。大概 3、4 年前,我們發過一篇文章,研究怎麼樣在 deep learning model 上做自适應。帶口音的識别問題可以看作一個自适應的問題。假設你已經有标準語音的模型,帶口音的語音可以看成标準語音的某種偏離。是以我們的解決方法是做自适應。做自适應的時候,我們可以把有類似口音的語料聚合在一起以增加訓練資料。我們發現這樣做效果挺不錯。如果已經有系統上線,收集帶口音的語料并不困難。如果你用過 Windows Phone,你就知道 Windows Phone 的 Cortana 裡面有個選項——你想用标準的識别模型還是想用含口音的模型?使用者可以選擇。
機器之心:今年,微軟釋出了 CNTK。您能說一下 CNTK 跟 Theano、TensorFlow、Torch、Caffe 這些工具的差別嗎?以及在微軟語音系統上是怎麼樣應用 CNTK 的?
俞棟:所有的這些開源工具現在都做得相當好了,都能夠滿足一般的研究或者是工程的需要。但是每一個開源工具都有自己的長處和弱點。CNTK 是唯一一個對 Windows 和 Linux 都有比較好的支援的深度學習工具。相比較其他工具,CNTK 對多 GPU 并行訓練有更好的支援, 不僅并行效率高,而且簡單易用。CNTK 對 C++的支援也是最全面的,你可以完全使用 C++來建構、訓練、修改、和解碼模型。CNTK 版本 1 對 Python binding 支援比較弱。但是剛剛釋出的版本 2.0 提供了非常強大的 Python binding。另外,CNTK 提供了許多運作效率很高的并行檔案閱讀子產品,大大提升了并行效率。這裡我想提一下,我的很多同僚都對 CNTK 2.0 有很大貢獻。尤其值得一提的是 Amit Agarwal,他是我見過的非常難得的優秀軟體工程師和架構師,他主導設計了 CNTK2.0 的主要 API。我在他身上學到很多東西,我非常享受與他讨論的時間。
我和幾個同僚剛開始寫 CNTK1.0 的時候,主要使用者是語音識别研究員和工程師,是以 CNTK 對語音相關的模型、資料結構、和檔案格式支援得相對比較好。因為語音識别系統訓練資料很大,我們很早就在 CNTK 中實作了并行訓練的算法。目前,微軟産品線所有的語音識别模型都是用 CNTK 訓練的。最近我們的語音識别系統在 SWB 資料集上能做到比專業轉錄員錯誤率還低,CNTK 對縮短我們達到這一裡程碑所需的時間有很大貢獻。
機器之心:您曾說過,人工智能的成功在于将多種方法的整合到一個系統。在你們最近發表的論文中,我們看到目前最新的語音識别的研究用到了多任務優化(Multitask Joint learning)以及多種模型混合(ensembles of models)的方法,能談談他們的優勢嗎?
俞棟:語音識别相對來說是一個任務比較單一而非通用的人工智能系統。語音識别的問題定義得也比較清晰。在這樣的系統裡面,把深度學習模型與其他模型進行整合的重要性相對來說比較小。這也就是為什麼隻要你有足夠的資料和運算能力,即便是完全的 deep learning end-to-end system 表現也不錯。不過目前來講,深度學習和 HMM 相結合的混合模型在大多數場景下仍然表現最佳。
語音識别中使用多任務優化的主要目的是增加模型的泛化能力或利用一些不能直接利用的輔助資訊。而多種模型混合(ensembles of models)的主要目的是利用模型間的差異來增強混合後模型的表現。值得指出的是,由于深度學習模型是非線性非凸的優化問題,當初始模型不同時,最後的模型也不同。盡管這些模型的平均表現很接近,但因為他們收斂到的點不一樣,模型之間仍有差異,融合這些模型也能提升一些性能。
但是更通用的人工智能系統還需要能做決策(decision-making)、要做推理、要能了解。對于這樣的系統來說,單靠深度學習方法遠遠不夠。而需要結合過去幾十年裡人工智能其他分支取得的一些進展,比如說增強學習、邏輯推理、知識表達、以及最優和次優搜尋。還有如果我們想讓一群人工智能系統自己從與環境的互動中快速尋找答案,那麼諸如蟻群算法和遺傳算法一類的算法就變得很重要了。
機器之心:今年您覺得在語音識别方面有哪些比較重量級的論文值得去讀,能否推薦幾個給我們的讀者?
俞棟:除了前面提到的 LF-MMI 、 Deep CNN(包括我們最近發表的 LACE 模型)、和 Permutation Invariant Training,另外一個比較有意思的論文是 MERL 在 arXiv 上發表的一篇文章。他們結合了 CTC 和 attention-based model,利用這兩個模型各自的長處來克服對方的弱點。
機器之心:您是怎麼看待監督學習、半監督學習和無監督學習這三個學習方式呢?
俞棟:監督學習是比較 well-defined,有比較明确的任務。目前來講,深度學習對這一類問題 效果比較好。
無監督學習的目的是要尋找資料中的潛在規律。很多情況下,它試圖尋找某種特征變換和相對應的生成模型來表達原始資料。但無監督學習不僅本身困難,對無監督學習系統的評價也很難。原因是通過無監督學習找到的規律不一定對你将來的任務有幫助,或者它對某一任務有幫助,換一個 任務就沒有幫助了。當然,如果你的目标僅僅是資料壓縮,評價還是容易的,但我們使用無監督學習壓縮本身往往不是主要目的。
機器之心:那半監督學習呢?
俞棟:半監督學習介于兩者中間。因為你已經有一部分标注資訊了,是以你 的任務是明确的,不存在不知如何評估的問題。半監督學習在實用系統裡還是有一定作用的。比如說我們需要标注大量資料來訓練語音識别系統,但人工标注既花時間又花錢,是以你往往有比标注資料多得多的未标注資料。沒有标注過的資料,也有很多可以利用的資訊,雖然它們的價值遠遠小于标注的資料。半監督學習對我們的系統性能有一定的提升。
機器之心:最後一個問題,在整個人工智能的布局上,您認為語音識别是一個怎樣的定位?
俞棟:在很多應用場合,語音識别是一個入口。沒有這個入口的話,大家都會覺得這個智能機器不夠智能或者與這個智能機器互動會有困難。人機互動中語音識别是第一步。如果語音識别做得不夠好,那後期的自然語言了解等的錯誤率就會大幅上升。這也是為什麼語音到語音的翻譯要比文本到文本的翻譯難很多,因為在語音對語音的翻譯系統裡語音識别産生的錯誤會在後面翻譯的過程中放大。
曆史上,語音識别也為機器學習和人工智能提供了很多新的方法和解決方案。比如語音識别裡的關鍵模型 Hidden Markov Model 對後來機器學習的很多分支都有幫助。深度學習也是先在語音識别上取得成功,然後才在圖像識别和其他領域取得成功的。