提到 RTC 中的 AI,你可能還會(huì )記得今年 RTC 領(lǐng)域中的熱門(mén)話(huà)題超分辨率。前幾天,據說(shuō)某款手機已經(jīng)將其應用于調節照片遠景放大后的清晰度上。我們也曾有不止一位演講人,曾在 RTC 2018 中分享過(guò)將超分辨率應用于實(shí)時(shí)音視頻中的研究。不過(guò),超分辨率只是 AI 在 RTC 中的一個(gè)應用而已。
概括來(lái)講,目前 AI 與 RTC 的結合點(diǎn)有四個(gè):
- 語(yǔ)音分析:使用機器學(xué)習分析,將實(shí)時(shí)音視頻中的語(yǔ)音轉錄為文本、字幕。
- 語(yǔ)音機器人:在對話(huà)框中與用戶(hù)交互的語(yǔ)音機器人,輸入與輸出皆通過(guò)語(yǔ)音,比如Siri、Alexa、Cortana等。
- 計算機視覺(jué):處理視頻,分析和理解視頻中的內容。
- RTC 優(yōu)化:用于提高服務(wù)質(zhì)量或性能的機器學(xué)習算法模型。
1、語(yǔ)音分析(Speech Analytics)
如果你對今年 Google I/O 有印象,你可能還會(huì )記得官方曾經(jīng)做過(guò)一段演示,YouTube 可以根據視頻的圖像和聲音,將視頻內容翻譯并以字幕形式顯示出來(lái)。而且,Google 在語(yǔ)音識別、分析方面做了優(yōu)化,即使視頻中口音模糊,也能根據視頻內容進(jìn)行智能翻譯,最終顯示為字幕。應用于其中的一個(gè)重要技術(shù)方向就是語(yǔ)音分析。
如果你對今年 Google I/O 有印象,你可能還會(huì )記得官方曾經(jīng)做過(guò)一段演示,YouTube 可以根據視頻的圖像和聲音,將視頻內容翻譯并以字幕形式顯示出來(lái)。而且,Google 在語(yǔ)音識別、分析方面做了優(yōu)化,即使視頻中口音模糊,也能根據視頻內容進(jìn)行智能翻譯,最終顯示為字幕。應用于其中的一個(gè)重要技術(shù)方向就是語(yǔ)音分析。
在 RTC 中,語(yǔ)音分析主要的應用形式包括電話(huà)中心智能語(yǔ)音交互、語(yǔ)音轉文本、翻譯等等。語(yǔ)音分析是一個(gè)相對成熟的技術(shù)應用方向,也是一個(gè)多學(xué)科應用于實(shí)際的范例。它涉及了信號處理、模式識別、概率論和信息論、發(fā)聲機理和聽(tīng)覺(jué)機理、深度學(xué)習等。就像 Google 所做的,我們可以將它應用于自己的視頻會(huì )議、視頻通話(huà)、直播連麥等一系列實(shí)時(shí)音視頻場(chǎng)景中。如果想快速實(shí)現,市場(chǎng)上有很多 API 可以幫助到你;如果你的團隊技術(shù)實(shí)力雄厚,那么也有幾個(gè)比較著(zhù)名,也比較老的開(kāi)源工具可以使用。
業(yè)界有不少公司都能提供語(yǔ)音分析功能,例如國內的訊飛、百度、搜狗等,再例如 Google Speech API 和 Facebook 推出的 wav2letter 等。Agora 開(kāi)發(fā)者也完全可以基于 SDK 的接口與這些語(yǔ)音識別、分析服務(wù)結合,實(shí)現創(chuàng )新場(chǎng)景。

如果自研,那么也有不少可以參考的算法模型。例如這4個(gè)“歷史悠久”的語(yǔ)音識別相關(guān)的開(kāi)源項目與非開(kāi)源項目:HTK、CMU Sphinx、Julius、Kaldi。我們逐一簡(jiǎn)單介紹下。
- HTK首先 HTK 并不是開(kāi)源項目,它是由劍橋大學(xué)工程學(xué)院(Cambridge University Engineering Department ,CUED)的機器智能實(shí)驗室于1989年開(kāi)發(fā)的,用于構建CUED的大詞匯量的語(yǔ)音識別系統。HTK 主要包括語(yǔ)音特征提取和分析工具、模型訓練工具、語(yǔ)音識別工具。1999年 HTK 被微軟收購。2015年 HTK 發(fā)布了3.5 Beta 版本,也是目前最新的版本。
- CMU-SphinxCMU-Sphinx 是卡內基-梅隆大學(xué)(CarnegieMellon University,CMU)開(kāi)發(fā)的一款開(kāi)源的語(yǔ)音識別系統。它包括了一系列語(yǔ)音識別器和聲學(xué)模型訓練工具,被稱(chēng)為第一個(gè)高性能的連續語(yǔ)音識別系統。Sphinx 的發(fā)展也很快,Sphinx4 已經(jīng)用 Java 改寫(xiě),所以適合嵌入到Android平臺。
- JuliusJulius 是日本京都大學(xué)和 Information-technology Promotion Agency 聯(lián)合開(kāi)發(fā)的一個(gè)實(shí)用高效雙通道的大詞匯連續語(yǔ)音識別引擎。Julius 通過(guò)結合語(yǔ)言模型和聲學(xué)模型,可以很方便地建立一個(gè)語(yǔ)音識別系統。Julius 支持的語(yǔ)言模型包括:N-gram模型,以規則為基礎的語(yǔ)法和針對孤立詞識別的簡(jiǎn)單單詞列表。它支持的聲學(xué)模型必須是以分詞為單位,且由HMM定義的。HMM 作為語(yǔ)音信號的一種統計模型,是語(yǔ)音識別技術(shù)的主流建模方法,正在語(yǔ)音處理各個(gè)領(lǐng)域中獲得廣泛的應用。Julius 由 C 語(yǔ)言開(kāi)發(fā),遵循GPL開(kāi)源協(xié)議,能夠運行在 Linux、Windows、Mac:OS X、Solaris 以及其他Unix平臺。Julius 最新的版本采用模塊化的設計思想,使得各功能模塊可以通過(guò)參數配置。
- KaldiKaldi 是2009年由 JohnsHopkins University 開(kāi)發(fā)的,剛開(kāi)始項目代碼是基于HTK進(jìn)行的開(kāi)發(fā),現在是 C++ 作為主要語(yǔ)言。Kaldi的維護和更新非常及時(shí),幾乎每一、兩天就有新的 commits,而且在跟進(jìn)學(xué)術(shù)研究的新算法方面也更加快速。國內外很多公司和研究機構也都在用 Kaldi。
上述幾種語(yǔ)音識別開(kāi)源代碼是基礎的開(kāi)源版本,基于這些版本誕生了不少衍生的版本,比如 Platypus、FreeSpeech、Vedics、NatI、Simon、Xvoice、Zanzibar、OpenIVR、Dragon Naturally Speaking等。
2、語(yǔ)音機器人
現在很多呼叫中心都引入了 IVR(互動(dòng)式語(yǔ)音應答),顧客可在任何時(shí)間打電話(huà)獲取他們希望得到的信息,當遇到無(wú)法解決的問(wèn)題時(shí)才轉入人工坐席。它可以提高服務(wù)質(zhì)量、節省費用。
現在很多呼叫中心都引入了 IVR(互動(dòng)式語(yǔ)音應答),顧客可在任何時(shí)間打電話(huà)獲取他們希望得到的信息,當遇到無(wú)法解決的問(wèn)題時(shí)才轉入人工坐席。它可以提高服務(wù)質(zhì)量、節省費用。
但它自身也存在著(zhù)問(wèn)題。你可能也遇到過(guò),有時(shí)候打給一個(gè)客戶(hù)中心,語(yǔ)音提供了多個(gè)選項讓你選擇,可當你聽(tīng)到第五個(gè)之后,就忘了之前的選項都有什么,以至于還要再聽(tīng)一遍。所以很多呼叫中心會(huì )把菜單設計成更少選項更多層級。但這會(huì )讓用戶(hù)的交互過(guò)程變得更長(cháng)。
所以語(yǔ)音機器人開(kāi)始成為呼叫中心的新選擇(也可能有人管它叫智能客服或其它名字)。用戶(hù)只需要說(shuō)出想要什么,它就能根據關(guān)鍵信息篩選出用戶(hù)想要的信息,就好像電話(huà)那頭多了一個(gè) Siri。

當然,Siri 也是是除了呼叫中心以外,語(yǔ)音機器人的另一種應用形式。目前已經(jīng)有很多公司都推出了相應的產(chǎn)品或接口(如上圖所示)。不過(guò),要建立一個(gè)能與人自然交流的語(yǔ)音機器人,從架構、音頻處理到算法模型的訓練等,需要面對很多問(wèn)題:
- 處理噪音
- 處理方言和自定義詞匯表
- 語(yǔ)音驗證
- 處理延遲
- 使用 SSML 進(jìn)行更自然的語(yǔ)音合成
- 模型訓練
現在計算機視覺(jué)的應用應該已經(jīng)很常見(jiàn)了,例如:
- 面部識別
- 物體檢測
- 手勢識別
- 情感分析
不過(guò)這個(gè)實(shí)驗仍然存在很多的局限,如果圖像質(zhì)量過(guò)高,會(huì )需要更多傳輸、處理的時(shí)間,這會(huì )影響檢測的實(shí)時(shí)性。所以,后來(lái)有人提出了可以在本地進(jìn)行圖像識別。

上圖是一個(gè)基本架構,如果你感興趣,也可以嘗試一下。它利用了 google 的 AIY 硬件工具來(lái)運行 DNN。也就是說(shuō),當你采集到視頻之后,可以在本地進(jìn)行處理,那么就無(wú)需擔心圖像識別的實(shí)時(shí)性問(wèn)題了。
4、對 RTC 的優(yōu)化
利用 AI 可以在實(shí)時(shí)音視頻方面做很多事情,例如利用超分辨率來(lái)提升實(shí)時(shí)視頻中模糊圖像的細節,給用戶(hù)呈現更高清的視頻效果,提高視覺(jué)體驗;同時(shí),由于網(wǎng)絡(luò )傳輸線(xiàn)路上有丟包,接收的數據有失真,所以 AI 也被用來(lái)做算法補償,提升傳輸質(zhì)量。
利用 AI 可以在實(shí)時(shí)音視頻方面做很多事情,例如利用超分辨率來(lái)提升實(shí)時(shí)視頻中模糊圖像的細節,給用戶(hù)呈現更高清的視頻效果,提高視覺(jué)體驗;同時(shí),由于網(wǎng)絡(luò )傳輸線(xiàn)路上有丟包,接收的數據有失真,所以 AI 也被用來(lái)做算法補償,提升傳輸質(zhì)量。
超分辨率是通過(guò)深度學(xué)習來(lái)提高其分辨率,進(jìn)而改善實(shí)時(shí)視頻圖像質(zhì)量的技術(shù)。為什么需要這項技術(shù)呢?因為盡管現在用戶(hù)都在高分辨率模式下獲取圖像,但在實(shí)時(shí)傳輸過(guò)程中,視頻編碼器可能會(huì )降低分辨率,以匹配可用帶寬和性能限制。由于這個(gè)處理機制,導致圖像質(zhì)量通常會(huì )低于實(shí)際拍攝的質(zhì)量。而超分辨率的目的就是將視頻質(zhì)量恢復到原始狀態(tài)。
超分辨率在整個(gè)實(shí)時(shí)音視頻傳輸過(guò)程中屬于后處理中的一步。視頻源經(jīng)過(guò)編碼在網(wǎng)絡(luò )上傳輸,解碼器收到后經(jīng)過(guò)解碼出來(lái)是一個(gè)相對模糊的圖像,經(jīng)過(guò)超分辨率處理把細節提升或者放大,再顯示出來(lái)。
現在很多的實(shí)時(shí)視頻場(chǎng)景都發(fā)生在移動(dòng)設備上,所以對于一個(gè)深度學(xué)習算法模型來(lái)講,需要模型體量盡量要小,這就需要面對三個(gè)主要的挑戰:
- 模型能夠實(shí)時(shí)運行于移動(dòng)設備上,且盡量降低功耗,避免引起發(fā)熱等問(wèn)題。
- 模型小,但性能要好,可以得到足夠好的結果。
- 訓練要能夠基于比較合理數量的數據集。
我司的首席科學(xué)家鐘聲曾在 上海的 DevFest 活動(dòng)和美國的 Kranky Geek 上分享過(guò)相關(guān)話(huà)題的演講。如果你希望深入了解,可以查看我們過(guò)去的分享。
除了超分辨率,開(kāi)發(fā)者們還可以利用無(wú)監督學(xué)習來(lái)分析通過(guò) WebRTC 的RTCStats接口收集到的數據,從而來(lái)確定影響通話(huà)質(zhì)量的原因。也可以用 TensorFlow 來(lái)分析并規范化 MOS 數據。

上圖所示是一個(gè)常規的降噪算法的處理邏輯,但在以后,Mozilla 曾推出過(guò)一個(gè) RNNoise Project,利用了深度學(xué)習,幫助 WebRTC 用戶(hù),特別是在嘈雜環(huán)境中進(jìn)行多方通話(huà)的用戶(hù)實(shí)現更好的降噪效果。他們也在官方提供了一個(gè) Sample,與 Speexdsp 的降噪效果進(jìn)行對比。在 Sample 中,他們模擬了人在馬路旁、咖啡館中、車(chē)上的通話(huà)效果,然后用不同的方式進(jìn)行降噪處理。你會(huì )明顯聽(tīng)出,通過(guò) RNNoise 降噪后,無(wú)人說(shuō)話(huà)時(shí)幾乎聽(tīng)不到噪聲,而在有人說(shuō)話(huà)時(shí),還是會(huì )有輕微的噪音摻雜進(jìn)來(lái)。如果你感興趣,可以去搜搜看,體驗一下。你可以在 xiph 的 Github 中找到它的代碼。盡管這只是一個(gè)研究項目,但提供了一種很好的改進(jìn)思路。
盡管舉了這么多的研究案例與開(kāi)源項目,但 AI 在 RTC 行業(yè)的應用還只是剛剛開(kāi)始。